diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-05-15 23:17:49 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-05-16 08:09:55 +0000 |
commit | 7d1145e91eb575122579b6fbed48aebe87207e11 (patch) | |
tree | 2ab17a36553bf4da6e9b6cf228cd05764ae775ec /src/quickcontrols2 | |
parent | 9e1a353a864cf777034b969a59fb1d616b7bfc73 (diff) |
Move font/palette reading to QQuickStylePrivate
Instead of moving the code back and forth between different plugins,
promote it to QQuickStylePrivate so it can be used from any plugin.
Change-Id: Ifb80923750ff531676dc3347dacf0aff8c026fdb
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quickcontrols2')
-rw-r--r-- | src/quickcontrols2/qquickstyle.cpp | 79 | ||||
-rw-r--r-- | src/quickcontrols2/qquickstyle_p.h | 2 | ||||
-rw-r--r-- | src/quickcontrols2/qquickstyleplugin.cpp | 85 |
3 files changed, 83 insertions, 83 deletions
diff --git a/src/quickcontrols2/qquickstyle.cpp b/src/quickcontrols2/qquickstyle.cpp index 4b5198ca..a7349915 100644 --- a/src/quickcontrols2/qquickstyle.cpp +++ b/src/quickcontrols2/qquickstyle.cpp @@ -43,7 +43,9 @@ #include <QtCore/qsettings.h> #include <QtCore/qfileselector.h> #include <QtCore/qlibraryinfo.h> +#include <QtCore/qmetaobject.h> #include <QtGui/qcolor.h> +#include <QtGui/qfont.h> #include <QtGui/qpalette.h> #include <QtGui/private/qguiapplication_p.h> #include <QtGui/qpa/qplatformtheme.h> @@ -51,6 +53,8 @@ #include <QtQml/qqmlengine.h> #include <QtQml/qqmlfile.h> +#include <functional> + QT_BEGIN_NAMESPACE /*! @@ -349,6 +353,81 @@ QSharedPointer<QSettings> QQuickStylePrivate::settings(const QString &group) return QSharedPointer<QSettings>(); } +#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()); +} + +const QFont *QQuickStylePrivate::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>()); + } +} + +const QPalette *QQuickStylePrivate::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) + static bool qt_is_dark_system_theme() { if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { diff --git a/src/quickcontrols2/qquickstyle_p.h b/src/quickcontrols2/qquickstyle_p.h index f6034fa0..205a4a11 100644 --- a/src/quickcontrols2/qquickstyle_p.h +++ b/src/quickcontrols2/qquickstyle_p.h @@ -66,6 +66,8 @@ public: static void reset(); static QString configFilePath(); static QSharedPointer<QSettings> settings(const QString &group = QString()); + static const QFont *readFont(const QSharedPointer<QSettings> &settings); + static const QPalette *readPalette(const QSharedPointer<QSettings> &settings); static bool isDarkSystemTheme(); }; diff --git a/src/quickcontrols2/qquickstyleplugin.cpp b/src/quickcontrols2/qquickstyleplugin.cpp index 0795eed4..2a93779e 100644 --- a/src/quickcontrols2/qquickstyleplugin.cpp +++ b/src/quickcontrols2/qquickstyleplugin.cpp @@ -39,91 +39,10 @@ #include "qquickstyle_p.h" #include "qquickstyleselector_p.h" -#include <QtCore/qmetaobject.h> -#include <QtCore/qsettings.h> -#include <QtGui/private/qguiapplication_p.h> #include <QtQuickTemplates2/private/qquicktheme_p_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) { } @@ -156,8 +75,8 @@ void QQuickStylePlugin::initializeEngine(QQmlEngine *engine, const char *uri) QQuickThemePrivate *p = QQuickThemePrivate::get(m_theme); QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(name()); if (settings) { - p->defaultFont.reset(readFont(settings)); - p->defaultPalette.reset(readPalette(settings)); + p->defaultFont.reset(QQuickStylePrivate::readFont(settings)); + p->defaultPalette.reset(QQuickStylePrivate::readPalette(settings)); } #endif QQuickTheme::setCurrent(m_theme); |