qt: Make PlatformStyle aware of runtime palette change

This change is a prerequisite to support changeable appearance on macOS.
This commit is contained in:
Hennadii Stepanov
2021-04-07 09:29:57 +03:00
parent d22e7ee933
commit ce17861dc4
2 changed files with 17 additions and 17 deletions

View File

@@ -71,25 +71,28 @@ PlatformStyle::PlatformStyle(const QString &_name, bool _imagesOnButtons, bool _
name(_name), name(_name),
imagesOnButtons(_imagesOnButtons), imagesOnButtons(_imagesOnButtons),
colorizeIcons(_colorizeIcons), colorizeIcons(_colorizeIcons),
useExtraSpacing(_useExtraSpacing), useExtraSpacing(_useExtraSpacing)
singleColor(0,0,0), {
textColor(0,0,0) }
QColor PlatformStyle::TextColor() const
{
return QApplication::palette().color(QPalette::WindowText);
}
QColor PlatformStyle::SingleColor() const
{ {
// Determine icon highlighting color
if (colorizeIcons) { if (colorizeIcons) {
const QColor colorHighlightBg(QApplication::palette().color(QPalette::Highlight)); const QColor colorHighlightBg(QApplication::palette().color(QPalette::Highlight));
const QColor colorHighlightFg(QApplication::palette().color(QPalette::HighlightedText)); const QColor colorHighlightFg(QApplication::palette().color(QPalette::HighlightedText));
const QColor colorText(QApplication::palette().color(QPalette::WindowText)); const QColor colorText(QApplication::palette().color(QPalette::WindowText));
const int colorTextLightness = colorText.lightness(); const int colorTextLightness = colorText.lightness();
QColor colorbase; if (abs(colorHighlightBg.lightness() - colorTextLightness) < abs(colorHighlightFg.lightness() - colorTextLightness)) {
if (abs(colorHighlightBg.lightness() - colorTextLightness) < abs(colorHighlightFg.lightness() - colorTextLightness)) return colorHighlightBg;
colorbase = colorHighlightBg;
else
colorbase = colorHighlightFg;
singleColor = colorbase;
} }
// Determine text color return colorHighlightFg;
textColor = QColor(QApplication::palette().color(QPalette::WindowText)); }
return {0, 0, 0};
} }
QImage PlatformStyle::SingleColorImage(const QString& filename) const QImage PlatformStyle::SingleColorImage(const QString& filename) const

View File

@@ -21,8 +21,8 @@ public:
bool getImagesOnButtons() const { return imagesOnButtons; } bool getImagesOnButtons() const { return imagesOnButtons; }
bool getUseExtraSpacing() const { return useExtraSpacing; } bool getUseExtraSpacing() const { return useExtraSpacing; }
QColor TextColor() const { return textColor; } QColor TextColor() const;
QColor SingleColor() const { return singleColor; } QColor SingleColor() const;
/** Colorize an image (given filename) with the icon color */ /** Colorize an image (given filename) with the icon color */
QImage SingleColorImage(const QString& filename) const; QImage SingleColorImage(const QString& filename) const;
@@ -43,9 +43,6 @@ private:
bool imagesOnButtons; bool imagesOnButtons;
bool colorizeIcons; bool colorizeIcons;
bool useExtraSpacing; bool useExtraSpacing;
QColor singleColor;
QColor textColor;
/* ... more to come later */
}; };
#endif // BITCOIN_QT_PLATFORMSTYLE_H #endif // BITCOIN_QT_PLATFORMSTYLE_H