aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-05-16 13:50:35 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2018-05-22 14:20:49 +0000
commitf40dc11886e8130bad5771ed80920e6e72dfc09e (patch)
treea5395a9a7efd47e293901f1d7419a1140806c4d4 /src/quicktemplates2
parent9338e1285e47060f3998ac19d047e93a11252ffb (diff)
QQuickTheme: add setters to make getters non-virtual
This allows us to add more themable attributes (on the side of fonts and palettes) after the QQuickTheme API has been made public, because it won't require adding virtuals. Only the resolve() method is virtual. Task-number: QTBUG-67062 Change-Id: I6a5cc8d15aeaa5a9a0fe9b6d2591077f8822daac Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2')
-rw-r--r--src/quicktemplates2/qquicktheme.cpp46
-rw-r--r--src/quicktemplates2/qquicktheme_p.h7
-rw-r--r--src/quicktemplates2/qquicktheme_p_p.h7
3 files changed, 29 insertions, 31 deletions
diff --git a/src/quicktemplates2/qquicktheme.cpp b/src/quicktemplates2/qquicktheme.cpp
index bfa34001..45c3e81a 100644
--- a/src/quicktemplates2/qquicktheme.cpp
+++ b/src/quicktemplates2/qquicktheme.cpp
@@ -97,23 +97,21 @@ static QPlatformTheme::Palette platformPalette(QQuickTheme::Scope scope)
const QFont *QQuickThemePrivate::resolveThemeFont(QQuickTheme::Scope scope)
{
Q_Q(QQuickTheme);
- if (!hasResolvedFonts) {
- q->resolveFonts(defaultFont ? *defaultFont : QFont());
- hasResolvedFonts = true;
- defaultFont.reset();
+ if (!hasResolved) {
+ q->resolve();
+ hasResolved = true;
}
- return q->font(scope);
+ return fonts[scope].data();
}
const QPalette *QQuickThemePrivate::resolveThemePalette(QQuickTheme::Scope scope)
{
Q_Q(QQuickTheme);
- if (!hasResolvedPalettes) {
- q->resolvePalettes(defaultPalette ? *defaultPalette : QPalette());
- hasResolvedPalettes = true;
- defaultPalette.reset();
+ if (!hasResolved) {
+ q->resolve();
+ hasResolved = true;
}
- return q->palette(scope);
+ return palettes[scope].data();
}
QQuickTheme::QQuickTheme()
@@ -146,6 +144,9 @@ QFont QQuickTheme::themeFont(Scope scope)
return f;
}
+ if (scope != System)
+ return themeFont(System);
+
return QFont();
}
@@ -164,31 +165,26 @@ QPalette QQuickTheme::themePalette(Scope scope)
return f;
}
- return QPalette();
-}
+ if (scope != System)
+ return themePalette(System);
-const QFont *QQuickTheme::font(Scope scope) const
-{
- Q_D(const QQuickTheme);
- Q_UNUSED(scope)
- return d->defaultFont.data();
+ return QPalette();
}
-const QPalette *QQuickTheme::palette(Scope scope) const
+void QQuickTheme::setFont(Scope scope, const QFont &font)
{
- Q_D(const QQuickTheme);
- Q_UNUSED(scope)
- return d->defaultPalette.data();
+ Q_D(QQuickTheme);
+ d->fonts[scope] = QSharedPointer<QFont>::create(d->defaultFont ? d->defaultFont->resolve(font) : font);
}
-void QQuickTheme::resolveFonts(const QFont &defaultFont)
+void QQuickTheme::setPalette(Scope scope, const QPalette &palette)
{
- Q_UNUSED(defaultFont)
+ Q_D(QQuickTheme);
+ d->palettes[scope] = QSharedPointer<QPalette>::create(d->defaultPalette ? d->defaultPalette->resolve(palette) : palette);
}
-void QQuickTheme::resolvePalettes(const QPalette &defaultPalette)
+void QQuickTheme::resolve()
{
- Q_UNUSED(defaultPalette)
}
QT_END_NAMESPACE
diff --git a/src/quicktemplates2/qquicktheme_p.h b/src/quicktemplates2/qquicktheme_p.h
index eb10d766..47f9a166 100644
--- a/src/quicktemplates2/qquicktheme_p.h
+++ b/src/quicktemplates2/qquicktheme_p.h
@@ -91,11 +91,10 @@ public:
static QPalette themePalette(Scope scope);
protected:
- virtual const QFont *font(Scope scope) const;
- virtual const QPalette *palette(Scope scope) const;
+ void setFont(Scope scope, const QFont &font);
+ void setPalette(Scope scope, const QPalette &palette);
- virtual void resolveFonts(const QFont &defaultFont);
- virtual void resolvePalettes(const QPalette &defaultPalette);
+ virtual void resolve();
private:
Q_DISABLE_COPY(QQuickTheme)
diff --git a/src/quicktemplates2/qquicktheme_p_p.h b/src/quicktemplates2/qquicktheme_p_p.h
index e43c8034..6a32440f 100644
--- a/src/quicktemplates2/qquicktheme_p_p.h
+++ b/src/quicktemplates2/qquicktheme_p_p.h
@@ -67,10 +67,13 @@ public:
static QScopedPointer<QQuickTheme> instance;
- bool hasResolvedFonts = false;
- bool hasResolvedPalettes = false;
+ static const int NScopes = QQuickTheme::Tumbler + 1;
+
+ bool hasResolved = false;
QScopedPointer<const QFont> defaultFont;
QScopedPointer<const QPalette> defaultPalette;
+ QSharedPointer<QFont> fonts[NScopes];
+ QSharedPointer<QPalette> palettes[NScopes];
QQuickTheme *q_ptr = nullptr;
};