@@ -129,16 +129,23 @@ void OnroadWindow::mousePressEvent(QMouseEvent* e) {
QRect speedRect ( rect ( ) . center ( ) . x ( ) - 175 , 50 , 350 , 350 ) ;
bool isSpeedClicked = speedRect . contains ( e - > pos ( ) ) ;
if ( isMax SpeedC licked | | isSpeedClicked ) {
// Speed limit offset button
const QRect speedLimitRect ( 7 , 250 , 225 , 225 ) ;
const bool isSpeedLimitClicked = speedLimitRect . contains ( e - > pos ( ) ) ;
if ( isMaxSpeedClicked | | isSpeedClicked | | isSpeedLimitClicked ) {
// Check if the click was within the max speed area
if ( isMaxSpeedClicked ) {
reverseCruise = ! params . getBool ( " ReverseCruise " ) ;
params . putBoolNonBlocking ( " ReverseCruise " , reverseCruise ) ;
paramsMemory . putBoolNonBlocking ( " FrogPilotTogglesUpdated " , true ) ;
// Check if the click was within the speed text area
} else {
} else if ( isSpeedClicked ) {
speedHidden = ! params . getBool ( " HideSpeed " ) ;
params . putBoolNonBlocking ( " HideSpeed " , speedHidden ) ;
} else {
showSLCOffset = ! params . getBool ( " ShowSLCOffset " ) ;
params . putBoolNonBlocking ( " ShowSLCOffset " , showSLCOffset ) ;
}
widgetClicked = true ;
// If the click wasn't for anything specific, change the value of "ExperimentalMode"
@@ -490,10 +497,13 @@ void AnnotatedCameraWidget::updateState(const UIState &s) {
speed * = s . scene . is_metric ? MS_TO_KPH : MS_TO_MPH ;
auto speed_limit_sign = nav_instruction . getSpeedLimitSign ( ) ;
speedLimit = nav_alive ? nav_instruction . getSpeedLimit ( ) : 0.0 ;
speedLimit = slcOverridden ? slcOverriddenSpeed : slcSpeedLimit ? slcSpeedLimit : nav_alive ? nav_instruction . getSpeedLimit ( ) : 0.0 ;
speedLimit * = ( s . scene . is_metric ? MS_TO_KPH : MS_TO_MPH ) ;
if ( slcSpeedLimit & & ! slcOverridden ) {
speedLimit = speedLimit - ( showSLCOffset ? slcSpeedLimitOffset : 0 ) ;
}
has_us_speed_limit = ( nav_alive & & speed_limit_sign = = cereal : : NavInstruction : : SpeedLimitSign : : MUTCD ) ;
has_us_speed_limit = ( nav_alive & & speed_limit_sign = = cereal : : NavInstruction : : SpeedLimitSign : : MUTCD ) | | slcSpeedLimit ;
has_eu_speed_limit = ( nav_alive & & speed_limit_sign = = cereal : : NavInstruction : : SpeedLimitSign : : VIENNA ) ;
is_metric = s . scene . is_metric ;
speedUnit = s . scene . is_metric ? tr ( " km/h " ) : tr ( " mph " ) ;
@@ -527,6 +537,7 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) {
p . fillRect ( 0 , 0 , width ( ) , UI_HEADER_HEIGHT , bg ) ;
QString speedLimitStr = ( speedLimit > 1 ) ? QString : : number ( std : : nearbyint ( speedLimit ) ) : " – " ;
QString speedLimitOffsetStr = ( showSLCOffset ) ? " + " + QString : : number ( std : : nearbyint ( slcSpeedLimitOffset ) ) : " – " ;
QString speedStr = QString : : number ( std : : nearbyint ( speed ) ) ;
QString setSpeedStr = is_cruise_set ? QString : : number ( std : : nearbyint ( setSpeed - cruiseAdjustment ) ) : " – " ;
@@ -599,11 +610,23 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) {
p . setPen ( QPen ( blackColor ( ) , 6 ) ) ;
p . drawRoundedRect ( sign_rect . adjusted ( 9 , 9 , - 9 , - 9 ) , 16 , 16 ) ;
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 . save ( ) ;
p . setOpacity ( slcOverridden ? 0.25 : 1.0 ) ;
if ( showSLCOffset ) {
p . setFont ( InterFont ( 28 , QFont : : Demi Bold) ) ;
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
@@ -1106,6 +1129,10 @@ void AnnotatedCameraWidget::initializeFrogPilotWidgets() {
reverseCruise = true ;
}
if ( params . getBool ( " ShowSLCOffset " ) ) {
showSLCOffset = true ;
}
// Custom themes configuration
themeConfiguration = {
{ 1 , { QString ( " frog_theme " ) , { QColor ( 23 , 134 , 68 , 242 ) , { { 0.0 , QBrush ( QColor : : fromHslF ( 144 / 360. , 0.71 , 0.31 , 0.9 ) ) } ,
@@ -1160,6 +1187,10 @@ void AnnotatedCameraWidget::updateFrogPilotWidgets(QPainter &p) {
obstacleDistanceStock = scene . obstacle_distance_stock ;
roadNameUI = scene . road_name_ui ;
showDriverCamera = scene . show_driver_camera ;
slcOverridden = scene . speed_limit_overridden ;
slcOverriddenSpeed = scene . speed_limit_overridden_speed ;
slcSpeedLimit = scene . speed_limit ;
slcSpeedLimitOffset = scene . speed_limit_offset * ( is_metric ? MS_TO_KPH : MS_TO_MPH ) ;
stoppedEquivalence = scene . stopped_equivalence ;
turnSignalLeft = scene . turn_signal_left ;
turnSignalRight = scene . turn_signal_right ;