mirror of
https://github.com/infiniteCable2/openpilot.git
synced 2026-08-05 08:16:03 +08:00
ui: Speed Limit Warning (#1263)
* ui: Speed Limit Warning * missed * behind toggle * missed * reorder * fix type
This commit is contained in:
@@ -37,9 +37,11 @@ inline const QString SpeedLimitSourcePolicyTexts[]{
|
||||
enum class SpeedLimitMode {
|
||||
OFF,
|
||||
INFORMATION,
|
||||
WARNING,
|
||||
};
|
||||
|
||||
inline const QString SpeedLimitModeTexts[]{
|
||||
QObject::tr("Off"),
|
||||
QObject::tr("Information"),
|
||||
QObject::tr("Warning"),
|
||||
};
|
||||
|
||||
+1
@@ -27,6 +27,7 @@ SpeedLimitSettings::SpeedLimitSettings(QWidget *parent) : QStackedWidget(parent)
|
||||
std::vector<QString> speed_limit_mode_texts{
|
||||
SpeedLimitModeTexts[static_cast<int>(SpeedLimitMode::OFF)],
|
||||
SpeedLimitModeTexts[static_cast<int>(SpeedLimitMode::INFORMATION)],
|
||||
SpeedLimitModeTexts[static_cast<int>(SpeedLimitMode::WARNING)],
|
||||
};
|
||||
speed_limit_mode_settings = new ButtonParamControlSP(
|
||||
"SpeedLimitMode",
|
||||
|
||||
+7
-3
@@ -55,15 +55,19 @@ private:
|
||||
static QString modeDescription(SpeedLimitMode mode = SpeedLimitMode::OFF) {
|
||||
QString off_str = tr("⦿ Off: Disables the Speed Limit functions.");
|
||||
QString info_str = tr("⦿ Information: Displays the current road's speed limit.");
|
||||
QString warning_str = tr("⦿ Warning: Provides a warning when exceeding the current road's speed limit.");
|
||||
|
||||
if (mode == SpeedLimitMode::INFORMATION) {
|
||||
if (mode == SpeedLimitMode::WARNING) {
|
||||
warning_str = "<font color='white'><b>" + warning_str + "</b></font>";
|
||||
} else if (mode == SpeedLimitMode::INFORMATION) {
|
||||
info_str = "<font color='white'><b>" + info_str + "</b></font>";
|
||||
} else {
|
||||
off_str = "<font color='white'><b>" + off_str + "</b></font>";
|
||||
}
|
||||
|
||||
return QString("%1<br>%2")
|
||||
return QString("%1<br>%2<br>%3")
|
||||
.arg(off_str)
|
||||
.arg(info_str);
|
||||
.arg(info_str)
|
||||
.arg(warning_str);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -328,7 +328,10 @@ void HudRendererSP::drawStandstillTimer(QPainter &p, int x, int y) {
|
||||
}
|
||||
|
||||
void HudRendererSP::drawSpeedLimitSigns(QPainter &p) {
|
||||
QString speedLimitStr = speedLimit > 0 ? QString::number(std::nearbyint(speedLimit)) : "---";
|
||||
int speedLimitRounded = std::nearbyint(speedLimit);
|
||||
bool overspeed = speedLimitRounded < std::nearbyint(speed) && speedLimitRounded > 0;
|
||||
bool speedLimitWarningEnabled = speedLimitMode == SpeedLimitMode::WARNING;
|
||||
QString speedLimitStr = speedLimit > 0 ? QString::number(speedLimitRounded) : "---";
|
||||
|
||||
// Offset display text
|
||||
QString speedLimitSubText = "";
|
||||
@@ -344,6 +347,8 @@ void HudRendererSP::drawSpeedLimitSigns(QPainter &p) {
|
||||
QRect sign_rect(sign_x, sign_y, sign_width, sign_height);
|
||||
|
||||
int alpha = 255;
|
||||
QColor red_color = QColor(255, 0, 0, alpha);
|
||||
QColor speed_color = (speedLimitWarningEnabled && overspeed) ? red_color : QColor(0, 0, 0, alpha);
|
||||
|
||||
if (is_metric) {
|
||||
// EU Vienna Convention style circular sign
|
||||
@@ -364,9 +369,8 @@ void HudRendererSP::drawSpeedLimitSigns(QPainter &p) {
|
||||
|
||||
// Red border ring with color coding
|
||||
QRect red_ring = circle_rect;
|
||||
QColor ring_color = QColor(255, 0, 0, alpha);
|
||||
|
||||
p.setBrush(ring_color);
|
||||
p.setBrush(red_color);
|
||||
p.drawEllipse(red_ring);
|
||||
|
||||
// Center white circle for text
|
||||
@@ -378,7 +382,6 @@ void HudRendererSP::drawSpeedLimitSigns(QPainter &p) {
|
||||
// Speed value, smaller font for 3+ digits
|
||||
int font_size = (speedLimitStr.size() >= 3) ? 70 : 85;
|
||||
p.setFont(InterFont(font_size, QFont::Bold));
|
||||
QColor speed_color = QColor(0, 0, 0, alpha);
|
||||
|
||||
p.setPen(speed_color);
|
||||
p.drawText(center_circle, Qt::AlignCenter, speedLimitStr);
|
||||
@@ -424,7 +427,6 @@ void HudRendererSP::drawSpeedLimitSigns(QPainter &p) {
|
||||
|
||||
// Speed value with color coding
|
||||
p.setFont(InterFont(90, QFont::Bold));
|
||||
QColor speed_color = QColor(0, 0, 0, alpha);
|
||||
|
||||
p.setPen(speed_color);
|
||||
p.drawText(inner_rect.adjusted(0, 80, 0, 0), Qt::AlignTop | Qt::AlignHCenter, speedLimitStr);
|
||||
|
||||
@@ -53,7 +53,7 @@ void ui_update_params_sp(UIStateSP *s) {
|
||||
auto params = Params();
|
||||
s->scene.dev_ui_info = std::atoi(params.get("DevUIInfo").c_str());
|
||||
s->scene.standstill_timer = params.getBool("StandstillTimer");
|
||||
s->scene.speed_limit_mode = params.getBool("SpeedLimitMode");
|
||||
s->scene.speed_limit_mode = std::atoi(params.get("SpeedLimitMode").c_str());
|
||||
}
|
||||
|
||||
DeviceSP::DeviceSP(QObject *parent) : Device(parent) {
|
||||
|
||||
Reference in New Issue
Block a user