diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-05-16 13:50:35 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-05-22 14:20:49 +0000 |
commit | f40dc11886e8130bad5771ed80920e6e72dfc09e (patch) | |
tree | a5395a9a7efd47e293901f1d7419a1140806c4d4 | |
parent | 9338e1285e47060f3998ac19d047e93a11252ffb (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>
-rw-r--r-- | src/imports/controls/imagine/qquickimaginetheme.cpp | 23 | ||||
-rw-r--r-- | src/imports/controls/imagine/qquickimaginetheme_p.h | 10 | ||||
-rw-r--r-- | src/imports/controls/material/qquickmaterialtheme.cpp | 56 | ||||
-rw-r--r-- | src/imports/controls/material/qquickmaterialtheme_p.h | 13 | ||||
-rw-r--r-- | src/imports/controls/qquickdefaulttheme.cpp | 12 | ||||
-rw-r--r-- | src/imports/controls/qquickdefaulttheme_p.h | 7 | ||||
-rw-r--r-- | src/imports/controls/universal/qquickuniversaltheme.cpp | 24 | ||||
-rw-r--r-- | src/imports/controls/universal/qquickuniversaltheme_p.h | 9 | ||||
-rw-r--r-- | src/quicktemplates2/qquicktheme.cpp | 46 | ||||
-rw-r--r-- | src/quicktemplates2/qquicktheme_p.h | 7 | ||||
-rw-r--r-- | src/quicktemplates2/qquicktheme_p_p.h | 7 | ||||
-rw-r--r-- | tests/auto/font/tst_font.cpp | 14 | ||||
-rw-r--r-- | tests/auto/palette/tst_palette.cpp | 14 | ||||
-rw-r--r-- | tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp | 9 |
14 files changed, 78 insertions, 173 deletions
diff --git a/src/imports/controls/imagine/qquickimaginetheme.cpp b/src/imports/controls/imagine/qquickimaginetheme.cpp index bfde0c6b..3499b3cd 100644 --- a/src/imports/controls/imagine/qquickimaginetheme.cpp +++ b/src/imports/controls/imagine/qquickimaginetheme.cpp @@ -44,18 +44,17 @@ QQuickImagineTheme::QQuickImagineTheme() { } -void QQuickImagineTheme::resolveFonts(const QFont &defaultFont) +void QQuickImagineTheme::resolve() { + QFont systemFont; systemFont.setFamily(QLatin1String("Open Sans")); - systemFont = defaultFont.resolve(systemFont); -} + setFont(System, 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); + QPalette systemPalette; systemPalette.setColor(QPalette::ButtonText, Qt::white); systemPalette.setColor(QPalette::BrightText, Qt::white); systemPalette.setColor(QPalette::Highlight, accentColor); @@ -65,19 +64,7 @@ void QQuickImagineTheme::resolvePalettes(const QPalette &defaultPalette) systemPalette.setColor(QPalette::WindowText, windowTextColor); systemPalette.setColor(QPalette::Disabled, QPalette::Text, disabledWindowTextColor); systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, disabledWindowTextColor); - systemPalette = defaultPalette.resolve(systemPalette); -} - -const QFont *QQuickImagineTheme::font(Scope scope) const -{ - Q_UNUSED(scope); - return &systemFont; -} - -const QPalette *QQuickImagineTheme::palette(Scope scope) const -{ - Q_UNUSED(scope); - return &systemPalette; + setPalette(System, systemPalette); } QT_END_NAMESPACE diff --git a/src/imports/controls/imagine/qquickimaginetheme_p.h b/src/imports/controls/imagine/qquickimaginetheme_p.h index c663e940..0d569598 100644 --- a/src/imports/controls/imagine/qquickimaginetheme_p.h +++ b/src/imports/controls/imagine/qquickimaginetheme_p.h @@ -58,15 +58,7 @@ public: explicit QQuickImagineTheme(); protected: - const QFont *font(Scope scope) const override; - const QPalette *palette(Scope scope) const override; - - void resolveFonts(const QFont &defaultFont) override; - void resolvePalettes(const QPalette &defaultPalette) override; - -private: - QFont systemFont; - QPalette systemPalette; + void resolve() override; }; QT_END_NAMESPACE diff --git a/src/imports/controls/material/qquickmaterialtheme.cpp b/src/imports/controls/material/qquickmaterialtheme.cpp index 378a5bf7..3ab07f6b 100644 --- a/src/imports/controls/material/qquickmaterialtheme.cpp +++ b/src/imports/controls/material/qquickmaterialtheme.cpp @@ -47,8 +47,16 @@ QQuickMaterialTheme::QQuickMaterialTheme() { } -void QQuickMaterialTheme::resolveFonts(const QFont &defaultFont) +void QQuickMaterialTheme::resolve() { + QFont systemFont; + QFont buttonFont; + QFont toolTipFont; + QFont itemViewFont; + QFont listViewFont; + QFont menuItemFont; + QFont editorFont; + QFont font; font.setFamily(QLatin1String("Roboto")); QString family = QFontInfo(font).family(); @@ -70,58 +78,38 @@ void QQuickMaterialTheme::resolveFonts(const QFont &defaultFont) const bool dense = QQuickMaterialStyle::variant() == QQuickMaterialStyle::Dense; systemFont.setPixelSize(dense ? 13 : 14); - systemFont = defaultFont.resolve(systemFont); + setFont(System, systemFont); // https://material.io/guidelines/components/buttons.html#buttons-style buttonFont.setPixelSize(dense ? 13 : 14); buttonFont.setCapitalization(QFont::AllUppercase); buttonFont.setWeight(QFont::Medium); - buttonFont = defaultFont.resolve(buttonFont); + setFont(Button, buttonFont); + setFont(TabBar, buttonFont); + setFont(ToolBar, buttonFont); // https://material.io/guidelines/components/tooltips.html toolTipFont.setPixelSize(dense ? 10 : 14); toolTipFont.setWeight(QFont::Medium); - toolTipFont = defaultFont.resolve(toolTipFont); + setFont(ToolTip, toolTipFont); itemViewFont.setPixelSize(dense ? 13 : 14); itemViewFont.setWeight(QFont::Medium); - itemViewFont = defaultFont.resolve(itemViewFont); + setFont(ItemView, itemViewFont); // https://material.io/guidelines/components/lists.html#lists-specs listViewFont.setPixelSize(dense ? 13 : 16); - listViewFont = defaultFont.resolve(listViewFont); + setFont(ListView, listViewFont); menuItemFont.setPixelSize(dense ? 13 : 16); - menuItemFont = defaultFont.resolve(menuItemFont); + setFont(Menu, menuItemFont); + setFont(MenuBar, menuItemFont); + setFont(ComboBox, menuItemFont); editorFont.setPixelSize(dense ? 13 : 16); - editorFont = defaultFont.resolve(editorFont); -} - -const QFont *QQuickMaterialTheme::font(Scope scope) const -{ - switch (scope) { - case Button: - case TabBar: - case ToolBar: - return &buttonFont; - case ToolTip: - return &toolTipFont; - case ItemView: - return &itemViewFont; - case ListView: - return &listViewFont; - case Menu: - case MenuBar: - case ComboBox: - return &menuItemFont; - case TextArea: - case TextField: - case SpinBox: - return &editorFont; - default: - return &systemFont; - } + setFont(TextArea, editorFont); + setFont(TextField, editorFont); + setFont(SpinBox, editorFont); } QT_END_NAMESPACE diff --git a/src/imports/controls/material/qquickmaterialtheme_p.h b/src/imports/controls/material/qquickmaterialtheme_p.h index 717990ad..aa50887b 100644 --- a/src/imports/controls/material/qquickmaterialtheme_p.h +++ b/src/imports/controls/material/qquickmaterialtheme_p.h @@ -60,18 +60,7 @@ public: explicit QQuickMaterialTheme(); protected: - const QFont *font(Scope scope) const override; - - void resolveFonts(const QFont &defaultFont) override; - -private: - QFont systemFont; - QFont buttonFont; - QFont toolTipFont; - QFont itemViewFont; - QFont listViewFont; - QFont menuItemFont; - QFont editorFont; + void resolve() override; }; QT_END_NAMESPACE diff --git a/src/imports/controls/qquickdefaulttheme.cpp b/src/imports/controls/qquickdefaulttheme.cpp index 40ed269a..a988c10b 100644 --- a/src/imports/controls/qquickdefaulttheme.cpp +++ b/src/imports/controls/qquickdefaulttheme.cpp @@ -42,8 +42,10 @@ QQuickDefaultTheme::QQuickDefaultTheme() { } -void QQuickDefaultTheme::resolvePalettes(const QPalette &defaultPalette) +void QQuickDefaultTheme::resolve() { + QPalette systemPalette; + systemPalette.setColor(QPalette::Base, QColor::fromRgba(0xFFFFFFFF)); systemPalette.setColor(QPalette::Disabled, QPalette::Base, QColor::fromRgba(0xFFD6D6D6)); @@ -83,13 +85,7 @@ void QQuickDefaultTheme::resolvePalettes(const QPalette &defaultPalette) systemPalette.setColor(QPalette::WindowText, QColor::fromRgba(0xFF26282A)); systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor::fromRgba(0xFFBDBEBF)); - systemPalette = defaultPalette.resolve(systemPalette); -} - -const QPalette *QQuickDefaultTheme::palette(Scope scope) const -{ - Q_UNUSED(scope); - return &systemPalette; + setPalette(System, systemPalette); } QT_END_NAMESPACE diff --git a/src/imports/controls/qquickdefaulttheme_p.h b/src/imports/controls/qquickdefaulttheme_p.h index 1d5897bd..f372b111 100644 --- a/src/imports/controls/qquickdefaulttheme_p.h +++ b/src/imports/controls/qquickdefaulttheme_p.h @@ -58,12 +58,7 @@ public: explicit QQuickDefaultTheme(); protected: - const QPalette *palette(Scope scope) const override; - - void resolvePalettes(const QPalette &defaultPalette) override; - -private: - QPalette systemPalette; + void resolve() override; }; QT_END_NAMESPACE diff --git a/src/imports/controls/universal/qquickuniversaltheme.cpp b/src/imports/controls/universal/qquickuniversaltheme.cpp index 0f85261d..6485afbc 100644 --- a/src/imports/controls/universal/qquickuniversaltheme.cpp +++ b/src/imports/controls/universal/qquickuniversaltheme.cpp @@ -45,8 +45,12 @@ QQuickUniversalTheme::QQuickUniversalTheme() { } -void QQuickUniversalTheme::resolveFonts(const QFont &defaultFont) +void QQuickUniversalTheme::resolve() { + QFont systemFont; + QFont groupBoxTitleFont; + QFont tabButtonFont; + const QFont font(QLatin1String("Segoe UI")); if (QFontInfo(font).family() == QLatin1String("Segoe UI")) { const QString family = font.family(); @@ -56,27 +60,15 @@ void QQuickUniversalTheme::resolveFonts(const QFont &defaultFont) } systemFont.setPixelSize(15); - systemFont = defaultFont.resolve(systemFont); + setFont(System, systemFont); groupBoxTitleFont.setPixelSize(15); groupBoxTitleFont.setWeight(QFont::DemiBold); - groupBoxTitleFont = defaultFont.resolve(groupBoxTitleFont); + setFont(GroupBox, groupBoxTitleFont); tabButtonFont.setPixelSize(24); tabButtonFont.setWeight(QFont::Light); - tabButtonFont = defaultFont.resolve(tabButtonFont); -} - -const QFont *QQuickUniversalTheme::font(Scope scope) const -{ - switch (scope) { - case GroupBox: - return &groupBoxTitleFont; - case TabBar: - return &tabButtonFont; - default: - return &systemFont; - } + setFont(TabBar, tabButtonFont); } QT_END_NAMESPACE diff --git a/src/imports/controls/universal/qquickuniversaltheme_p.h b/src/imports/controls/universal/qquickuniversaltheme_p.h index 5782ff93..f0f18db5 100644 --- a/src/imports/controls/universal/qquickuniversaltheme_p.h +++ b/src/imports/controls/universal/qquickuniversaltheme_p.h @@ -59,14 +59,7 @@ public: explicit QQuickUniversalTheme(); protected: - const QFont *font(Scope scope) const override; - - void resolveFonts(const QFont &defaultFont) override; - -private: - QFont systemFont; - QFont groupBoxTitleFont; - QFont tabButtonFont; + void resolve() override; }; QT_END_NAMESPACE 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; }; diff --git a/tests/auto/font/tst_font.cpp b/tests/auto/font/tst_font.cpp index 048739ff..d01e928d 100644 --- a/tests/auto/font/tst_font.cpp +++ b/tests/auto/font/tst_font.cpp @@ -222,24 +222,14 @@ class TestFontTheme : public QQuickTheme public: static const int NFonts = QQuickTheme::Tumbler + 1; - TestFontTheme() + void resolve() override { - std::fill(fonts, fonts + NFonts, static_cast<QFont *>(0)); - for (int i = 0; i < NFonts; ++i) { QFont font = QFont(); font.setPixelSize(i + 10); - fonts[i] = new QFont(font); + setFont(static_cast<Scope>(i), font); } } - - const QFont *font(Scope scope) const override - { - return fonts[scope]; - } - -private: - QFont *fonts[NFonts]; }; Q_DECLARE_METATYPE(QQuickTheme::Scope) diff --git a/tests/auto/palette/tst_palette.cpp b/tests/auto/palette/tst_palette.cpp index 4c067e17..7bdbbdc3 100644 --- a/tests/auto/palette/tst_palette.cpp +++ b/tests/auto/palette/tst_palette.cpp @@ -221,21 +221,11 @@ class TestTheme : public QQuickTheme public: static const int NPalettes = QQuickTheme::Tumbler + 1; - TestTheme() + void resolve() override { - std::fill(palettes, palettes + NPalettes, static_cast<QPalette *>(0)); - for (int i = 0; i < NPalettes; ++i) - palettes[i] = new QPalette(QColor::fromRgb(i)); + setPalette(static_cast<Scope>(i), QPalette(QColor::fromRgb(i))); } - - const QPalette *palette(Scope scope) const override - { - return palettes[scope]; - } - -private: - QPalette *palettes[NPalettes]; }; Q_DECLARE_METATYPE(QQuickTheme::Scope) diff --git a/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp b/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp index 742ad9fd..ef2d0893 100644 --- a/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp +++ b/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp @@ -558,15 +558,10 @@ void tst_QQuickApplicationWindow::font() class TestTheme : public QQuickTheme { public: - TestTheme() : m_font("Courier") { } - - const QFont *font(Scope scope) const override + void resolve() override { - Q_UNUSED(scope); - return &m_font; + setFont(System, QFont("Courier")); } - - QFont m_font; }; void tst_QQuickApplicationWindow::defaultFont() |