ui: Speed Limit Warning (#1263)

* ui: Speed Limit Warning

* missed

* behind toggle

* missed

* reorder

* fix type
This commit is contained in:
Jason Wen
2025-09-20 01:59:07 -04:00
committed by GitHub
parent bdb83b6be1
commit c248f307f8
5 changed files with 18 additions and 9 deletions
@@ -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"),
};
@@ -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",
@@ -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);
}
};
+7 -5
View File
@@ -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);
+1 -1
View File
@@ -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) {