aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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()