aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--src/imports/controls/imagine/qquickimaginetheme.cpp23
-rw-r--r--src/imports/controls/imagine/qquickimaginetheme_p.h10
-rw-r--r--src/imports/controls/material/qquickmaterialtheme.cpp56
-rw-r--r--src/imports/controls/material/qquickmaterialtheme_p.h13
-rw-r--r--src/imports/controls/qquickdefaulttheme.cpp12
-rw-r--r--src/imports/controls/qquickdefaulttheme_p.h7
-rw-r--r--src/imports/controls/universal/qquickuniversaltheme.cpp24
-rw-r--r--src/imports/controls/universal/qquickuniversaltheme_p.h9
-rw-r--r--src/quicktemplates2/qquicktheme.cpp46
-rw-r--r--src/quicktemplates2/qquicktheme_p.h7
-rw-r--r--src/quicktemplates2/qquicktheme_p_p.h7
-rw-r--r--tests/auto/font/tst_font.cpp14
-rw-r--r--tests/auto/palette/tst_palette.cpp14
-rw-r--r--tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp9
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()