diff --git a/selfdrive/ui/qt/onroad.cc b/selfdrive/ui/qt/onroad.cc index c538e1a..74671df 100755 --- a/selfdrive/ui/qt/onroad.cc +++ b/selfdrive/ui/qt/onroad.cc @@ -431,12 +431,80 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { bg.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0)); p.fillRect(0, 0, width(), UI_HEADER_HEIGHT, bg); - QString speedLimitStr = (speedLimit > 1) ? QString::number(std::nearbyint(speedLimit)) : "–"; - QString speedLimitOffsetStr = slcSpeedLimitOffset == 0 ? "–" : QString::number(slcSpeedLimitOffset, 'f', 0).prepend(slcSpeedLimitOffset > 0 ? "+" : ""); - QString speedStr = QString::number(std::nearbyint(speed)); - QString setSpeedStr = is_cruise_set ? QString::number(std::nearbyint(setSpeed - cruiseAdjustment)) : "–"; + // Todo: Display stock image if no camera + + // QString speedLimitStr = (speedLimit > 1) ? QString::number(std::nearbyint(speedLimit)) : "–"; + // QString speedLimitOffsetStr = slcSpeedLimitOffset == 0 ? "–" : QString::number(slcSpeedLimitOffset, 'f', 0).prepend(slcSpeedLimitOffset > 0 ? "+" : ""); + // QString speedStr = QString::number(std::nearbyint(speed)); + // QString setSpeedStr = is_cruise_set ? QString::number(std::nearbyint(setSpeed - cruiseAdjustment)) : "–"; + + p.restore(); if (!scene.hide_max_speed) { + drawSpeedWidget (p, 60, 45, "MAX", "33", QColor(0xff, 0xff, 0xff)) + } + + // Draw FrogPilot widgets + paintFrogPilotWidgets(p); +} + + +// void drawSpeedWidgetRegional(QPainter &p, int x, int y, QString title, QString text, QColor colorSpeed) { + +// const QRect sign_rect = set_speed_rect.adjusted(sign_margin, default_size.height(), -sign_margin, -sign_margin); +// // US/Canada (MUTCD style) sign +// if (has_us_speed_limit) { +// p.setPen(Qt::NoPen); +// p.setBrush(whiteColor()); +// p.drawRoundedRect(sign_rect, 24, 24); +// p.setPen(QPen(blackColor(), 6)); +// p.drawRoundedRect(sign_rect.adjusted(9, 9, -9, -9), 16, 16); + +// p.save(); +// p.setOpacity(slcOverridden ? 0.25 : 1.0); +// if (speedLimitController && showSLCOffset && !slcOverridden) { +// p.setFont(InterFont(28, QFont::DemiBold)); +// p.drawText(sign_rect.adjusted(0, 22, 0, 0), Qt::AlignTop | Qt::AlignHCenter, tr("LIMIT")); +// p.setFont(InterFont(70, QFont::Bold)); +// p.drawText(sign_rect.adjusted(0, 51, 0, 0), Qt::AlignTop | Qt::AlignHCenter, speedLimitStr); +// p.setFont(InterFont(50, QFont::DemiBold)); +// p.drawText(sign_rect.adjusted(0, 120, 0, 0), Qt::AlignTop | Qt::AlignHCenter, speedLimitOffsetStr); +// } else { +// p.setFont(InterFont(28, QFont::DemiBold)); +// p.drawText(sign_rect.adjusted(0, 22, 0, 0), Qt::AlignTop | Qt::AlignHCenter, tr("SPEED")); +// p.drawText(sign_rect.adjusted(0, 51, 0, 0), Qt::AlignTop | Qt::AlignHCenter, tr("LIMIT")); +// p.setFont(InterFont(70, QFont::Bold)); +// p.drawText(sign_rect.adjusted(0, 85, 0, 0), Qt::AlignTop | Qt::AlignHCenter, speedLimitStr); +// } +// p.restore(); +// } + +// // EU (Vienna style) sign +// if (has_eu_speed_limit) { +// p.setPen(Qt::NoPen); +// p.setBrush(whiteColor()); +// p.drawEllipse(sign_rect); +// p.setPen(QPen(Qt::red, 20)); +// p.drawEllipse(sign_rect.adjusted(16, 16, -16, -16)); + +// p.save(); +// p.setOpacity(slcOverridden ? 0.25 : 1.0); +// p.setPen(blackColor()); +// if (showSLCOffset) { +// p.setFont(InterFont((speedLimitStr.size() >= 3) ? 60 : 70, QFont::Bold)); +// p.drawText(sign_rect.adjusted(0, -25, 0, 0), Qt::AlignCenter, speedLimitStr); +// p.setFont(InterFont(40, QFont::DemiBold)); +// p.drawText(sign_rect.adjusted(0, 100, 0, 0), Qt::AlignTop | Qt::AlignHCenter, speedLimitOffsetStr); +// } else { +// p.setFont(InterFont((speedLimitStr.size() >= 3) ? 60 : 70, QFont::Bold)); +// p.drawText(sign_rect, Qt::AlignCenter, speedLimitStr); +// } +// p.restore(); +// } +// } +// } + +void AnnotatedCameraWidget::drawSpeedWidget(QPainter &p, int x, int y, QString title, QString text, QColor colorSpeed) { // Draw outer box + border to contain set speed and speed limit const int sign_margin = 12; const int us_sign_height = 186; @@ -453,120 +521,30 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { int top_radius = 32; int bottom_radius = has_eu_speed_limit ? 100 : 32; - QRect set_speed_rect(QPoint(60 + (default_size.width() - set_speed_size.width()) / 2, 45), set_speed_size); - if (is_cruise_set && cruiseAdjustment != 0) { - float transition = qBound(0.0f, 4.0f * (cruiseAdjustment / setSpeed), 1.0f); - QColor min = whiteColor(75); - QColor max = vtscControllingCurve ? redColor() : greenColor(); - - p.setPen(QPen(QColor::fromRgbF( - min.redF() + transition * (max.redF() - min.redF()), - min.greenF() + transition * (max.greenF() - min.greenF()), - min.blueF() + transition * (max.blueF() - min.blueF()) - ), 10)); - } else if (scene.reverse_cruise) { - p.setPen(QPen(blueColor(), 6)); - } else if (trafficModeActive) { - p.setPen(QPen(redColor(), 10)); - } else { - p.setPen(QPen(whiteColor(75), 6)); - } + QRect set_speed_rect(QPoint(x + (default_size.width() - set_speed_size.width()) / 2, y), set_speed_size); + p.setPen(QPen(color), 10)); p.setBrush(blackColor(166)); drawRoundedRect(p, set_speed_rect, top_radius, top_radius, bottom_radius, bottom_radius); // Draw MAX QColor max_color = QColor(0x80, 0xd8, 0xa6, 0xff); - QColor set_speed_color = whiteColor(); - if (is_cruise_set) { - if (status == STATUS_DISENGAGED) { - max_color = whiteColor(); - } else if (status == STATUS_OVERRIDE) { - max_color = QColor(0x91, 0x9b, 0x95, 0xff); - } else if (speedLimit > 0) { - auto interp_color = [=](QColor c1, QColor c2, QColor c3) { - return speedLimit > 0 ? interpColor(setSpeed, {speedLimit + 5, speedLimit + 15, speedLimit + 25}, {c1, c2, c3}) : c1; - }; - max_color = interp_color(max_color, QColor(0xff, 0xe4, 0xbf), QColor(0xff, 0xbf, 0xbf)); - set_speed_color = interp_color(set_speed_color, QColor(0xff, 0x95, 0x00), QColor(0xff, 0x00, 0x00)); - } - } else { - max_color = QColor(0xa6, 0xa6, 0xa6, 0xff); - set_speed_color = QColor(0x72, 0x72, 0x72, 0xff); - } p.setFont(InterFont(40, QFont::DemiBold)); p.setPen(max_color); - p.drawText(set_speed_rect.adjusted(0, 27, 0, 0), Qt::AlignTop | Qt::AlignHCenter, tr("MAX")); + p.drawText(set_speed_rect.adjusted(0, 27, 0, 0), Qt::AlignTop | Qt::AlignHCenter, title); p.setFont(InterFont(90, QFont::Bold)); - p.setPen(set_speed_color); + p.setPen(color); p.drawText(set_speed_rect.adjusted(0, 77, 0, 0), Qt::AlignTop | Qt::AlignHCenter, setSpeedStr); - const QRect sign_rect = set_speed_rect.adjusted(sign_margin, default_size.height(), -sign_margin, -sign_margin); - // US/Canada (MUTCD style) sign - if (has_us_speed_limit) { - p.setPen(Qt::NoPen); - p.setBrush(whiteColor()); - p.drawRoundedRect(sign_rect, 24, 24); - p.setPen(QPen(blackColor(), 6)); - p.drawRoundedRect(sign_rect.adjusted(9, 9, -9, -9), 16, 16); - - p.save(); - p.setOpacity(slcOverridden ? 0.25 : 1.0); - if (speedLimitController && showSLCOffset && !slcOverridden) { - p.setFont(InterFont(28, QFont::DemiBold)); - p.drawText(sign_rect.adjusted(0, 22, 0, 0), Qt::AlignTop | Qt::AlignHCenter, tr("LIMIT")); - p.setFont(InterFont(70, QFont::Bold)); - p.drawText(sign_rect.adjusted(0, 51, 0, 0), Qt::AlignTop | Qt::AlignHCenter, speedLimitStr); - p.setFont(InterFont(50, QFont::DemiBold)); - p.drawText(sign_rect.adjusted(0, 120, 0, 0), Qt::AlignTop | Qt::AlignHCenter, speedLimitOffsetStr); - } else { - p.setFont(InterFont(28, QFont::DemiBold)); - p.drawText(sign_rect.adjusted(0, 22, 0, 0), Qt::AlignTop | Qt::AlignHCenter, tr("SPEED")); - p.drawText(sign_rect.adjusted(0, 51, 0, 0), Qt::AlignTop | Qt::AlignHCenter, tr("LIMIT")); - p.setFont(InterFont(70, QFont::Bold)); - p.drawText(sign_rect.adjusted(0, 85, 0, 0), Qt::AlignTop | Qt::AlignHCenter, speedLimitStr); - } - p.restore(); - } - - // EU (Vienna style) sign - if (has_eu_speed_limit) { - p.setPen(Qt::NoPen); - p.setBrush(whiteColor()); - p.drawEllipse(sign_rect); - p.setPen(QPen(Qt::red, 20)); - p.drawEllipse(sign_rect.adjusted(16, 16, -16, -16)); - - p.save(); - p.setOpacity(slcOverridden ? 0.25 : 1.0); - p.setPen(blackColor()); - if (showSLCOffset) { - p.setFont(InterFont((speedLimitStr.size() >= 3) ? 60 : 70, QFont::Bold)); - p.drawText(sign_rect.adjusted(0, -25, 0, 0), Qt::AlignCenter, speedLimitStr); - p.setFont(InterFont(40, QFont::DemiBold)); - p.drawText(sign_rect.adjusted(0, 100, 0, 0), Qt::AlignTop | Qt::AlignHCenter, speedLimitOffsetStr); - } else { - p.setFont(InterFont((speedLimitStr.size() >= 3) ? 60 : 70, QFont::Bold)); - p.drawText(sign_rect, Qt::AlignCenter, speedLimitStr); - } - p.restore(); - } - } - - // current speed - if (!(scene.hide_speed)) { - // CLEARPILOT changes to 120 from ~176 - // Maybe we want to hide this? - p.setFont(InterFont(140, QFont::Bold)); - drawText(p, rect().center().x(), 210, speedStr); - // CLEARPILOT changes to 40 from 66 - p.setFont(InterFont(50)); - drawText(p, rect().center().x(), 290, speedUnit, 200); - } - - p.restore(); - - // Draw FrogPilot widgets - paintFrogPilotWidgets(p); + // // current speed + // if (!(scene.hide_speed)) { + // // CLEARPILOT changes to 120 from ~176 + // // Maybe we want to hide this? + // p.setFont(InterFont(140, QFont::Bold)); + // drawText(p, rect().center().x(), 210, speedStr); + // // CLEARPILOT changes to 40 from 66 + // p.setFont(InterFont(50)); + // drawText(p, rect().center().x(), 290, speedUnit, 200); + // } } void AnnotatedCameraWidget::drawText(QPainter &p, int x, int y, const QString &text, int alpha) { diff --git a/selfdrive/ui/qt/onroad.h b/selfdrive/ui/qt/onroad.h index 91f0e15..3bc1a4b 100755 --- a/selfdrive/ui/qt/onroad.h +++ b/selfdrive/ui/qt/onroad.h @@ -97,6 +97,7 @@ public: private: void drawText(QPainter &p, int x, int y, const QString &text, int alpha = 255); + void drawSpeedWidget(QPainter &p, int x, int y, QString title, QString text, QColor colorSpeed); QVBoxLayout *main_layout; QPixmap dm_img;