From 1379989e0de7f2d5d163879befd32638dc1ebe1b Mon Sep 17 00:00:00 2001 From: Cameron Clough Date: Tue, 20 Sep 2022 10:45:13 -0700 Subject: [PATCH] sidebar: add button pressed states (#25848) * add flag img * add image assets * try darker button pressed * remove pressed image, set opacity instead * settings can be pressed too! * cleanup * make settings button white * bookmark --- selfdrive/assets/images/button_flag.png | Bin 0 -> 3305 bytes selfdrive/ui/qt/home.cc | 1 + selfdrive/ui/qt/sidebar.cc | 31 +++++++++++++++++++----- selfdrive/ui/qt/sidebar.h | 5 +++- 4 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 selfdrive/assets/images/button_flag.png diff --git a/selfdrive/assets/images/button_flag.png b/selfdrive/assets/images/button_flag.png new file mode 100644 index 0000000000000000000000000000000000000000..b55620328a77a6672a4fb7e726ecd484bb2af97c GIT binary patch literal 3305 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 literal 0 HcmV?d00001 diff --git a/selfdrive/ui/qt/home.cc b/selfdrive/ui/qt/home.cc index 435ba9056..78bc6aab4 100644 --- a/selfdrive/ui/qt/home.cc +++ b/selfdrive/ui/qt/home.cc @@ -41,6 +41,7 @@ HomeWindow::HomeWindow(QWidget* parent) : QWidget(parent) { setAttribute(Qt::WA_NoSystemBackground); QObject::connect(uiState(), &UIState::uiUpdate, this, &HomeWindow::updateState); QObject::connect(uiState(), &UIState::offroadTransition, this, &HomeWindow::offroadTransition); + QObject::connect(uiState(), &UIState::offroadTransition, sidebar, &Sidebar::offroadTransition); } void HomeWindow::showSidebar(bool show) { diff --git a/selfdrive/ui/qt/sidebar.cc b/selfdrive/ui/qt/sidebar.cc index a84542d29..eeb163aa1 100644 --- a/selfdrive/ui/qt/sidebar.cc +++ b/selfdrive/ui/qt/sidebar.cc @@ -32,8 +32,9 @@ void Sidebar::drawMetric(QPainter &p, const QPair &label, QCol p.drawText(label_rect, Qt::AlignCenter, label.second); } -Sidebar::Sidebar(QWidget *parent) : QFrame(parent) { +Sidebar::Sidebar(QWidget *parent) : QFrame(parent), onroad(false), flag_pressed(false), settings_pressed(false) { home_img = loadPixmap("../assets/images/button_home.png", home_btn.size()); + flag_img = loadPixmap("../assets/images/button_flag.png", home_btn.size()); settings_img = loadPixmap("../assets/images/button_settings.png", settings_btn.size(), Qt::IgnoreAspectRatio); connect(this, &Sidebar::valueChanged, [=] { update(); }); @@ -47,17 +48,34 @@ Sidebar::Sidebar(QWidget *parent) : QFrame(parent) { pm = std::make_unique>({"userFlag"}); } +void Sidebar::mousePressEvent(QMouseEvent *event) { + if (onroad && home_btn.contains(event->pos())) { + flag_pressed = true; + update(); + } else if (settings_btn.contains(event->pos())) { + settings_pressed = true; + update(); + } +} + void Sidebar::mouseReleaseEvent(QMouseEvent *event) { + if (flag_pressed || settings_pressed) { + flag_pressed = settings_pressed = false; + update(); + } if (home_btn.contains(event->pos())) { MessageBuilder msg; msg.initEvent().initUserFlag(); pm->send("userFlag", msg); - } - if (settings_btn.contains(event->pos())) { + } else if (settings_btn.contains(event->pos())) { emit openSettings(); } } +void Sidebar::offroadTransition(bool offroad) { + onroad = !offroad; +} + void Sidebar::updateState(const UIState &s) { if (!isVisible()) return; @@ -102,11 +120,12 @@ void Sidebar::paintEvent(QPaintEvent *event) { p.fillRect(rect(), QColor(57, 57, 57)); - // static imgs - p.setOpacity(0.65); + // buttons + p.setOpacity(settings_pressed ? 0.65 : 1.0); p.drawPixmap(settings_btn.x(), settings_btn.y(), settings_img); + p.setOpacity(onroad && flag_pressed ? 0.65 : 1.0); + p.drawPixmap(home_btn.x(), home_btn.y(), onroad ? flag_img : home_img); p.setOpacity(1.0); - p.drawPixmap(home_btn.x(), home_btn.y(), home_img); // network int x = 58; diff --git a/selfdrive/ui/qt/sidebar.h b/selfdrive/ui/qt/sidebar.h index 621a21444..53ad7467a 100644 --- a/selfdrive/ui/qt/sidebar.h +++ b/selfdrive/ui/qt/sidebar.h @@ -24,14 +24,17 @@ signals: void valueChanged(); public slots: + void offroadTransition(bool offroad); void updateState(const UIState &s); protected: void paintEvent(QPaintEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void drawMetric(QPainter &p, const QPair &label, QColor c, int y); - QPixmap home_img, settings_img; + QPixmap home_img, flag_img, settings_img; + bool onroad, flag_pressed, settings_pressed; const QMap network_type = { {cereal::DeviceState::NetworkType::NONE, tr("--")}, {cereal::DeviceState::NetworkType::WIFI, tr("Wi-Fi")},