diff options
-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() |