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 <deanlee3@gmail.com>
Co-authored-by: Comma Device <device@comma.ai>
old-commit-hash: c73781f840
commatwo_master
Adeeb Shihadeh 4 years ago committed by GitHub
parent 6491c88e96
commit 846a43b3e4
  1. 50
      selfdrive/ui/qt/offroad/settings.cc
  2. 1
      selfdrive/ui/qt/offroad/settings.hpp
  3. 5
      selfdrive/ui/qt/widgets/controls.cc

@ -20,7 +20,6 @@
QWidget * toggles_panel() { QWidget * toggles_panel() {
QVBoxLayout *toggles_list = new QVBoxLayout(); QVBoxLayout *toggles_list = new QVBoxLayout();
toggles_list->setMargin(50);
toggles_list->addWidget(new ParamControl("OpenpilotEnabledToggle", toggles_list->addWidget(new ParamControl("OpenpilotEnabledToggle",
"Enable openpilot", "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.", "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) { DevicePanel::DevicePanel(QWidget* parent) : QWidget(parent) {
QVBoxLayout *device_layout = new QVBoxLayout; QVBoxLayout *device_layout = new QVBoxLayout;
device_layout->setMargin(100);
Params params = Params(); Params params = Params();
@ -154,7 +152,6 @@ DevicePanel::DevicePanel(QWidget* parent) : QWidget(parent) {
DeveloperPanel::DeveloperPanel(QWidget* parent) : QFrame(parent) { DeveloperPanel::DeveloperPanel(QWidget* parent) : QFrame(parent) {
QVBoxLayout *main_layout = new QVBoxLayout(this); QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout->setMargin(100);
setLayout(main_layout); setLayout(main_layout);
setStyleSheet(R"(QLabel {font-size: 50px;})"); setStyleSheet(R"(QLabel {font-size: 50px;})");
} }
@ -188,7 +185,6 @@ void DeveloperPanel::showEvent(QShowEvent *event) {
QWidget * network_panel(QWidget * parent) { QWidget * network_panel(QWidget * parent) {
#ifdef QCOM #ifdef QCOM
QVBoxLayout *layout = new QVBoxLayout; QVBoxLayout *layout = new QVBoxLayout;
layout->setMargin(100);
layout->setSpacing(30); layout->setSpacing(30);
// wifi + tethering buttons // wifi + tethering buttons
@ -220,6 +216,10 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
QVBoxLayout *sidebar_layout = new QVBoxLayout(); QVBoxLayout *sidebar_layout = new QVBoxLayout();
sidebar_layout->setMargin(0); sidebar_layout->setMargin(0);
panel_widget = new QStackedWidget(); panel_widget = new QStackedWidget();
panel_widget->setStyleSheet(R"(
border-radius: 30px;
background-color: #292929;
)");
// close button // close button
QPushButton *close_btn = new QPushButton("X"); QPushButton *close_btn = new QPushButton("X");
@ -252,7 +252,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
QPushButton *btn = new QPushButton(name); QPushButton *btn = new QPushButton(name);
btn->setCheckable(true); btn->setCheckable(true);
btn->setStyleSheet(R"( btn->setStyleSheet(R"(
* { QPushButton {
color: grey; color: grey;
border: none; border: none;
background: none; background: none;
@ -269,8 +269,24 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
nav_btns->addButton(btn); nav_btns->addButton(btn);
sidebar_layout->addWidget(btn, 0, Qt::AlignRight); sidebar_layout->addWidget(btn, 0, Qt::AlignRight);
panel_widget->addWidget(panel); panel->setContentsMargins(50, 25, 50, 25);
QObject::connect(btn, &QPushButton::released, [=, w = panel]() { 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::FrameRates>(QScrollerProperties::Fps30));
sp.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, QVariant::fromValue<QScrollerProperties::OvershootPolicy>(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); panel_widget->setCurrentWidget(w);
}); });
} }
@ -284,25 +300,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
sidebar_widget->setLayout(sidebar_layout); sidebar_widget->setLayout(sidebar_layout);
sidebar_widget->setFixedWidth(500); sidebar_widget->setFixedWidth(500);
settings_layout->addWidget(sidebar_widget); settings_layout->addWidget(sidebar_widget);
settings_layout->addWidget(panel_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::FrameRates>(QScrollerProperties::Fps30));
sp.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, QVariant::fromValue<QScrollerProperties::OvershootPolicy>(QScrollerProperties::OvershootAlwaysOff));
scroller->setScrollerProperties(sp);
scroller->grabGesture(panel_frame->viewport(), QScroller::LeftMouseButtonGesture);
setLayout(settings_layout); setLayout(settings_layout);
setStyleSheet(R"( setStyleSheet(R"(

@ -47,5 +47,4 @@ private:
QWidget *sidebar_widget; QWidget *sidebar_widget;
QButtonGroup *nav_btns; QButtonGroup *nav_btns;
QStackedWidget *panel_widget; QStackedWidget *panel_widget;
QScrollArea *panel_frame;
}; };

@ -20,7 +20,7 @@ AbstractControl::AbstractControl(const QString &title, const QString &desc, cons
hlayout = new QHBoxLayout; hlayout = new QHBoxLayout;
hlayout->setMargin(0); hlayout->setMargin(0);
hlayout->setSpacing(50); hlayout->setSpacing(20);
// left icon // left icon
if (!icon.isEmpty()) { if (!icon.isEmpty()) {
@ -33,7 +33,7 @@ AbstractControl::AbstractControl(const QString &title, const QString &desc, cons
// title // title
title_label = new QPushButton(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); hlayout->addWidget(title_label);
vlayout->addLayout(hlayout); vlayout->addLayout(hlayout);
@ -53,4 +53,5 @@ AbstractControl::AbstractControl(const QString &title, const QString &desc, cons
} }
setLayout(vlayout); setLayout(vlayout);
setStyleSheet("background-color: transparent;");
} }

Loading…
Cancel
Save