aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/controls/imagine/qquickimaginetheme_p.h6
-rw-r--r--src/imports/controls/material/qquickmaterialtheme_p.h4
-rw-r--r--src/imports/controls/qquickdefaulttheme_p.h2
-rw-r--r--src/imports/controls/universal/qquickuniversaltheme_p.h4
-rw-r--r--src/quickcontrols2/qquickstyleplugin.cpp11
-rw-r--r--src/quicktemplates2/qquicktheme.cpp41
-rw-r--r--src/quicktemplates2/qquicktheme_p.h9
-rw-r--r--src/quicktemplates2/qquicktheme_p_p.h9
-rw-r--r--tests/auto/font/tst_font.cpp2
-rw-r--r--tests/auto/palette/tst_palette.cpp2
-rw-r--r--tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp2
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;