diff --git a/common/params.cc b/common/params.cc index 8f8b5fd..58e9e93 100644 --- a/common/params.cc +++ b/common/params.cc @@ -273,6 +273,8 @@ std::unordered_map keys = { {"GasRegenCmd", PERSISTENT}, {"GoatScream", PERSISTENT}, {"GreenLightAlert", PERSISTENT}, + {"HideSpeed", PERSISTENT}, + {"HideSpeedUI", PERSISTENT}, {"LaneLinesWidth", PERSISTENT}, {"LateralTune", PERSISTENT}, {"LeadInfo", PERSISTENT}, diff --git a/selfdrive/frogpilot/ui/visual_settings.cc b/selfdrive/frogpilot/ui/visual_settings.cc index 48e5966..245a1fb 100644 --- a/selfdrive/frogpilot/ui/visual_settings.cc +++ b/selfdrive/frogpilot/ui/visual_settings.cc @@ -42,6 +42,7 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilot {"QOLVisuals", "Quality of Life", "Miscellaneous quality of life changes to improve your overall openpilot experience.", "../frogpilot/assets/toggle_icons/quality_of_life.png"}, {"DriveStats", "Drive Stats In Home Screen", "Display your device's drive stats in the home screen.", ""}, {"FullMap", "Full Sized Map", "Maximize the size of the map in the onroad UI.", ""}, + {"HideSpeed", "Hide Speed", "Hide the speed indicator in the onroad UI. Additional toggle allows it to be hidden/shown via tapping the speed itself.", ""}, }; for (const auto &[param, title, desc, icon] : visualToggles) { @@ -147,6 +148,10 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilot } }); toggle = qolToggle; + } else if (param == "HideSpeed") { + std::vector hideSpeedToggles{"HideSpeedUI"}; + std::vector hideSpeedToggleNames{tr("Control Via UI")}; + toggle = new FrogPilotParamToggleControl(param, title, desc, icon, hideSpeedToggles, hideSpeedToggleNames); } else { toggle = new ParamControl(param, title, desc, icon, this); diff --git a/selfdrive/frogpilot/ui/visual_settings.h b/selfdrive/frogpilot/ui/visual_settings.h index 9875863..d56ed63 100644 --- a/selfdrive/frogpilot/ui/visual_settings.h +++ b/selfdrive/frogpilot/ui/visual_settings.h @@ -33,7 +33,7 @@ private: std::set customOnroadUIKeys = {"AccelerationPath", "AdjacentPath", "BlindSpotPath", "FPSCounter", "LeadInfo"}; std::set customThemeKeys = {"CustomColors", "CustomIcons", "CustomSignals", "CustomSounds"}; std::set modelUIKeys = {"DynamicPathWidth", "LaneLinesWidth", "PathEdgeWidth", "PathWidth", "RoadEdgesWidth", "UnlimitedLength"}; - std::set qolKeys = {"DriveStats", "FullMap"}; + std::set qolKeys = {"DriveStats", "FullMap", "HideSpeed"}; std::map toggles; diff --git a/selfdrive/ui/qt/onroad.cc b/selfdrive/ui/qt/onroad.cc index 33a9eb4..2fae8a4 100644 --- a/selfdrive/ui/qt/onroad.cc +++ b/selfdrive/ui/qt/onroad.cc @@ -105,8 +105,19 @@ void OnroadWindow::mousePressEvent(QMouseEvent* e) { // FrogPilot clickable widgets bool widgetClicked = false; + // Hide speed button + QRect hideSpeedRect(rect().center().x() - 175, 50, 350, 350); + bool isSpeedClicked = hideSpeedRect.contains(e->pos()); + + if (isSpeedClicked && scene.hide_speed_ui) { + bool currentHideSpeed = scene.hide_speed; + + uiState()->scene.hide_speed = !currentHideSpeed; + params.putBoolNonBlocking("HideSpeed", !currentHideSpeed); + + widgetClicked = true; // If the click wasn't for anything specific, change the value of "ExperimentalMode" - if (scene.experimental_mode_via_screen && e->pos() != timeoutPoint) { + } else if (scene.experimental_mode_via_screen && e->pos() != timeoutPoint) { if (clickTimer.isActive()) { clickTimer.stop(); @@ -533,7 +544,7 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { } // current speed - if (!(fullMapOpen || showDriverCamera)) { + if (!(scene.hide_speed || fullMapOpen || showDriverCamera)) { p.setFont(InterFont(176, QFont::Bold)); drawText(p, rect().center().x(), 210, speedStr); p.setFont(InterFont(66)); diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 978cde2..6292e33 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -321,6 +321,8 @@ void ui_update_frogpilot_params(UIState *s) { bool quality_of_life_visuals = params.getBool("QOLVisuals"); scene.full_map = quality_of_life_visuals && params.getBool("FullMap"); + scene.hide_speed = quality_of_life_visuals && params.getBool("HideSpeed"); + scene.hide_speed_ui = scene.hide_speed && params.getBool("HideSpeedUI"); } void UIState::updateStatus() { diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index 22f4924..5aee36c 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -185,6 +185,8 @@ typedef struct UIScene { bool experimental_mode_via_screen; bool fps_counter; bool full_map; + bool hide_speed; + bool hide_speed_ui; bool lead_info; bool map_open; bool model_ui;