aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-02-13 22:03:31 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2018-02-15 08:48:44 +0000
commit544456ea001c1a2ea7917cc4923222c8dc72f41f (patch)
treee40389e506776337e9f1ecb79cadce61a9d16e1b
parent71d5afa10c297db4aabd032f992fb93fbaaf5470 (diff)
Read :/qtquickcontrols2.conf in QQuickStylePlugin
QQuickTheme is going to be promoted from libQQC2 to libQQT2 so that it can provide dark and light palettes (and later, icons). The first step is to refactor out the :/qtquickcontrols2.conf reading code, which cannot be in style-agnostic libQQT2. Read the conf file in QQuickStyle Plugin instead. The additional benefit is that we don't need duplicate name() methods for styles and their themes. Even though QQuickStyle Plugin's name handling is case-insensitive, QSetting is case-sensitive. Therefore all QQuickStylePlugin::name() overrides have been updated to use capital first letter. This name is used to lookup the correct section in :/qtquickcontrols2.conf. Task-number: QTBUG-63331 Change-Id: I07b1269d9dbc2c9568e6f22f2da75951fde7b669 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r--src/imports/controls/fusion/qquickfusiontheme.cpp1
-rw-r--r--src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp6
-rw-r--r--src/imports/controls/imagine/qquickimaginetheme.cpp12
-rw-r--r--src/imports/controls/imagine/qquickimaginetheme_p.h4
-rw-r--r--src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp6
-rw-r--r--src/imports/controls/material/qquickmaterialtheme.cpp19
-rw-r--r--src/imports/controls/material/qquickmaterialtheme_p.h3
-rw-r--r--src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp6
-rw-r--r--src/imports/controls/qquickdefaulttheme.cpp7
-rw-r--r--src/imports/controls/qquickdefaulttheme_p.h3
-rw-r--r--src/imports/controls/qtquickcontrols2plugin.cpp6
-rw-r--r--src/imports/controls/universal/qquickuniversaltheme.cpp11
-rw-r--r--src/imports/controls/universal/qquickuniversaltheme_p.h3
-rw-r--r--src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp6
-rw-r--r--src/quickcontrols2/qquickstyleplugin.cpp95
-rw-r--r--src/quickcontrols2/qquickstyleplugin_p.h6
-rw-r--r--src/quickcontrols2/qquicktheme.cpp120
-rw-r--r--src/quickcontrols2/qquicktheme_p.h13
18 files changed, 182 insertions, 145 deletions
diff --git a/src/imports/controls/fusion/qquickfusiontheme.cpp b/src/imports/controls/fusion/qquickfusiontheme.cpp
index 31494efb..78465b6b 100644
--- a/src/imports/controls/fusion/qquickfusiontheme.cpp
+++ b/src/imports/controls/fusion/qquickfusiontheme.cpp
@@ -39,7 +39,6 @@
QT_BEGIN_NAMESPACE
QQuickFusionTheme::QQuickFusionTheme()
- : QQuickTheme(QStringLiteral("Fusion"))
{
}
diff --git a/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp b/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp
index 9a329d03..2d1a6e28 100644
--- a/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp
+++ b/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp
@@ -72,7 +72,7 @@ public:
void initializeEngine(QQmlEngine *engine, const char *uri) override;
QString name() const override;
- QQuickProxyTheme *createTheme() const override;
+ QQuickTheme *createTheme() const override;
};
QtQuickControls2FusionStylePlugin::QtQuickControls2FusionStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -109,10 +109,10 @@ void QtQuickControls2FusionStylePlugin::initializeEngine(QQmlEngine *engine, con
QString QtQuickControls2FusionStylePlugin::name() const
{
- return QStringLiteral("fusion");
+ return QStringLiteral("Fusion");
}
-QQuickProxyTheme *QtQuickControls2FusionStylePlugin::createTheme() const
+QQuickTheme *QtQuickControls2FusionStylePlugin::createTheme() const
{
return new QQuickFusionTheme;
}
diff --git a/src/imports/controls/imagine/qquickimaginetheme.cpp b/src/imports/controls/imagine/qquickimaginetheme.cpp
index 5505e7ce..f6d78cbc 100644
--- a/src/imports/controls/imagine/qquickimaginetheme.cpp
+++ b/src/imports/controls/imagine/qquickimaginetheme.cpp
@@ -41,11 +41,17 @@
QT_BEGIN_NAMESPACE
QQuickImagineTheme::QQuickImagineTheme()
- : QQuickTheme(QStringLiteral("Imagine"))
+{
+}
+
+void QQuickImagineTheme::resolveFonts(const QFont &defaultFont)
{
systemFont.setFamily(QLatin1String("Open Sans"));
- systemFont = resolveFont(systemFont);
+ systemFont = defaultFont.resolve(systemFont);
+}
+void QQuickImagineTheme::resolvePalettes(const QPalette &defaultPalette)
+{
const QColor accentColor = QColor::fromRgb(0x4fc1e9);
const QColor windowTextColor = QColor::fromRgb(0x434a54);
const QColor disabledWindowTextColor = QColor::fromRgb(0xccd1d9);
@@ -59,7 +65,7 @@ QQuickImagineTheme::QQuickImagineTheme()
systemPalette.setColor(QPalette::WindowText, windowTextColor);
systemPalette.setColor(QPalette::Disabled, QPalette::Text, disabledWindowTextColor);
systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, disabledWindowTextColor);
- systemPalette = resolvePalette(systemPalette);
+ systemPalette = defaultPalette.resolve(systemPalette);
}
const QFont *QQuickImagineTheme::font(QPlatformTheme::Font type) const
diff --git a/src/imports/controls/imagine/qquickimaginetheme_p.h b/src/imports/controls/imagine/qquickimaginetheme_p.h
index ea3a1cbd..4ec9dfd7 100644
--- a/src/imports/controls/imagine/qquickimaginetheme_p.h
+++ b/src/imports/controls/imagine/qquickimaginetheme_p.h
@@ -60,6 +60,10 @@ public:
const QFont *font(Font type = SystemFont) const override;
const QPalette *palette(Palette type = SystemPalette) const override;
+protected:
+ void resolveFonts(const QFont &defaultFont) override;
+ void resolvePalettes(const QPalette &defaultPalette) override;
+
private:
QFont systemFont;
QPalette systemPalette;
diff --git a/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp b/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp
index 7aa78075..3ab8a472 100644
--- a/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp
+++ b/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp
@@ -67,7 +67,7 @@ public:
void initializeEngine(QQmlEngine *engine, const char *uri) override;
QString name() const override;
- QQuickProxyTheme *createTheme() const override;
+ QQuickTheme *createTheme() const override;
};
QtQuickControls2ImagineStylePlugin::QtQuickControls2ImagineStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -96,10 +96,10 @@ void QtQuickControls2ImagineStylePlugin::initializeEngine(QQmlEngine *engine, co
QString QtQuickControls2ImagineStylePlugin::name() const
{
- return QStringLiteral("imagine");
+ return QStringLiteral("Imagine");
}
-QQuickProxyTheme *QtQuickControls2ImagineStylePlugin::createTheme() const
+QQuickTheme *QtQuickControls2ImagineStylePlugin::createTheme() const
{
return new QQuickImagineTheme;
}
diff --git a/src/imports/controls/material/qquickmaterialtheme.cpp b/src/imports/controls/material/qquickmaterialtheme.cpp
index c697b2a5..7b21a886 100644
--- a/src/imports/controls/material/qquickmaterialtheme.cpp
+++ b/src/imports/controls/material/qquickmaterialtheme.cpp
@@ -43,7 +43,10 @@
QT_BEGIN_NAMESPACE
QQuickMaterialTheme::QQuickMaterialTheme()
- : QQuickTheme(QStringLiteral("Material"))
+{
+}
+
+void QQuickMaterialTheme::resolveFonts(const QFont &defaultFont)
{
QFont font;
font.setFamily(QLatin1String("Roboto"));
@@ -65,29 +68,29 @@ QQuickMaterialTheme::QQuickMaterialTheme()
}
systemFont.setPixelSize(14);
- systemFont = resolveFont(systemFont);
+ systemFont = defaultFont.resolve(systemFont);
buttonFont.setPixelSize(14);
buttonFont.setCapitalization(QFont::AllUppercase);
buttonFont.setWeight(QFont::Medium);
- buttonFont = resolveFont(buttonFont);
+ buttonFont = defaultFont.resolve(buttonFont);
toolTipFont.setPixelSize(14);
toolTipFont.setWeight(QFont::Medium);
- toolTipFont = resolveFont(toolTipFont);
+ toolTipFont = defaultFont.resolve(toolTipFont);
itemViewFont.setPixelSize(14);
itemViewFont.setWeight(QFont::Medium);
- itemViewFont = resolveFont(itemViewFont);
+ itemViewFont = defaultFont.resolve(itemViewFont);
listViewFont.setPixelSize(16);
- listViewFont = resolveFont(listViewFont);
+ listViewFont = defaultFont.resolve(listViewFont);
menuItemFont.setPixelSize(16);
- menuItemFont = resolveFont(menuItemFont);
+ menuItemFont = defaultFont.resolve(menuItemFont);
editorFont.setPixelSize(16);
- editorFont = resolveFont(editorFont);
+ editorFont = defaultFont.resolve(editorFont);
}
const QFont *QQuickMaterialTheme::font(QPlatformTheme::Font type) const
diff --git a/src/imports/controls/material/qquickmaterialtheme_p.h b/src/imports/controls/material/qquickmaterialtheme_p.h
index 0e791386..1c7b1413 100644
--- a/src/imports/controls/material/qquickmaterialtheme_p.h
+++ b/src/imports/controls/material/qquickmaterialtheme_p.h
@@ -63,6 +63,9 @@ public:
QVariant themeHint(ThemeHint hint) const override;
+protected:
+ void resolveFonts(const QFont &defaultFont) override;
+
private:
QFont systemFont;
QFont buttonFont;
diff --git a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp b/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp
index 7eae0826..4ea1f426 100644
--- a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp
+++ b/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp
@@ -67,7 +67,7 @@ public:
void initializeEngine(QQmlEngine *engine, const char *uri) override;
QString name() const override;
- QQuickProxyTheme *createTheme() const override;
+ QQuickTheme *createTheme() const override;
};
QtQuickControls2MaterialStylePlugin::QtQuickControls2MaterialStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -103,10 +103,10 @@ void QtQuickControls2MaterialStylePlugin::initializeEngine(QQmlEngine *engine, c
QString QtQuickControls2MaterialStylePlugin::name() const
{
- return QStringLiteral("material");
+ return QStringLiteral("Material");
}
-QQuickProxyTheme *QtQuickControls2MaterialStylePlugin::createTheme() const
+QQuickTheme *QtQuickControls2MaterialStylePlugin::createTheme() const
{
return new QQuickMaterialTheme;
}
diff --git a/src/imports/controls/qquickdefaulttheme.cpp b/src/imports/controls/qquickdefaulttheme.cpp
index f4b6f5d7..e2936def 100644
--- a/src/imports/controls/qquickdefaulttheme.cpp
+++ b/src/imports/controls/qquickdefaulttheme.cpp
@@ -39,7 +39,10 @@
QT_BEGIN_NAMESPACE
QQuickDefaultTheme::QQuickDefaultTheme()
- : QQuickTheme(QStringLiteral("Default"))
+{
+}
+
+void QQuickDefaultTheme::resolvePalettes(const QPalette &defaultPalette)
{
systemPalette.setColor(QPalette::Base, QColor::fromRgba(0xFFFFFFFF));
systemPalette.setColor(QPalette::Disabled, QPalette::Base, QColor::fromRgba(0xFFD6D6D6));
@@ -80,7 +83,7 @@ QQuickDefaultTheme::QQuickDefaultTheme()
systemPalette.setColor(QPalette::WindowText, QColor::fromRgba(0xFF26282A));
systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor::fromRgba(0xFFBDBEBF));
- systemPalette = resolvePalette(systemPalette);
+ systemPalette = defaultPalette.resolve(systemPalette);
}
const QPalette *QQuickDefaultTheme::palette(QPlatformTheme::Palette type) const
diff --git a/src/imports/controls/qquickdefaulttheme_p.h b/src/imports/controls/qquickdefaulttheme_p.h
index 16e4d061..6b043e14 100644
--- a/src/imports/controls/qquickdefaulttheme_p.h
+++ b/src/imports/controls/qquickdefaulttheme_p.h
@@ -59,6 +59,9 @@ public:
const QPalette *palette(Palette type) const override;
+protected:
+ void resolvePalettes(const QPalette &defaultPalette) override;
+
private:
QPalette systemPalette;
};
diff --git a/src/imports/controls/qtquickcontrols2plugin.cpp b/src/imports/controls/qtquickcontrols2plugin.cpp
index 464bbbdf..dba18fc8 100644
--- a/src/imports/controls/qtquickcontrols2plugin.cpp
+++ b/src/imports/controls/qtquickcontrols2plugin.cpp
@@ -81,7 +81,7 @@ public:
void initializeEngine(QQmlEngine *engine, const char *uri) override;
QString name() const override;
- QQuickProxyTheme *createTheme() const override;
+ QQuickTheme *createTheme() const override;
};
QtQuickControls2Plugin::QtQuickControls2Plugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -217,10 +217,10 @@ void QtQuickControls2Plugin::initializeEngine(QQmlEngine *engine, const char *ur
QString QtQuickControls2Plugin::name() const
{
- return QStringLiteral("default");
+ return QStringLiteral("Default");
}
-QQuickProxyTheme *QtQuickControls2Plugin::createTheme() const
+QQuickTheme *QtQuickControls2Plugin::createTheme() const
{
return new QQuickDefaultTheme;
}
diff --git a/src/imports/controls/universal/qquickuniversaltheme.cpp b/src/imports/controls/universal/qquickuniversaltheme.cpp
index 549840b6..f457b614 100644
--- a/src/imports/controls/universal/qquickuniversaltheme.cpp
+++ b/src/imports/controls/universal/qquickuniversaltheme.cpp
@@ -42,7 +42,10 @@
QT_BEGIN_NAMESPACE
QQuickUniversalTheme::QQuickUniversalTheme()
- : QQuickTheme(QStringLiteral("Universal"))
+{
+}
+
+void QQuickUniversalTheme::resolveFonts(const QFont &defaultFont)
{
const QFont font(QLatin1String("Segoe UI"));
if (QFontInfo(font).family() == QLatin1String("Segoe UI")) {
@@ -53,15 +56,15 @@ QQuickUniversalTheme::QQuickUniversalTheme()
}
systemFont.setPixelSize(15);
- systemFont = resolveFont(systemFont);
+ systemFont = defaultFont.resolve(systemFont);
groupBoxTitleFont.setPixelSize(15);
groupBoxTitleFont.setWeight(QFont::DemiBold);
- groupBoxTitleFont = resolveFont(groupBoxTitleFont);
+ groupBoxTitleFont = defaultFont.resolve(groupBoxTitleFont);
tabButtonFont.setPixelSize(24);
tabButtonFont.setWeight(QFont::Light);
- tabButtonFont = resolveFont(tabButtonFont);
+ tabButtonFont = defaultFont.resolve(tabButtonFont);
}
const QFont *QQuickUniversalTheme::font(QPlatformTheme::Font type) const
diff --git a/src/imports/controls/universal/qquickuniversaltheme_p.h b/src/imports/controls/universal/qquickuniversaltheme_p.h
index f15dee3e..5da74470 100644
--- a/src/imports/controls/universal/qquickuniversaltheme_p.h
+++ b/src/imports/controls/universal/qquickuniversaltheme_p.h
@@ -60,6 +60,9 @@ public:
const QFont *font(Font type = SystemFont) const override;
+protected:
+ void resolveFonts(const QFont &defaultFont) override;
+
private:
QFont systemFont;
QFont groupBoxTitleFont;
diff --git a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp
index 55255181..b9934c73 100644
--- a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp
+++ b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp
@@ -64,7 +64,7 @@ public:
void initializeEngine(QQmlEngine *engine, const char *uri) override;
QString name() const override;
- QQuickProxyTheme *createTheme() const override;
+ QQuickTheme *createTheme() const override;
};
QtQuickControls2UniversalStylePlugin::QtQuickControls2UniversalStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -96,10 +96,10 @@ void QtQuickControls2UniversalStylePlugin::initializeEngine(QQmlEngine *engine,
QString QtQuickControls2UniversalStylePlugin::name() const
{
- return QStringLiteral("universal");
+ return QStringLiteral("Universal");
}
-QQuickProxyTheme *QtQuickControls2UniversalStylePlugin::createTheme() const
+QQuickTheme *QtQuickControls2UniversalStylePlugin::createTheme() const
{
return new QQuickUniversalTheme;
}
diff --git a/src/quickcontrols2/qquickstyleplugin.cpp b/src/quickcontrols2/qquickstyleplugin.cpp
index fa8e9785..6f9a6d13 100644
--- a/src/quickcontrols2/qquickstyleplugin.cpp
+++ b/src/quickcontrols2/qquickstyleplugin.cpp
@@ -35,13 +35,94 @@
****************************************************************************/
#include "qquickstyleplugin_p.h"
-#include "qquickproxytheme_p.h"
+#include "qquicktheme_p.h"
#include "qquickstyle.h"
+#include "qquickstyle_p.h"
+#include <QtCore/qmetaobject.h>
+#include <QtCore/qsettings.h>
#include <QtGui/private/qguiapplication_p.h>
+#include <functional>
+
QT_BEGIN_NAMESPACE
+#if QT_CONFIG(settings)
+static void readValue(const QSharedPointer<QSettings> &settings, const QString &name, std::function<void(const QVariant &)> setValue)
+{
+ const QVariant var = settings->value(name);
+ if (var.isValid())
+ setValue(var);
+}
+
+template <typename Enum>
+static Enum toEnumValue(const QVariant &var)
+{
+ // ### TODO: expose QFont enums to the meta object system using Q_ENUM
+ //QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
+ //bool ok = false;
+ //int value = enumeration.keyToValue(var.toByteArray(), &ok);
+ //if (!ok)
+ // value = var.toInt();
+ //return static_cast<Enum>(value);
+
+ return static_cast<Enum>(var.toInt());
+}
+
+static const QFont *readFont(const QSharedPointer<QSettings> &settings)
+{
+ const QVariant var = settings->value(QStringLiteral("Font"));
+ if (var.isValid())
+ return new QFont(var.value<QFont>());
+
+ QFont f;
+ settings->beginGroup(QStringLiteral("Font"));
+ readValue(settings, QStringLiteral("Family"), [&f](const QVariant &var) { f.setFamily(var.toString()); });
+ readValue(settings, QStringLiteral("PointSize"), [&f](const QVariant &var) { f.setPointSizeF(var.toReal()); });
+ readValue(settings, QStringLiteral("PixelSize"), [&f](const QVariant &var) { f.setPixelSize(var.toInt()); });
+ readValue(settings, QStringLiteral("StyleHint"), [&f](const QVariant &var) { f.setStyleHint(toEnumValue<QFont::StyleHint>(var.toInt())); });
+ readValue(settings, QStringLiteral("Weight"), [&f](const QVariant &var) { f.setWeight(toEnumValue<QFont::Weight>(var)); });
+ readValue(settings, QStringLiteral("Style"), [&f](const QVariant &var) { f.setStyle(toEnumValue<QFont::Style>(var.toInt())); });
+ 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 const 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)
+
QQuickStylePlugin::QQuickStylePlugin(QObject *parent) : QQmlExtensionPlugin(parent)
{
}
@@ -67,8 +148,16 @@ void QQuickStylePlugin::initializeEngine(QQmlEngine *engine, const char *uri)
if (isCurrent()) {
m_theme.reset(createTheme());
- if (m_theme)
+ if (m_theme) {
+#if QT_CONFIG(settings)
+ QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(name());
+ if (settings) {
+ m_theme->setDefaultFont(readFont(settings));
+ m_theme->setDefaultPalette(readPalette(settings));
+ }
+#endif
QGuiApplicationPrivate::platform_theme = m_theme.data();
+ }
}
}
@@ -87,7 +176,7 @@ QString QQuickStylePlugin::name() const
return QString();
}
-QQuickProxyTheme *QQuickStylePlugin::createTheme() const
+QQuickTheme *QQuickStylePlugin::createTheme() const
{
return nullptr;
}
diff --git a/src/quickcontrols2/qquickstyleplugin_p.h b/src/quickcontrols2/qquickstyleplugin_p.h
index 9457b472..24f8e564 100644
--- a/src/quickcontrols2/qquickstyleplugin_p.h
+++ b/src/quickcontrols2/qquickstyleplugin_p.h
@@ -54,7 +54,7 @@
QT_BEGIN_NAMESPACE
-class QQuickProxyTheme;
+class QQuickTheme;
class Q_QUICKCONTROLS2_PRIVATE_EXPORT QQuickStylePlugin : public QQmlExtensionPlugin
{
@@ -69,12 +69,12 @@ public:
bool isCurrent() const;
virtual QString name() const;
- virtual QQuickProxyTheme *createTheme() const;
+ virtual QQuickTheme *createTheme() const;
QUrl typeUrl(const QString &name = QString()) const;
private:
- QScopedPointer<QQuickProxyTheme> m_theme;
+ QScopedPointer<QQuickTheme> m_theme;
};
QT_END_NAMESPACE
diff --git a/src/quickcontrols2/qquicktheme.cpp b/src/quickcontrols2/qquicktheme.cpp
index 06a66bfd..73957207 100644
--- a/src/quickcontrols2/qquicktheme.cpp
+++ b/src/quickcontrols2/qquicktheme.cpp
@@ -35,129 +35,47 @@
****************************************************************************/
#include "qquicktheme_p.h"
-#include "qquickstyle_p.h"
-
-#include <QtCore/qmetaobject.h>
-#include <QtCore/qsettings.h>
-
-#include <functional>
QT_BEGIN_NAMESPACE
-#if QT_CONFIG(settings)
-static void readValue(const QSharedPointer<QSettings> &settings, const QString &name, std::function<void(const QVariant &)> setValue)
-{
- const QVariant var = settings->value(name);
- if (var.isValid())
- setValue(var);
-}
-
-template <typename Enum>
-static Enum toEnumValue(const QVariant &var)
-{
- // ### TODO: expose QFont enums to the meta object system using Q_ENUM
- //QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
- //bool ok = false;
- //int value = enumeration.keyToValue(var.toByteArray(), &ok);
- //if (!ok)
- // value = var.toInt();
- //return static_cast<Enum>(value);
-
- return static_cast<Enum>(var.toInt());
-}
-
-QFont *readFont(const QSharedPointer<QSettings> &settings)
-{
- const QVariant var = settings->value(QStringLiteral("Font"));
- if (var.isValid())
- return new QFont(var.value<QFont>());
-
- QFont f;
- settings->beginGroup(QStringLiteral("Font"));
- readValue(settings, QStringLiteral("Family"), [&f](const QVariant &var) { f.setFamily(var.toString()); });
- readValue(settings, QStringLiteral("PointSize"), [&f](const QVariant &var) { f.setPointSizeF(var.toReal()); });
- readValue(settings, QStringLiteral("PixelSize"), [&f](const QVariant &var) { f.setPixelSize(var.toInt()); });
- readValue(settings, QStringLiteral("StyleHint"), [&f](const QVariant &var) { f.setStyleHint(toEnumValue<QFont::StyleHint>(var.toInt())); });
- readValue(settings, QStringLiteral("Weight"), [&f](const QVariant &var) { f.setWeight(toEnumValue<QFont::Weight>(var)); });
- readValue(settings, QStringLiteral("Style"), [&f](const QVariant &var) { f.setStyle(toEnumValue<QFont::Style>(var.toInt())); });
- 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)
- : QQuickProxyTheme()
+QQuickTheme::QQuickTheme()
{
-#if QT_CONFIG(settings)
- QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(style);
- if (settings) {
- m_styleFont.reset(readFont(settings));
- m_stylePalette.reset(readPalette(settings));
- }
-#endif
}
const QFont *QQuickTheme::font(Font type) const
{
Q_UNUSED(type);
- return m_styleFont.data();
+ return m_defaultFont.data();
}
const QPalette *QQuickTheme::palette(Palette type) const
{
Q_UNUSED(type);
- return m_stylePalette.data();
+ return m_defaultPalette.data();
}
-QFont QQuickTheme::resolveFont(const QFont &font) const
+void QQuickTheme::setDefaultFont(const QFont *defaultFont)
{
- if (!m_styleFont)
- return font;
+ m_defaultFont.reset(defaultFont);
+ if (defaultFont)
+ resolveFonts(*defaultFont);
+}
- return m_styleFont->resolve(font);
+void QQuickTheme::setDefaultPalette(const QPalette *defaultPalette)
+{
+ m_defaultPalette.reset(defaultPalette);
+ if (defaultPalette)
+ resolvePalettes(*defaultPalette);
}
-QPalette QQuickTheme::resolvePalette(const QPalette &palette) const
+void QQuickTheme::resolveFonts(const QFont &defaultFont)
{
- if (!m_stylePalette)
- return palette;
+ Q_UNUSED(defaultFont)
+}
- return m_stylePalette->resolve(palette);
+void QQuickTheme::resolvePalettes(const QPalette &defaultPalette)
+{
+ Q_UNUSED(defaultPalette)
}
QT_END_NAMESPACE
diff --git a/src/quickcontrols2/qquicktheme_p.h b/src/quickcontrols2/qquicktheme_p.h
index 098ac7f1..78ff17c1 100644
--- a/src/quickcontrols2/qquicktheme_p.h
+++ b/src/quickcontrols2/qquicktheme_p.h
@@ -58,18 +58,21 @@ QT_BEGIN_NAMESPACE
class Q_QUICKCONTROLS2_PRIVATE_EXPORT QQuickTheme : public QQuickProxyTheme
{
public:
- QQuickTheme(const QString &name);
+ QQuickTheme();
const QFont *font(Font type = SystemFont) const override;
const QPalette *palette(Palette type = SystemPalette) const override;
+ void setDefaultFont(const QFont *defaultFont);
+ void setDefaultPalette(const QPalette *defaultPalette);
+
protected:
- QFont resolveFont(const QFont &font) const;
- QPalette resolvePalette(const QPalette &palette) const;
+ virtual void resolveFonts(const QFont &defaultFont);
+ virtual void resolvePalettes(const QPalette &defaultPalette);
private:
- QScopedPointer<QFont> m_styleFont;
- QScopedPointer<QPalette> m_stylePalette;
+ QScopedPointer<const QFont> m_defaultFont;
+ QScopedPointer<const QPalette> m_defaultPalette;
};
QT_END_NAMESPACE