diff options
-rw-r--r-- | src/imports/controls/imagine/qquickimaginetheme_p.h | 6 | ||||
-rw-r--r-- | src/imports/controls/material/qquickmaterialtheme_p.h | 4 | ||||
-rw-r--r-- | src/imports/controls/qquickdefaulttheme_p.h | 2 | ||||
-rw-r--r-- | src/imports/controls/universal/qquickuniversaltheme_p.h | 4 | ||||
-rw-r--r-- | src/quickcontrols2/qquickstyleplugin.cpp | 11 | ||||
-rw-r--r-- | src/quicktemplates2/qquicktheme.cpp | 41 | ||||
-rw-r--r-- | src/quicktemplates2/qquicktheme_p.h | 9 | ||||
-rw-r--r-- | src/quicktemplates2/qquicktheme_p_p.h | 9 | ||||
-rw-r--r-- | tests/auto/font/tst_font.cpp | 2 | ||||
-rw-r--r-- | tests/auto/palette/tst_palette.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp | 2 |
11 files changed, 52 insertions, 40 deletions
diff --git a/src/imports/controls/imagine/qquickimaginetheme_p.h b/src/imports/controls/imagine/qquickimaginetheme_p.h index 3a388a86..13a62b59 100644 --- a/src/imports/controls/imagine/qquickimaginetheme_p.h +++ b/src/imports/controls/imagine/qquickimaginetheme_p.h @@ -57,10 +57,10 @@ class QQuickImagineTheme : public QQuickTheme public: explicit QQuickImagineTheme(); - const QFont *font(Font type = SystemFont) const override; - const QPalette *palette(Palette type = SystemPalette) const override; - protected: + const QFont *font(Font type) const override; + const QPalette *palette(Palette type) const override; + void resolveFonts(const QFont &defaultFont) override; void resolvePalettes(const QPalette &defaultPalette) override; diff --git a/src/imports/controls/material/qquickmaterialtheme_p.h b/src/imports/controls/material/qquickmaterialtheme_p.h index 8df1f962..571461a7 100644 --- a/src/imports/controls/material/qquickmaterialtheme_p.h +++ b/src/imports/controls/material/qquickmaterialtheme_p.h @@ -59,9 +59,9 @@ class QQuickMaterialTheme : public QQuickTheme public: explicit QQuickMaterialTheme(); - const QFont *font(Font type = SystemFont) const override; - protected: + const QFont *font(Font type) const override; + void resolveFonts(const QFont &defaultFont) override; private: diff --git a/src/imports/controls/qquickdefaulttheme_p.h b/src/imports/controls/qquickdefaulttheme_p.h index 05c1c344..161dd57f 100644 --- a/src/imports/controls/qquickdefaulttheme_p.h +++ b/src/imports/controls/qquickdefaulttheme_p.h @@ -57,9 +57,9 @@ class QQuickDefaultTheme : public QQuickTheme public: explicit QQuickDefaultTheme(); +protected: const QPalette *palette(Palette type) const override; -protected: void resolvePalettes(const QPalette &defaultPalette) override; private: diff --git a/src/imports/controls/universal/qquickuniversaltheme_p.h b/src/imports/controls/universal/qquickuniversaltheme_p.h index 3a4cc792..fe547ccd 100644 --- a/src/imports/controls/universal/qquickuniversaltheme_p.h +++ b/src/imports/controls/universal/qquickuniversaltheme_p.h @@ -58,9 +58,9 @@ class QQuickUniversalTheme : public QQuickTheme public: explicit QQuickUniversalTheme(); - const QFont *font(Font type = SystemFont) const override; - protected: + const QFont *font(Font type) const override; + void resolveFonts(const QFont &defaultFont) override; private: diff --git a/src/quickcontrols2/qquickstyleplugin.cpp b/src/quickcontrols2/qquickstyleplugin.cpp index 61f845cb..7f54c033 100644 --- a/src/quickcontrols2/qquickstyleplugin.cpp +++ b/src/quickcontrols2/qquickstyleplugin.cpp @@ -41,7 +41,7 @@ #include <QtCore/qmetaobject.h> #include <QtCore/qsettings.h> #include <QtGui/private/qguiapplication_p.h> -#include <QtQuickTemplates2/private/qquicktheme_p.h> +#include <QtQuickTemplates2/private/qquicktheme_p_p.h> #include <functional> @@ -151,17 +151,14 @@ void QQuickStylePlugin::initializeEngine(QQmlEngine *engine, const char *uri) if (isCurrent()) { m_theme = createTheme(); if (m_theme) { - const QFont *font = nullptr; - const QPalette *palette = nullptr; #if QT_CONFIG(settings) + QQuickThemePrivate *p = QQuickThemePrivate::get(m_theme); QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(name()); if (settings) { - font = readFont(settings); - palette = readPalette(settings); + p->defaultFont.reset(readFont(settings)); + p->defaultPalette.reset(readPalette(settings)); } #endif - m_theme->setDefaultFont(font); - m_theme->setDefaultPalette(palette); QQuickTheme::setCurrent(m_theme); } } diff --git a/src/quicktemplates2/qquicktheme.cpp b/src/quicktemplates2/qquicktheme.cpp index 777480b2..41d15014 100644 --- a/src/quicktemplates2/qquicktheme.cpp +++ b/src/quicktemplates2/qquicktheme.cpp @@ -72,9 +72,32 @@ static QPlatformTheme::Palette platformPalette(QQuickTheme::Palette type) } } +const QFont *QQuickThemePrivate::resolveThemeFont(QQuickTheme::Font type) +{ + Q_Q(QQuickTheme); + if (!hasResolvedFonts) { + q->resolveFonts(defaultFont ? *defaultFont : QFont()); + hasResolvedFonts = true; + defaultFont.reset(); + } + return q->font(type); +} + +const QPalette *QQuickThemePrivate::resolveThemePalette(QQuickTheme::Palette type) +{ + Q_Q(QQuickTheme); + if (!hasResolvedPalettes) { + q->resolvePalettes(defaultPalette ? *defaultPalette : QPalette()); + hasResolvedPalettes = true; + defaultPalette.reset(); + } + return q->palette(type); +} + QQuickTheme::QQuickTheme() : d_ptr(new QQuickThemePrivate) { + d_ptr->q_ptr = this; } QQuickTheme::~QQuickTheme() @@ -95,7 +118,7 @@ QFont QQuickTheme::themeFont(Font type) { const QFont *font = nullptr; if (QQuickTheme *theme = current()) - font = theme->font(type); + font = QQuickThemePrivate::get(theme)->resolveThemeFont(type); else if (QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) font = theme->font(platformFont(type)); @@ -113,7 +136,7 @@ QPalette QQuickTheme::themePalette(Palette type) { const QPalette *palette = nullptr; if (QQuickTheme *theme = current()) - palette = theme->palette(type); + palette = QQuickThemePrivate::get(theme)->resolveThemePalette(type); else if (QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) palette = theme->palette(platformPalette(type)); @@ -141,20 +164,6 @@ const QPalette *QQuickTheme::palette(Palette type) const return d->defaultPalette.data(); } -void QQuickTheme::setDefaultFont(const QFont *defaultFont) -{ - Q_D(QQuickTheme); - d->defaultFont.reset(defaultFont); - resolveFonts(defaultFont ? *defaultFont : QFont()); -} - -void QQuickTheme::setDefaultPalette(const QPalette *defaultPalette) -{ - Q_D(QQuickTheme); - d->defaultPalette.reset(defaultPalette); - resolvePalettes(defaultPalette ? *defaultPalette : QPalette()); -} - void QQuickTheme::resolveFonts(const QFont &defaultFont) { Q_UNUSED(defaultFont) diff --git a/src/quicktemplates2/qquicktheme_p.h b/src/quicktemplates2/qquicktheme_p.h index 6d37039e..f80bd9d7 100644 --- a/src/quicktemplates2/qquicktheme_p.h +++ b/src/quicktemplates2/qquicktheme_p.h @@ -128,13 +128,10 @@ public: static QFont themeFont(Font type); static QPalette themePalette(Palette type); - virtual const QFont *font(Font type = SystemFont) const; - virtual const QPalette *palette(Palette type = SystemPalette) const; - - void setDefaultFont(const QFont *defaultFont); - void setDefaultPalette(const QPalette *defaultPalette); - protected: + virtual const QFont *font(Font type) const; + virtual const QPalette *palette(Palette type) const; + virtual void resolveFonts(const QFont &defaultFont); virtual void resolvePalettes(const QPalette &defaultPalette); diff --git a/src/quicktemplates2/qquicktheme_p_p.h b/src/quicktemplates2/qquicktheme_p_p.h index b8cdc4aa..88de14ab 100644 --- a/src/quicktemplates2/qquicktheme_p_p.h +++ b/src/quicktemplates2/qquicktheme_p_p.h @@ -54,15 +54,24 @@ QT_BEGIN_NAMESPACE class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickThemePrivate { + Q_DECLARE_PUBLIC(QQuickTheme) + public: static QQuickThemePrivate *get(QQuickTheme *theme) { return theme->d_func(); } + const QFont *resolveThemeFont(QQuickTheme::Font type); + const QPalette *resolveThemePalette(QQuickTheme::Palette type); + static QScopedPointer<QQuickTheme> current; + + bool hasResolvedFonts = false; + bool hasResolvedPalettes = false; QScopedPointer<const QFont> defaultFont; QScopedPointer<const QPalette> defaultPalette; + QQuickTheme *q_ptr = nullptr; }; QT_END_NAMESPACE diff --git a/tests/auto/font/tst_font.cpp b/tests/auto/font/tst_font.cpp index 5b69e298..6e705fb4 100644 --- a/tests/auto/font/tst_font.cpp +++ b/tests/auto/font/tst_font.cpp @@ -231,7 +231,7 @@ public: } } - const QFont *font(Font type = SystemFont) const override + const QFont *font(Font type) const override { return fonts[type]; } diff --git a/tests/auto/palette/tst_palette.cpp b/tests/auto/palette/tst_palette.cpp index ee617e2c..af251a82 100644 --- a/tests/auto/palette/tst_palette.cpp +++ b/tests/auto/palette/tst_palette.cpp @@ -227,7 +227,7 @@ public: palettes[i] = new QPalette(QColor::fromRgb(i)); } - const QPalette *palette(Palette type = SystemPalette) const override + const QPalette *palette(Palette type) const override { return palettes[type]; } diff --git a/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp b/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp index 6228a15d..ecd53b9e 100644 --- a/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp +++ b/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp @@ -560,7 +560,7 @@ class TestTheme : public QQuickTheme public: TestTheme() : m_font("Courier") { } - const QFont *font(Font type = SystemFont) const override + const QFont *font(Font type) const override { Q_UNUSED(type); return &m_font; |