Account for dark system themes in qt_fusionPalette
On Ubuntu (Gnome), the Fusion style didn't account for when a dark theme was set in the system's settings. Neither QGtk3Theme, nor QGnomeTheme (which it derives from) provide a palette() implementation, so they'd fall back to QPlatformTheme's. This default implementation calls QPlatformThemePrivate::initializeSystemPalette(), which uses qt_fusionPalette(). This patch accounts for QPlatformTheme::appearance() in qt_fusionPalette(), adjusting the palette roles accordingly to look correct when run under a dark theme. This also fixes the same issue for the Fusion style in Qt Quick Controls. Fixes: QTBUG-90504 Task-number: QTBUG-99276 Pick-to: 6.4 Change-Id: Id096bf809ef7a63dc440b5a68283e123173e917e Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
parent
a4c0e442e5
commit
9c66af1f1d
@ -1197,47 +1197,6 @@ void QPalette::setColorGroup(ColorGroup cg, const QBrush &foreground, const QBru
|
||||
setBrush(cg, ToolTipText, toolTipText);
|
||||
}
|
||||
|
||||
Q_GUI_EXPORT QPalette qt_fusionPalette()
|
||||
{
|
||||
QColor backGround(239, 239, 239);
|
||||
QColor light = backGround.lighter(150);
|
||||
QColor mid(backGround.darker(130));
|
||||
QColor midLight = mid.lighter(110);
|
||||
QColor base = Qt::white;
|
||||
QColor disabledBase(backGround);
|
||||
QColor dark = backGround.darker(150);
|
||||
QColor darkDisabled = QColor(209, 209, 209).darker(110);
|
||||
QColor text = Qt::black;
|
||||
QColor hightlightedText = Qt::white;
|
||||
QColor disabledText = QColor(190, 190, 190);
|
||||
QColor button = backGround;
|
||||
QColor shadow = dark.darker(135);
|
||||
QColor disabledShadow = shadow.lighter(150);
|
||||
QColor placeholder = text;
|
||||
placeholder.setAlpha(128);
|
||||
|
||||
QPalette fusionPalette(Qt::black,backGround,light,dark,mid,text,base);
|
||||
fusionPalette.setBrush(QPalette::Midlight, midLight);
|
||||
fusionPalette.setBrush(QPalette::Button, button);
|
||||
fusionPalette.setBrush(QPalette::Shadow, shadow);
|
||||
fusionPalette.setBrush(QPalette::HighlightedText, hightlightedText);
|
||||
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Text, disabledText);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::WindowText, disabledText);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::ButtonText, disabledText);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Base, disabledBase);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Dark, darkDisabled);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Shadow, disabledShadow);
|
||||
|
||||
fusionPalette.setBrush(QPalette::Active, QPalette::Highlight, QColor(48, 140, 198));
|
||||
fusionPalette.setBrush(QPalette::Inactive, QPalette::Highlight, QColor(48, 140, 198));
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Highlight, QColor(145, 145, 145));
|
||||
|
||||
fusionPalette.setBrush(QPalette::PlaceholderText, placeholder);
|
||||
|
||||
return fusionPalette;
|
||||
}
|
||||
|
||||
#ifndef QT_NO_DEBUG_STREAM
|
||||
static QString groupsToString(const QPalette &p, QPalette::ColorRole cr)
|
||||
{
|
||||
|
@ -342,7 +342,49 @@ QPlatformThemePrivate::~QPlatformThemePrivate()
|
||||
delete systemPalette;
|
||||
}
|
||||
|
||||
Q_GUI_EXPORT QPalette qt_fusionPalette();
|
||||
Q_GUI_EXPORT QPalette qt_fusionPalette()
|
||||
{
|
||||
const bool darkAppearance = QGuiApplicationPrivate::platformTheme()->appearance()
|
||||
== QPlatformTheme::Appearance::Dark;
|
||||
const QColor windowText = darkAppearance ? QColor(240, 240, 240) : Qt::black;
|
||||
const QColor backGround = darkAppearance ? QColor(50, 50, 50) : QColor(239, 239, 239);
|
||||
const QColor light = backGround.lighter(150);
|
||||
const QColor mid = (backGround.darker(130));
|
||||
const QColor midLight = mid.lighter(110);
|
||||
const QColor base = darkAppearance ? backGround.darker(140) : Qt::white;
|
||||
const QColor disabledBase(backGround);
|
||||
const QColor dark = backGround.darker(150);
|
||||
const QColor darkDisabled = QColor(209, 209, 209).darker(110);
|
||||
const QColor text = darkAppearance ? windowText : Qt::black;
|
||||
const QColor hightlightedText = darkAppearance ? windowText : Qt::white;
|
||||
const QColor disabledText = darkAppearance ? QColor(130, 130, 130) : QColor(190, 190, 190);
|
||||
const QColor button = backGround;
|
||||
const QColor shadow = dark.darker(135);
|
||||
const QColor disabledShadow = shadow.lighter(150);
|
||||
QColor placeholder = text;
|
||||
placeholder.setAlpha(128);
|
||||
|
||||
QPalette fusionPalette(windowText, backGround, light, dark, mid, text, base);
|
||||
fusionPalette.setBrush(QPalette::Midlight, midLight);
|
||||
fusionPalette.setBrush(QPalette::Button, button);
|
||||
fusionPalette.setBrush(QPalette::Shadow, shadow);
|
||||
fusionPalette.setBrush(QPalette::HighlightedText, hightlightedText);
|
||||
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Text, disabledText);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::WindowText, disabledText);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::ButtonText, disabledText);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Base, disabledBase);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Dark, darkDisabled);
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Shadow, disabledShadow);
|
||||
|
||||
fusionPalette.setBrush(QPalette::Active, QPalette::Highlight, QColor(48, 140, 198));
|
||||
fusionPalette.setBrush(QPalette::Inactive, QPalette::Highlight, QColor(48, 140, 198));
|
||||
fusionPalette.setBrush(QPalette::Disabled, QPalette::Highlight, QColor(145, 145, 145));
|
||||
|
||||
fusionPalette.setBrush(QPalette::PlaceholderText, placeholder);
|
||||
|
||||
return fusionPalette;
|
||||
}
|
||||
|
||||
void QPlatformThemePrivate::initializeSystemPalette()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user