mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
desktop: automatically pick a good theme title color
The preference setting seemed far too strange to do this. And not very user friendly. So instead we figure out if this is a dark theme or not by looking at text and background colors in the palette, and make sure we get notified if that changes. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
4c6b00f812
commit
6201ac34b4
6 changed files with 33 additions and 14 deletions
|
@ -5,6 +5,7 @@ TabBase::TabBase(QWidget *parent) : QWidget(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabBase::updateUi()
|
void TabBase::updateUi(QString titleColor)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(titleColor)
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ public:
|
||||||
TabBase(QWidget *parent = 0);
|
TabBase(QWidget *parent = 0);
|
||||||
virtual void updateData() = 0;
|
virtual void updateData() = 0;
|
||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
virtual void updateUi();
|
virtual void updateUi(QString titleColor);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -243,14 +243,10 @@ void TabDiveInformation::updateData()
|
||||||
showCurrentWidget(false, 0); // Show current star widget at lefthand side
|
showCurrentWidget(false, 0); // Show current star widget at lefthand side
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabDiveInformation::updateUi()
|
void TabDiveInformation::updateUi(QString titleColor)
|
||||||
{
|
{
|
||||||
// Put together appropriate CSS stylesheets: NB: colors below in same order as the enum in prefs.h
|
|
||||||
QStringList colors = { "mediumblue", "lightblue", "black" }; // If using dark theme, set color appropriately
|
|
||||||
QString colorText = colors[prefs.headerstyle_color];
|
|
||||||
|
|
||||||
QString CSSSetSmallLabel = "QLabel:enabled { color: ";
|
QString CSSSetSmallLabel = "QLabel:enabled { color: ";
|
||||||
CSSSetSmallLabel.append(colorText + "; font-size: ");
|
CSSSetSmallLabel.append(titleColor + "; font-size: ");
|
||||||
CSSSetSmallLabel.append(QString::number((int)(0.5 + ui->diveHeadingLabel->geometry().height() * 0.66)) + "px;}");
|
CSSSetSmallLabel.append(QString::number((int)(0.5 + ui->diveHeadingLabel->geometry().height() * 0.66)) + "px;}");
|
||||||
ui->groupBox_visibility->setStyleSheet(ui->groupBox_visibility->styleSheet() + CSSSetSmallLabel);
|
ui->groupBox_visibility->setStyleSheet(ui->groupBox_visibility->styleSheet() + CSSSetSmallLabel);
|
||||||
ui->groupBox_current->setStyleSheet(ui->groupBox_current->styleSheet() + CSSSetSmallLabel);
|
ui->groupBox_current->setStyleSheet(ui->groupBox_current->styleSheet() + CSSSetSmallLabel);
|
||||||
|
|
|
@ -16,7 +16,7 @@ public:
|
||||||
~TabDiveInformation();
|
~TabDiveInformation();
|
||||||
void updateData() override;
|
void updateData() override;
|
||||||
void clear() override;
|
void clear() override;
|
||||||
void updateUi() override;
|
void updateUi(QString titleColor) override;
|
||||||
private slots:
|
private slots:
|
||||||
void divesChanged(const QVector<dive *> &dives, DiveField field);
|
void divesChanged(const QVector<dive *> &dives, DiveField field);
|
||||||
void cylinderChanged(dive *d);
|
void cylinderChanged(dive *d);
|
||||||
|
|
|
@ -47,6 +47,12 @@ struct Completers {
|
||||||
QCompleter *tags;
|
QCompleter *tags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool paletteIsDark(const QPalette &p)
|
||||||
|
{
|
||||||
|
// we consider a palette dark if the text color is lighter than the windows background
|
||||||
|
return p.window().color().valueF() < p.windowText().color().valueF();
|
||||||
|
}
|
||||||
|
|
||||||
MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
|
MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
|
||||||
editMode(false),
|
editMode(false),
|
||||||
ignoreInput(false),
|
ignoreInput(false),
|
||||||
|
@ -72,6 +78,9 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
|
||||||
extraWidgets << new TabDiveComputer(this);
|
extraWidgets << new TabDiveComputer(this);
|
||||||
ui.tabWidget->addTab(extraWidgets.last(), tr("Device names"));
|
ui.tabWidget->addTab(extraWidgets.last(), tr("Device names"));
|
||||||
|
|
||||||
|
// make sure we know if this is a light or dark mode
|
||||||
|
isDark = paletteIsDark(palette());
|
||||||
|
|
||||||
// call colorsChanged() for the initial setup now that the extraWidgets are loaded
|
// call colorsChanged() for the initial setup now that the extraWidgets are loaded
|
||||||
colorsChanged();
|
colorsChanged();
|
||||||
|
|
||||||
|
@ -704,13 +713,24 @@ void MainTab::clearTabs()
|
||||||
widget->clear();
|
widget->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainTab::changeEvent(QEvent *ev)
|
||||||
|
{
|
||||||
|
if (ev->type() == QEvent::PaletteChange) {
|
||||||
|
// check if this is a light or dark mode
|
||||||
|
bool dark = paletteIsDark(palette());
|
||||||
|
if (dark != isDark) {
|
||||||
|
// things have changed, so setup the colors correctly
|
||||||
|
isDark = dark;
|
||||||
|
colorsChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QTabWidget::changeEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
// setup the colors of 'header' elements in the tab widget
|
// setup the colors of 'header' elements in the tab widget
|
||||||
void MainTab::colorsChanged()
|
void MainTab::colorsChanged()
|
||||||
{
|
{
|
||||||
// Put together appropriate CSS stylesheets: NB: colors below in same order as the enum in prefs.h
|
QString colorText = isDark ? QStringLiteral("lightblue") : QStringLiteral("mediumblue");
|
||||||
QStringList colors = { "mediumblue", "lightblue", "black" }; // If using dark theme, set color appropriately
|
|
||||||
QString colorText = colors[prefs.headerstyle_color];
|
|
||||||
|
|
||||||
QString lastpart = colorText + " ;}";
|
QString lastpart = colorText + " ;}";
|
||||||
|
|
||||||
// only set the color if the widget is enabled
|
// only set the color if the widget is enabled
|
||||||
|
@ -731,5 +751,5 @@ void MainTab::colorsChanged()
|
||||||
|
|
||||||
// finally call the individual updateUi() functions so they can overwrite these style sheets
|
// finally call the individual updateUi() functions so they can overwrite these style sheets
|
||||||
for (TabBase *widget: extraWidgets)
|
for (TabBase *widget: extraWidgets)
|
||||||
widget->updateUi();
|
widget->updateUi(colorText);
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,8 @@ private:
|
||||||
dive_trip *currentTrip;
|
dive_trip *currentTrip;
|
||||||
QList<TabBase*> extraWidgets;
|
QList<TabBase*> extraWidgets;
|
||||||
void divesEdited(int num); // Opens a warning window if more than one dive was edited
|
void divesEdited(int num); // Opens a warning window if more than one dive was edited
|
||||||
|
void changeEvent(QEvent *ev) override;
|
||||||
|
bool isDark;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINTAB_H
|
#endif // MAINTAB_H
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue