From 846a43b3e48d683586952f2a18f730087147d5bd Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Mon, 29 Mar 2021 14:29:23 -0700 Subject: [PATCH] scrolling improvements (#20524) * fix scrolling problem * continue * set panel margin in one place&add stretch to prevent title flicker * adjust padding * remove stretch * no border * fix padding * better padding * cleanup * continue * add stretch to prevent flicker * reduce padding * typo * revert taht * no background * pretty good * remove Co-authored-by: deanlee Co-authored-by: Comma Device old-commit-hash: c73781f840fd82d8969a9d66c57f5726a8a11966 --- selfdrive/ui/qt/offroad/settings.cc | 50 +++++++++++++--------------- selfdrive/ui/qt/offroad/settings.hpp | 1 - selfdrive/ui/qt/widgets/controls.cc | 5 +-- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index 7e96454224..a9d18d4aff 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -20,7 +20,6 @@ QWidget * toggles_panel() { QVBoxLayout *toggles_list = new QVBoxLayout(); - toggles_list->setMargin(50); toggles_list->addWidget(new ParamControl("OpenpilotEnabledToggle", "Enable openpilot", "Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.", @@ -72,7 +71,6 @@ QWidget * toggles_panel() { DevicePanel::DevicePanel(QWidget* parent) : QWidget(parent) { QVBoxLayout *device_layout = new QVBoxLayout; - device_layout->setMargin(100); Params params = Params(); @@ -154,7 +152,6 @@ DevicePanel::DevicePanel(QWidget* parent) : QWidget(parent) { DeveloperPanel::DeveloperPanel(QWidget* parent) : QFrame(parent) { QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setMargin(100); setLayout(main_layout); setStyleSheet(R"(QLabel {font-size: 50px;})"); } @@ -188,7 +185,6 @@ void DeveloperPanel::showEvent(QShowEvent *event) { QWidget * network_panel(QWidget * parent) { #ifdef QCOM QVBoxLayout *layout = new QVBoxLayout; - layout->setMargin(100); layout->setSpacing(30); // wifi + tethering buttons @@ -220,6 +216,10 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { QVBoxLayout *sidebar_layout = new QVBoxLayout(); sidebar_layout->setMargin(0); panel_widget = new QStackedWidget(); + panel_widget->setStyleSheet(R"( + border-radius: 30px; + background-color: #292929; + )"); // close button QPushButton *close_btn = new QPushButton("X"); @@ -252,7 +252,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { QPushButton *btn = new QPushButton(name); btn->setCheckable(true); btn->setStyleSheet(R"( - * { + QPushButton { color: grey; border: none; background: none; @@ -269,8 +269,24 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { nav_btns->addButton(btn); sidebar_layout->addWidget(btn, 0, Qt::AlignRight); - panel_widget->addWidget(panel); - QObject::connect(btn, &QPushButton::released, [=, w = panel]() { + panel->setContentsMargins(50, 25, 50, 25); + QScrollArea *panel_frame = new QScrollArea; + panel_frame->setWidget(panel); + panel_frame->setWidgetResizable(true); + panel_frame->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + panel_frame->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + panel_frame->setStyleSheet("background-color:transparent;"); + + QScroller *scroller = QScroller::scroller(panel_frame); + auto sp = scroller->scrollerProperties(); + sp.setScrollMetric(QScrollerProperties::FrameRate, QVariant::fromValue(QScrollerProperties::Fps30)); + sp.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, QVariant::fromValue(QScrollerProperties::OvershootAlwaysOff)); + scroller->setScrollerProperties(sp); + scroller->grabGesture(panel_frame->viewport(), QScroller::LeftMouseButtonGesture); + + panel_widget->addWidget(panel_frame); + + QObject::connect(btn, &QPushButton::released, [=, w = panel_frame]() { panel_widget->setCurrentWidget(w); }); } @@ -284,25 +300,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { sidebar_widget->setLayout(sidebar_layout); sidebar_widget->setFixedWidth(500); settings_layout->addWidget(sidebar_widget); - - panel_frame = new QScrollArea; - panel_frame->setWidget(panel_widget); - panel_frame->setWidgetResizable(true); - panel_frame->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - panel_frame->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - panel_frame->setStyleSheet(R"( - border-radius: 30px; - background-color: #292929; - )"); - settings_layout->addWidget(panel_frame); - - // setup panel scrolling - QScroller *scroller = QScroller::scroller(panel_frame); - auto sp = scroller->scrollerProperties(); - sp.setScrollMetric(QScrollerProperties::FrameRate, QVariant::fromValue(QScrollerProperties::Fps30)); - sp.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, QVariant::fromValue(QScrollerProperties::OvershootAlwaysOff)); - scroller->setScrollerProperties(sp); - scroller->grabGesture(panel_frame->viewport(), QScroller::LeftMouseButtonGesture); + settings_layout->addWidget(panel_widget); setLayout(settings_layout); setStyleSheet(R"( diff --git a/selfdrive/ui/qt/offroad/settings.hpp b/selfdrive/ui/qt/offroad/settings.hpp index a3ecdeb462..2dee5b62d1 100644 --- a/selfdrive/ui/qt/offroad/settings.hpp +++ b/selfdrive/ui/qt/offroad/settings.hpp @@ -47,5 +47,4 @@ private: QWidget *sidebar_widget; QButtonGroup *nav_btns; QStackedWidget *panel_widget; - QScrollArea *panel_frame; }; diff --git a/selfdrive/ui/qt/widgets/controls.cc b/selfdrive/ui/qt/widgets/controls.cc index a6f0812911..d9c170e27e 100644 --- a/selfdrive/ui/qt/widgets/controls.cc +++ b/selfdrive/ui/qt/widgets/controls.cc @@ -20,7 +20,7 @@ AbstractControl::AbstractControl(const QString &title, const QString &desc, cons hlayout = new QHBoxLayout; hlayout->setMargin(0); - hlayout->setSpacing(50); + hlayout->setSpacing(20); // left icon if (!icon.isEmpty()) { @@ -33,7 +33,7 @@ AbstractControl::AbstractControl(const QString &title, const QString &desc, cons // title title_label = new QPushButton(title); - title_label->setStyleSheet("font-size: 50px; font-weight: 400; text-align: left; background: none;"); + title_label->setStyleSheet("font-size: 50px; font-weight: 400; text-align: left;"); hlayout->addWidget(title_label); vlayout->addLayout(hlayout); @@ -53,4 +53,5 @@ AbstractControl::AbstractControl(const QString &title, const QString &desc, cons } setLayout(vlayout); + setStyleSheet("background-color: transparent;"); }