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 <adeebshihadeh@gmail.com>
albatross
Dean Lee 2021-02-02 08:10:15 +08:00 committed by GitHub
parent 49d4d58201
commit c22d6e315d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 41 additions and 48 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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;