From f710fb77096bcd80808eb70badd17444c4c8e240 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Tue, 24 Mar 2026 07:33:45 -0500 Subject: [PATCH] Resize tabs when width is small --- qt/OpenRGBDialog/OpenRGBDialog.cpp | 36 +++++++++++++++ qt/OpenRGBDialog/OpenRGBDialog.h | 1 + qt/TabLabel.cpp | 33 ++++++++++++++ qt/TabLabel.h | 6 +++ qt/TabLabel.ui | 73 +++++++++++++----------------- 5 files changed, 107 insertions(+), 42 deletions(-) diff --git a/qt/OpenRGBDialog/OpenRGBDialog.cpp b/qt/OpenRGBDialog/OpenRGBDialog.cpp index 7e9907d57..01d77c65c 100644 --- a/qt/OpenRGBDialog/OpenRGBDialog.cpp +++ b/qt/OpenRGBDialog/OpenRGBDialog.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -563,6 +564,41 @@ void OpenRGBDialog::keyPressEvent(QKeyEvent *event) } } +void OpenRGBDialog::resizeEvent(QResizeEvent *event) +{ + QScreen* screen = QGuiApplication::primaryScreen(); + qreal scale = screen->devicePixelRatio(); + + bool compact_mode = (event->size().width() < (700 * scale)); + + for(int i = 0; i < ui->DevicesTabBar->count(); i++) + { + ((TabLabel *)ui->DevicesTabBar->tabBar()->tabButton(i, QTabBar::LeftSide))->blockSignals(true); + ((TabLabel *)ui->DevicesTabBar->tabBar()->tabButton(i, QTabBar::LeftSide))->SetTextHidden(compact_mode); + ((TabLabel *)ui->DevicesTabBar->tabBar()->tabButton(i, QTabBar::LeftSide))->blockSignals(false); + } + + for(int i = 0; i < ui->InformationTabBar->count(); i++) + { + ((TabLabel *)ui->InformationTabBar->tabBar()->tabButton(i, QTabBar::LeftSide))->blockSignals(true); + ((TabLabel *)ui->InformationTabBar->tabBar()->tabButton(i, QTabBar::LeftSide))->SetTextHidden(compact_mode); + ((TabLabel *)ui->InformationTabBar->tabBar()->tabButton(i, QTabBar::LeftSide))->blockSignals(false); + } + + for(int i = 0; i < ui->SettingsTabBar->count(); i++) + { + ((TabLabel *)ui->SettingsTabBar->tabBar()->tabButton(i, QTabBar::LeftSide))->blockSignals(true); + ((TabLabel *)ui->SettingsTabBar->tabBar()->tabButton(i, QTabBar::LeftSide))->SetTextHidden(compact_mode); + ((TabLabel *)ui->SettingsTabBar->tabBar()->tabButton(i, QTabBar::LeftSide))->blockSignals(false); + } + + ui->DevicesTabBar->tabBar()->setIconSize(ui->DevicesTabBar->tabBar()->iconSize()); + ui->InformationTabBar->tabBar()->setIconSize(ui->InformationTabBar->tabBar()->iconSize()); + ui->SettingsTabBar->tabBar()->setIconSize(ui->SettingsTabBar->tabBar()->iconSize()); + + QWidget::resizeEvent(event); +} + void OpenRGBDialog::AddPluginsPage() { /*-----------------------------------------------------*\ diff --git a/qt/OpenRGBDialog/OpenRGBDialog.h b/qt/OpenRGBDialog/OpenRGBDialog.h index 2e6cfe876..9c2a22fd1 100644 --- a/qt/OpenRGBDialog/OpenRGBDialog.h +++ b/qt/OpenRGBDialog/OpenRGBDialog.h @@ -67,6 +67,7 @@ signals: public slots: void changeEvent(QEvent *event) override; + void resizeEvent(QResizeEvent* event) override; void SetTrayIcon(bool tray_icon); void handleAboutToQuit(); diff --git a/qt/TabLabel.cpp b/qt/TabLabel.cpp index db3ee18b9..261fadf0e 100644 --- a/qt/TabLabel.cpp +++ b/qt/TabLabel.cpp @@ -18,14 +18,31 @@ TabLabel::TabLabel(int icon, QString name, char* original, char* context) : { ui->setupUi(this); + /*-----------------------------------------------------*\ + | Store initial widths for icon and name | + \*-----------------------------------------------------*/ + icon_initial_width = ui->icon->width(); + name_initial_width = ui->name->width(); + + /*-----------------------------------------------------*\ + | Initialize icon font | + \*-----------------------------------------------------*/ QFont font = OpenRGBFont::GetFont(); font.setPointSize(18); + /*-----------------------------------------------------*\ + | Set icon | + \*-----------------------------------------------------*/ ui->icon->setFont(font); ui->icon->setText(OpenRGBFont::icon(icon)); + /*-----------------------------------------------------*\ + | Set name | + \*-----------------------------------------------------*/ ui->name->setText(name); + SetTextHidden(false); + label = original; ctxt = context; } @@ -35,6 +52,22 @@ TabLabel::~TabLabel() delete ui; } +void TabLabel::SetTextHidden(bool hidden) +{ + if(hidden) + { + ui->name->setFixedWidth(0); + setFixedWidth(ui->icon->width()); + } + else + { + ui->name->setFixedWidth(name_initial_width); + setFixedWidth(ui->icon->width() + ui->name->width()); + } + + ui->name->setHidden(hidden); +} + void TabLabel::changeEvent(QEvent *event) { if(event->type() == QEvent::LanguageChange) diff --git a/qt/TabLabel.h b/qt/TabLabel.h index 2311d50ce..026fe7920 100644 --- a/qt/TabLabel.h +++ b/qt/TabLabel.h @@ -24,11 +24,17 @@ public: TabLabel(int icon, QString name, char* original, char* context); ~TabLabel(); + void SetTextHidden(bool hidden); + private: Ui::TabLabel *ui; char* label; char* ctxt; + int icon_initial_width; + int name_initial_width; + + private slots: void changeEvent(QEvent *event); }; diff --git a/qt/TabLabel.ui b/qt/TabLabel.ui index 2ea8647a1..32760e2b8 100644 --- a/qt/TabLabel.ui +++ b/qt/TabLabel.ui @@ -6,8 +6,8 @@ 0 0 - 222 - 16 + 0 + 24 @@ -21,7 +21,7 @@ - QLayout::SetMinAndMaxSize + QLayout::SizeConstraint::SetMinAndMaxSize 0 @@ -29,45 +29,40 @@ 0 - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 10 - 0 - - - - + + 0 + + + 0 + + + + 0 + 0 + + + + + 57 + 24 + + + + + 57 + 24 + + + + Qt::AlignCenter + - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 10 - 0 - - - - @@ -78,16 +73,10 @@ - 150 + 165 0 - - - 150 - 16777215 - - device name