From c22d6e315d532bd802fd8dcf62105a1fee35afa6 Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Tue, 2 Feb 2021 08:10:15 +0800 Subject: [PATCH] UI: mv sidebar_collapsed&viz_rect to struct UIState (#19782) * mv sidebar_collapsed&viz_rect to struct UIState * rebase master * rebase master * rebase master * revert that Co-authored-by: Adeeb Shihadeh --- selfdrive/ui/android/ui.cc | 16 ++++++------ selfdrive/ui/paint.cc | 53 +++++++++++++++++--------------------- selfdrive/ui/qt/home.cc | 6 ++--- selfdrive/ui/sidebar.cc | 2 +- selfdrive/ui/ui.cc | 6 ++--- selfdrive/ui/ui.hpp | 6 ++--- 6 files changed, 41 insertions(+), 48 deletions(-) diff --git a/selfdrive/ui/android/ui.cc b/selfdrive/ui/android/ui.cc index 99bc18e015..2960d5d504 100644 --- a/selfdrive/ui/android/ui.cc +++ b/selfdrive/ui/android/ui.cc @@ -62,10 +62,10 @@ static void handle_display_state(UIState *s, bool user_input) { } static void handle_vision_touch(UIState *s, int touch_x, int touch_y) { - if (s->started && (touch_x >= s->scene.viz_rect.x - bdr_s) + if (s->started && (touch_x >= s->viz_rect.x - bdr_s) && (s->active_app != cereal::UiLayoutState::App::SETTINGS)) { if (!s->scene.frontview) { - s->scene.sidebar_collapsed = !s->scene.sidebar_collapsed; + s->sidebar_collapsed = !s->sidebar_collapsed; } else { Params().write_db_value("IsDriverViewEnabled", "0", 1); } @@ -73,13 +73,13 @@ static void handle_vision_touch(UIState *s, int touch_x, int touch_y) { } static void handle_sidebar_touch(UIState *s, int touch_x, int touch_y) { - if (!s->scene.sidebar_collapsed && touch_x <= sbr_w) { + if (!s->sidebar_collapsed && touch_x <= sbr_w) { if (settings_btn.ptInRect(touch_x, touch_y)) { s->active_app = cereal::UiLayoutState::App::SETTINGS; } else if (home_btn.ptInRect(touch_x, touch_y)) { if (s->started) { s->active_app = cereal::UiLayoutState::App::NONE; - s->scene.sidebar_collapsed = true; + s->sidebar_collapsed = true; } else { s->active_app = cereal::UiLayoutState::App::HOME; } @@ -94,14 +94,14 @@ static void update_offroad_layout_state(UIState *s, PubMaster *pm) { if (timeout > 0) { timeout--; } - if (prev_collapsed != s->scene.sidebar_collapsed || prev_app != s->active_app || timeout == 0) { + if (prev_collapsed != s->sidebar_collapsed || prev_app != s->active_app || timeout == 0) { MessageBuilder msg; auto layout = msg.initEvent().initUiLayoutState(); layout.setActiveApp(s->active_app); - layout.setSidebarCollapsed(s->scene.sidebar_collapsed); + layout.setSidebarCollapsed(s->sidebar_collapsed); pm->send("offroadLayout", msg); - LOGD("setting active app to %d with sidebar %d", (int)s->active_app, s->scene.sidebar_collapsed); - prev_collapsed = s->scene.sidebar_collapsed; + LOGD("setting active app to %d with sidebar %d", (int)s->active_app, s->sidebar_collapsed); + prev_collapsed = s->sidebar_collapsed; prev_app = s->active_app; timeout = 2 * UI_FREQ; } diff --git a/selfdrive/ui/paint.cc b/selfdrive/ui/paint.cc index 799cb6fda9..2ebe934c1c 100644 --- a/selfdrive/ui/paint.cc +++ b/selfdrive/ui/paint.cc @@ -119,8 +119,8 @@ static void draw_lead(UIState *s, int idx){ } float sz = std::clamp((25 * 30) / (d_rel / 3 + 30), 15.0f, 30.0f) * zoom; - x = std::clamp(x, 0.f, s->scene.viz_rect.right() - sz / 2); - y = std::fmin(s->scene.viz_rect.bottom() - sz * .6, y); + x = std::clamp(x, 0.f, s->viz_rect.right() - sz / 2); + y = std::fmin(s->viz_rect.bottom() - sz * .6, y); draw_chevron(s, x, y, sz, nvgRGBA(201, 34, 49, fillAlpha), COLOR_YELLOW); } @@ -196,7 +196,7 @@ static void ui_draw_vision_lane_lines(UIState *s) { static void ui_draw_world(UIState *s) { const UIScene *scene = &s->scene; // Don't draw on top of sidebar - nvgScissor(s->vg, scene->viz_rect.x, scene->viz_rect.y, scene->viz_rect.w, scene->viz_rect.h); + nvgScissor(s->vg, s->viz_rect.x, s->viz_rect.y, s->viz_rect.w, s->viz_rect.h); // Draw lane edges and vision/mpc tracks ui_draw_vision_lane_lines(s); @@ -218,7 +218,7 @@ static void ui_draw_vision_maxspeed(UIState *s) { const bool is_cruise_set = maxspeed != 0 && maxspeed != SET_SPEED_NA; if (is_cruise_set && !s->is_metric) { maxspeed *= 0.6225; } - const Rect rect = {s->scene.viz_rect.x + (bdr_s * 2), int(s->scene.viz_rect.y + (bdr_s * 1.5)), 184, 202}; + const Rect rect = {s->viz_rect.x + (bdr_s * 2), int(s->viz_rect.y + (bdr_s * 1.5)), 184, 202}; ui_fill_rect(s->vg, rect, COLOR_BLACK_ALPHA(100), 30.); ui_draw_rect(s->vg, rect, COLOR_WHITE_ALPHA(100), 10, 20.); @@ -236,14 +236,14 @@ static void ui_draw_vision_speed(UIState *s) { const float speed = std::max(0.0, s->scene.controls_state.getVEgo() * (s->is_metric ? 3.6 : 2.2369363)); const std::string speed_str = std::to_string((int)std::nearbyint(speed)); nvgTextAlign(s->vg, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE); - ui_draw_text(s, s->scene.viz_rect.centerX(), 240, speed_str.c_str(), 96 * 2.5, COLOR_WHITE, "sans-bold"); - ui_draw_text(s, s->scene.viz_rect.centerX(), 320, s->is_metric ? "km/h" : "mph", 36 * 2.5, COLOR_WHITE_ALPHA(200), "sans-regular"); + ui_draw_text(s, s->viz_rect.centerX(), 240, speed_str.c_str(), 96 * 2.5, COLOR_WHITE, "sans-bold"); + ui_draw_text(s, s->viz_rect.centerX(), 320, s->is_metric ? "km/h" : "mph", 36 * 2.5, COLOR_WHITE_ALPHA(200), "sans-regular"); } static void ui_draw_vision_event(UIState *s) { const int viz_event_w = 220; - const int viz_event_x = s->scene.viz_rect.right() - (viz_event_w + bdr_s*2); - const int viz_event_y = s->scene.viz_rect.y + (bdr_s*1.5); + const int viz_event_x = s->viz_rect.right() - (viz_event_w + bdr_s*2); + const int viz_event_y = s->viz_rect.y + (bdr_s*1.5); if (s->scene.controls_state.getDecelForModel() && s->scene.controls_state.getEnabled()) { // draw winding road sign const int img_turn_size = 160*1.5; @@ -262,17 +262,16 @@ static void ui_draw_vision_event(UIState *s) { static void ui_draw_vision_face(UIState *s) { const int face_size = 96; - const int face_x = (s->scene.viz_rect.x + face_size + (bdr_s * 2)); - const int face_y = (s->scene.viz_rect.bottom() - footer_h + ((footer_h - face_size) / 2)); + const int face_x = (s->viz_rect.x + face_size + (bdr_s * 2)); + const int face_y = (s->viz_rect.bottom() - footer_h + ((footer_h - face_size) / 2)); ui_draw_circle_image(s, face_x, face_y, face_size, "driver_face", s->scene.dmonitoring_state.getIsActiveMode()); } static void ui_draw_driver_view(UIState *s) { - s->scene.sidebar_collapsed = true; + s->sidebar_collapsed = true; const bool is_rhd = s->scene.is_rhd; - const Rect &viz_rect = s->scene.viz_rect; - const int width = 3 * viz_rect.w / 4; - const Rect rect = {viz_rect.centerX() - width / 2, viz_rect.y, width, viz_rect.h}; // x, y, w, h + const int width = 3 * s->viz_rect.w / 4; + const Rect rect = {s->viz_rect.centerX() - width / 2, s->viz_rect.y, width, s->viz_rect.h}; // x, y, w, h const Rect valid_rect = {is_rhd ? rect.right() - rect.h / 2 : rect.x, rect.y, rect.h / 2, rect.h}; // blackout @@ -309,13 +308,12 @@ static void ui_draw_driver_view(UIState *s) { } static void ui_draw_vision_header(UIState *s) { - const Rect &viz_rect = s->scene.viz_rect; - NVGpaint gradient = nvgLinearGradient(s->vg, viz_rect.x, - viz_rect.y+(header_h-(header_h/2.5)), - viz_rect.x, viz_rect.y+header_h, + NVGpaint gradient = nvgLinearGradient(s->vg, s->viz_rect.x, + s->viz_rect.y+(header_h-(header_h/2.5)), + s->viz_rect.x, s->viz_rect.y+header_h, nvgRGBAf(0,0,0,0.45), nvgRGBAf(0,0,0,0)); - ui_fill_rect(s->vg, {viz_rect.x, viz_rect.y, viz_rect.w, header_h}, gradient); + ui_fill_rect(s->vg, {s->viz_rect.x, s->viz_rect.y, s->viz_rect.w, header_h}, gradient); ui_draw_vision_maxspeed(s); ui_draw_vision_speed(s); @@ -341,9 +339,9 @@ static void ui_draw_vision_alert(UIState *s) { NVGcolor color = bg_colors[s->status]; color.a *= get_alert_alpha(scene->alert_blinking_rate); const int alr_h = alert_size_map[scene->alert_size] + bdr_s; - const Rect rect = {.x = scene->viz_rect.x - bdr_s, + const Rect rect = {.x = s->viz_rect.x - bdr_s, .y = s->fb_h - alr_h, - .w = scene->viz_rect.w + (bdr_s * 2), + .w = s->viz_rect.w + (bdr_s * 2), .h = alr_h}; ui_fill_rect(s->vg, rect, color); @@ -371,13 +369,10 @@ static void ui_draw_vision_alert(UIState *s) { } static void ui_draw_vision_frame(UIState *s) { - const UIScene *scene = &s->scene; - const Rect &viz_rect = scene->viz_rect; - // Draw video frames glEnable(GL_SCISSOR_TEST); glViewport(s->video_rect.x, s->video_rect.y, s->video_rect.w, s->video_rect.h); - glScissor(viz_rect.x, viz_rect.y, viz_rect.w, viz_rect.h); + glScissor(s->viz_rect.x, s->viz_rect.y, s->viz_rect.w, s->viz_rect.h); draw_frame(s); glDisable(GL_SCISSOR_TEST); @@ -408,10 +403,10 @@ static void ui_draw_background(UIState *s) { } void ui_draw(UIState *s) { - s->scene.viz_rect = Rect{bdr_s, bdr_s, s->fb_w - 2 * bdr_s, s->fb_h - 2 * bdr_s}; - if (!s->scene.sidebar_collapsed) { - s->scene.viz_rect.x += sbr_w; - s->scene.viz_rect.w -= sbr_w; + s->viz_rect = Rect{bdr_s, bdr_s, s->fb_w - 2 * bdr_s, s->fb_h - 2 * bdr_s}; + if (!s->sidebar_collapsed) { + s->viz_rect.x += sbr_w; + s->viz_rect.w -= sbr_w; } const bool draw_alerts = s->started && s->active_app == cereal::UiLayoutState::App::NONE; diff --git a/selfdrive/ui/qt/home.cc b/selfdrive/ui/qt/home.cc index 7a6a72aadb..d1b916d0c3 100644 --- a/selfdrive/ui/qt/home.cc +++ b/selfdrive/ui/qt/home.cc @@ -162,13 +162,13 @@ void HomeWindow::mousePressEvent(QMouseEvent* e) { glWindow->wake(); // Settings button click - if (!ui_state->scene.sidebar_collapsed && settings_btn.ptInRect(e->x(), e->y())) { + if (!ui_state->sidebar_collapsed && settings_btn.ptInRect(e->x(), e->y())) { emit openSettings(); } // Vision click - if (ui_state->started && (e->x() >= ui_state->scene.viz_rect.x - bdr_s)) { - ui_state->scene.sidebar_collapsed = !ui_state->scene.sidebar_collapsed; + if (ui_state->started && (e->x() >= ui_state->viz_rect.x - bdr_s)) { + ui_state->sidebar_collapsed = !ui_state->sidebar_collapsed; } } diff --git a/selfdrive/ui/sidebar.cc b/selfdrive/ui/sidebar.cc index 80c9f3f5c9..3e363eb593 100644 --- a/selfdrive/ui/sidebar.cc +++ b/selfdrive/ui/sidebar.cc @@ -136,7 +136,7 @@ static void draw_connectivity(UIState *s) { } void ui_draw_sidebar(UIState *s) { - if (s->scene.sidebar_collapsed) { + if (s->sidebar_collapsed) { return; } draw_background(s); diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 30787e3ba8..72ceb5e785 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -146,7 +146,7 @@ static void update_sockets(UIState *s) { if (sm.updated("uiLayoutState")) { auto data = sm["uiLayoutState"].getUiLayoutState(); s->active_app = data.getActiveApp(); - scene.sidebar_collapsed = data.getSidebarCollapsed(); + s->sidebar_collapsed = data.getSidebarCollapsed(); } if (sm.updated("thermal")) { scene.thermal = sm["thermal"].getThermal(); @@ -276,7 +276,7 @@ static void update_status(UIState *s) { if (!s->started && s->status != STATUS_OFFROAD) { s->status = STATUS_OFFROAD; s->active_app = cereal::UiLayoutState::App::HOME; - s->scene.sidebar_collapsed = false; + s->sidebar_collapsed = false; s->sound->stop(); s->vipc_client->connected = false; } else if (s->started && s->status == STATUS_OFFROAD) { @@ -284,7 +284,7 @@ static void update_status(UIState *s) { s->started_frame = s->sm->frame; s->active_app = cereal::UiLayoutState::App::NONE; - s->scene.sidebar_collapsed = true; + s->sidebar_collapsed = true; s->scene.alert_size = cereal::ControlsState::AlertSize::NONE; } } diff --git a/selfdrive/ui/ui.hpp b/selfdrive/ui/ui.hpp index e6eb96d77c..8ae730cb75 100644 --- a/selfdrive/ui/ui.hpp +++ b/selfdrive/ui/ui.hpp @@ -110,9 +110,6 @@ typedef struct UIScene { bool is_rhd; bool frontview; - bool sidebar_collapsed; - // responsive layout - Rect viz_rect; std::string alert_text1; std::string alert_text2; @@ -180,7 +177,8 @@ typedef struct UIState { bool longitudinal_control; uint64_t started_frame; - Rect video_rect; + bool sidebar_collapsed; + Rect video_rect, viz_rect; float car_space_transform[6]; } UIState;