aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols2
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-05-30 15:50:55 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-06-02 08:49:51 +0000
commitaa30d9026c09e826f1f965bb4b1682debfc97df9 (patch)
tree6cd030a19e66c2e606f1fd83a23c066e8ede34dd /src/quickcontrols2
parent1af7f8a597138d57e4ea932572f0dd5c0832bcf0 (diff)
Add support for configurable palettes
A style's default palette is specified in qtquickcontrols2.conf in a "Palette" group under the style's section. QSettings supports the following two alternative syntaxes: [Fusion] Palette\Window=#dedede Palette\WindowText=#212121 or [Fusion\Palette] Window=#dedede WindowText=#212121 Change-Id: I01bf44d9e332064e955e95f619de634fcb79f010 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quickcontrols2')
-rw-r--r--src/quickcontrols2/qquicktheme.cpp53
-rw-r--r--src/quickcontrols2/qquicktheme_p.h4
2 files changed, 56 insertions, 1 deletions
diff --git a/src/quickcontrols2/qquicktheme.cpp b/src/quickcontrols2/qquicktheme.cpp
index 54653e6b..06a66bfd 100644
--- a/src/quickcontrols2/qquicktheme.cpp
+++ b/src/quickcontrols2/qquicktheme.cpp
@@ -83,6 +83,41 @@ QFont *readFont(const QSharedPointer<QSettings> &settings)
settings->endGroup();
return new QFont(f);
}
+
+static void readColorGroup(const QSharedPointer<QSettings> &settings, QPalette::ColorGroup group, QPalette *palette)
+{
+ const QStringList keys = settings->childKeys();
+ if (keys.isEmpty())
+ return;
+
+ static const int index = QPalette::staticMetaObject.indexOfEnumerator("ColorRole");
+ Q_ASSERT(index != -1);
+ QMetaEnum metaEnum = QPalette::staticMetaObject.enumerator(index);
+
+ for (const QString &key : keys) {
+ bool ok = false;
+ int role = metaEnum.keyToValue(key.toUtf8(), &ok);
+ if (ok)
+ palette->setColor(group, static_cast<QPalette::ColorRole>(role), settings->value(key).value<QColor>());
+ }
+}
+
+static QPalette *readPalette(const QSharedPointer<QSettings> &settings)
+{
+ QPalette p;
+ settings->beginGroup(QStringLiteral("Palette"));
+ readColorGroup(settings, QPalette::All, &p);
+
+ settings->beginGroup(QStringLiteral("Normal"));
+ readColorGroup(settings, QPalette::Normal, &p);
+ settings->endGroup();
+
+ settings->beginGroup(QStringLiteral("Disabled"));
+ readColorGroup(settings, QPalette::Disabled, &p);
+ settings->endGroup();
+ return new QPalette(p);
+}
+
#endif // QT_CONFIG(settings)
QQuickTheme::QQuickTheme(const QString &style)
@@ -90,8 +125,10 @@ QQuickTheme::QQuickTheme(const QString &style)
{
#if QT_CONFIG(settings)
QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(style);
- if (settings)
+ if (settings) {
m_styleFont.reset(readFont(settings));
+ m_stylePalette.reset(readPalette(settings));
+ }
#endif
}
@@ -101,6 +138,12 @@ const QFont *QQuickTheme::font(Font type) const
return m_styleFont.data();
}
+const QPalette *QQuickTheme::palette(Palette type) const
+{
+ Q_UNUSED(type);
+ return m_stylePalette.data();
+}
+
QFont QQuickTheme::resolveFont(const QFont &font) const
{
if (!m_styleFont)
@@ -109,4 +152,12 @@ QFont QQuickTheme::resolveFont(const QFont &font) const
return m_styleFont->resolve(font);
}
+QPalette QQuickTheme::resolvePalette(const QPalette &palette) const
+{
+ if (!m_stylePalette)
+ return palette;
+
+ return m_stylePalette->resolve(palette);
+}
+
QT_END_NAMESPACE
diff --git a/src/quickcontrols2/qquicktheme_p.h b/src/quickcontrols2/qquicktheme_p.h
index 7ddd1d1d..098ac7f1 100644
--- a/src/quickcontrols2/qquicktheme_p.h
+++ b/src/quickcontrols2/qquicktheme_p.h
@@ -51,6 +51,7 @@
#include <QtQuickControls2/private/qquickproxytheme_p.h>
#include <QtCore/qscopedpointer.h>
#include <QtGui/qfont.h>
+#include <QtGui/qpalette.h>
QT_BEGIN_NAMESPACE
@@ -60,12 +61,15 @@ public:
QQuickTheme(const QString &name);
const QFont *font(Font type = SystemFont) const override;
+ const QPalette *palette(Palette type = SystemPalette) const override;
protected:
QFont resolveFont(const QFont &font) const;
+ QPalette resolvePalette(const QPalette &palette) const;
private:
QScopedPointer<QFont> m_styleFont;
+ QScopedPointer<QPalette> m_stylePalette;
};
QT_END_NAMESPACE