aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/controls/fusion/qquickfusiontheme.cpp5
-rw-r--r--src/imports/controls/fusion/qquickfusiontheme_p.h10
-rw-r--r--src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp6
-rw-r--r--src/imports/controls/imagine/qquickimaginetheme.cpp12
-rw-r--r--src/imports/controls/imagine/qquickimaginetheme_p.h11
-rw-r--r--src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp6
-rw-r--r--src/imports/controls/material/qquickmaterialtheme.cpp33
-rw-r--r--src/imports/controls/material/qquickmaterialtheme_p.h13
-rw-r--r--src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp6
-rw-r--r--src/imports/controls/qquickdefaulttheme.cpp10
-rw-r--r--src/imports/controls/qquickdefaulttheme_p.h11
-rw-r--r--src/imports/controls/qtquickcontrols2plugin.cpp117
-rw-r--r--src/imports/controls/universal/qquickuniversaltheme.cpp14
-rw-r--r--src/imports/controls/universal/qquickuniversaltheme_p.h12
-rw-r--r--src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp6
-rw-r--r--src/quickcontrols2/qquickstyleplugin.cpp52
-rw-r--r--src/quickcontrols2/qquickstyleplugin_p.h6
-rw-r--r--src/quicktemplates2/qquicktheme.cpp28
-rw-r--r--src/quicktemplates2/qquicktheme_p.h5
-rw-r--r--src/quicktemplates2/qquicktheme_p_p.h4
-rw-r--r--tests/auto/font/tst_font.cpp2
-rw-r--r--tests/auto/palette/tst_palette.cpp2
-rw-r--r--tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp2
23 files changed, 153 insertions, 220 deletions
diff --git a/src/imports/controls/fusion/qquickfusiontheme.cpp b/src/imports/controls/fusion/qquickfusiontheme.cpp
index 78465b6b..ac88563a 100644
--- a/src/imports/controls/fusion/qquickfusiontheme.cpp
+++ b/src/imports/controls/fusion/qquickfusiontheme.cpp
@@ -36,10 +36,13 @@
#include "qquickfusiontheme_p.h"
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
QT_BEGIN_NAMESPACE
-QQuickFusionTheme::QQuickFusionTheme()
+void QQuickFusionTheme::initialize(QQuickTheme *theme)
{
+ Q_UNUSED(theme);
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/fusion/qquickfusiontheme_p.h b/src/imports/controls/fusion/qquickfusiontheme_p.h
index 0cd77f77..814c1919 100644
--- a/src/imports/controls/fusion/qquickfusiontheme_p.h
+++ b/src/imports/controls/fusion/qquickfusiontheme_p.h
@@ -48,16 +48,16 @@
// We mean it.
//
-#include <QtCore/qvariant.h>
-#include <QtGui/qpalette.h>
-#include <QtQuickTemplates2/private/qquicktheme_p.h>
+#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
-class QQuickFusionTheme : public QQuickTheme
+class QQuickTheme;
+
+class QQuickFusionTheme
{
public:
- explicit QQuickFusionTheme();
+ static void initialize(QQuickTheme *theme);
};
QT_END_NAMESPACE
diff --git a/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp b/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp
index 65da8cd7..107b4a2d 100644
--- a/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp
+++ b/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp
@@ -63,7 +63,7 @@ public:
void registerTypes(const char *uri) override;
QString name() const override;
- QQuickTheme *createTheme() const override;
+ void initializeTheme(QQuickTheme *theme) override;
};
QtQuickControls2FusionStylePlugin::QtQuickControls2FusionStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -97,9 +97,9 @@ QString QtQuickControls2FusionStylePlugin::name() const
return QStringLiteral("Fusion");
}
-QQuickTheme *QtQuickControls2FusionStylePlugin::createTheme() const
+void QtQuickControls2FusionStylePlugin::initializeTheme(QQuickTheme *theme)
{
- return new QQuickFusionTheme;
+ QQuickFusionTheme::initialize(theme);
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/imagine/qquickimaginetheme.cpp b/src/imports/controls/imagine/qquickimaginetheme.cpp
index 3499b3cd..a9722fa5 100644
--- a/src/imports/controls/imagine/qquickimaginetheme.cpp
+++ b/src/imports/controls/imagine/qquickimaginetheme.cpp
@@ -36,19 +36,15 @@
#include "qquickimaginetheme_p.h"
-#include <QtGui/qfontinfo.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
QT_BEGIN_NAMESPACE
-QQuickImagineTheme::QQuickImagineTheme()
-{
-}
-
-void QQuickImagineTheme::resolve()
+void QQuickImagineTheme::initialize(QQuickTheme *theme)
{
QFont systemFont;
systemFont.setFamily(QLatin1String("Open Sans"));
- setFont(System, systemFont);
+ theme->setFont(QQuickTheme::System, systemFont);
const QColor accentColor = QColor::fromRgb(0x4fc1e9);
const QColor windowTextColor = QColor::fromRgb(0x434a54);
@@ -64,7 +60,7 @@ void QQuickImagineTheme::resolve()
systemPalette.setColor(QPalette::WindowText, windowTextColor);
systemPalette.setColor(QPalette::Disabled, QPalette::Text, disabledWindowTextColor);
systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, disabledWindowTextColor);
- setPalette(System, systemPalette);
+ theme->setPalette(QQuickTheme::System, systemPalette);
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/imagine/qquickimaginetheme_p.h b/src/imports/controls/imagine/qquickimaginetheme_p.h
index 0d569598..d3d43074 100644
--- a/src/imports/controls/imagine/qquickimaginetheme_p.h
+++ b/src/imports/controls/imagine/qquickimaginetheme_p.h
@@ -48,17 +48,16 @@
// We mean it.
//
-#include <QtQuickTemplates2/private/qquicktheme_p.h>
+#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
-class QQuickImagineTheme : public QQuickTheme
+class QQuickTheme;
+
+class QQuickImagineTheme
{
public:
- explicit QQuickImagineTheme();
-
-protected:
- void resolve() override;
+ static void initialize(QQuickTheme *theme);
};
QT_END_NAMESPACE
diff --git a/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp b/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp
index 6dc142c9..490825ff 100644
--- a/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp
+++ b/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp
@@ -58,7 +58,7 @@ public:
void registerTypes(const char *uri) override;
QString name() const override;
- QQuickTheme *createTheme() const override;
+ void initializeTheme(QQuickTheme *theme) override;
};
QtQuickControls2ImagineStylePlugin::QtQuickControls2ImagineStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -84,9 +84,9 @@ QString QtQuickControls2ImagineStylePlugin::name() const
return QStringLiteral("Imagine");
}
-QQuickTheme *QtQuickControls2ImagineStylePlugin::createTheme() const
+void QtQuickControls2ImagineStylePlugin::initializeTheme(QQuickTheme *theme)
{
- return new QQuickImagineTheme;
+ QQuickImagineTheme::initialize(theme);
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/material/qquickmaterialtheme.cpp b/src/imports/controls/material/qquickmaterialtheme.cpp
index 3ab07f6b..f42c0a03 100644
--- a/src/imports/controls/material/qquickmaterialtheme.cpp
+++ b/src/imports/controls/material/qquickmaterialtheme.cpp
@@ -40,14 +40,11 @@
#include <QtGui/qpa/qplatformdialoghelper.h>
#include <QtGui/qfont.h>
#include <QtGui/qfontinfo.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
QT_BEGIN_NAMESPACE
-QQuickMaterialTheme::QQuickMaterialTheme()
-{
-}
-
-void QQuickMaterialTheme::resolve()
+void QQuickMaterialTheme::initialize(QQuickTheme *theme)
{
QFont systemFont;
QFont buttonFont;
@@ -78,38 +75,38 @@ void QQuickMaterialTheme::resolve()
const bool dense = QQuickMaterialStyle::variant() == QQuickMaterialStyle::Dense;
systemFont.setPixelSize(dense ? 13 : 14);
- setFont(System, systemFont);
+ theme->setFont(QQuickTheme::System, systemFont);
// https://material.io/guidelines/components/buttons.html#buttons-style
buttonFont.setPixelSize(dense ? 13 : 14);
buttonFont.setCapitalization(QFont::AllUppercase);
buttonFont.setWeight(QFont::Medium);
- setFont(Button, buttonFont);
- setFont(TabBar, buttonFont);
- setFont(ToolBar, buttonFont);
+ theme->setFont(QQuickTheme::Button, buttonFont);
+ theme->setFont(QQuickTheme::TabBar, buttonFont);
+ theme->setFont(QQuickTheme::ToolBar, buttonFont);
// https://material.io/guidelines/components/tooltips.html
toolTipFont.setPixelSize(dense ? 10 : 14);
toolTipFont.setWeight(QFont::Medium);
- setFont(ToolTip, toolTipFont);
+ theme->setFont(QQuickTheme::ToolTip, toolTipFont);
itemViewFont.setPixelSize(dense ? 13 : 14);
itemViewFont.setWeight(QFont::Medium);
- setFont(ItemView, itemViewFont);
+ theme->setFont(QQuickTheme::ItemView, itemViewFont);
// https://material.io/guidelines/components/lists.html#lists-specs
listViewFont.setPixelSize(dense ? 13 : 16);
- setFont(ListView, listViewFont);
+ theme->setFont(QQuickTheme::ListView, listViewFont);
menuItemFont.setPixelSize(dense ? 13 : 16);
- setFont(Menu, menuItemFont);
- setFont(MenuBar, menuItemFont);
- setFont(ComboBox, menuItemFont);
+ theme->setFont(QQuickTheme::Menu, menuItemFont);
+ theme->setFont(QQuickTheme::MenuBar, menuItemFont);
+ theme->setFont(QQuickTheme::ComboBox, menuItemFont);
editorFont.setPixelSize(dense ? 13 : 16);
- setFont(TextArea, editorFont);
- setFont(TextField, editorFont);
- setFont(SpinBox, editorFont);
+ theme->setFont(QQuickTheme::TextArea, editorFont);
+ theme->setFont(QQuickTheme::TextField, editorFont);
+ theme->setFont(QQuickTheme::SpinBox, editorFont);
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/material/qquickmaterialtheme_p.h b/src/imports/controls/material/qquickmaterialtheme_p.h
index aa50887b..9a1362b8 100644
--- a/src/imports/controls/material/qquickmaterialtheme_p.h
+++ b/src/imports/controls/material/qquickmaterialtheme_p.h
@@ -48,19 +48,16 @@
// We mean it.
//
-#include <QtCore/qvariant.h>
-#include <QtGui/qfont.h>
-#include <QtQuickTemplates2/private/qquicktheme_p.h>
+#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
-class QQuickMaterialTheme : public QQuickTheme
+class QQuickTheme;
+
+class QQuickMaterialTheme
{
public:
- explicit QQuickMaterialTheme();
-
-protected:
- void resolve() override;
+ static void initialize(QQuickTheme *theme);
};
QT_END_NAMESPACE
diff --git a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp b/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp
index 09dda329..d407af94 100644
--- a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp
+++ b/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp
@@ -58,7 +58,7 @@ public:
void registerTypes(const char *uri) override;
QString name() const override;
- QQuickTheme *createTheme() const override;
+ void initializeTheme(QQuickTheme *theme) override;
};
QtQuickControls2MaterialStylePlugin::QtQuickControls2MaterialStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -92,9 +92,9 @@ QString QtQuickControls2MaterialStylePlugin::name() const
return QStringLiteral("Material");
}
-QQuickTheme *QtQuickControls2MaterialStylePlugin::createTheme() const
+void QtQuickControls2MaterialStylePlugin::initializeTheme(QQuickTheme *theme)
{
- return new QQuickMaterialTheme;
+ QQuickMaterialTheme::initialize(theme);
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/qquickdefaulttheme.cpp b/src/imports/controls/qquickdefaulttheme.cpp
index a988c10b..bc292c2f 100644
--- a/src/imports/controls/qquickdefaulttheme.cpp
+++ b/src/imports/controls/qquickdefaulttheme.cpp
@@ -36,13 +36,11 @@
#include "qquickdefaulttheme_p.h"
-QT_BEGIN_NAMESPACE
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
-QQuickDefaultTheme::QQuickDefaultTheme()
-{
-}
+QT_BEGIN_NAMESPACE
-void QQuickDefaultTheme::resolve()
+void QQuickDefaultTheme::initialize(QQuickTheme *theme)
{
QPalette systemPalette;
@@ -85,7 +83,7 @@ void QQuickDefaultTheme::resolve()
systemPalette.setColor(QPalette::WindowText, QColor::fromRgba(0xFF26282A));
systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor::fromRgba(0xFFBDBEBF));
- setPalette(System, systemPalette);
+ theme->setPalette(QQuickTheme::System, systemPalette);
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/qquickdefaulttheme_p.h b/src/imports/controls/qquickdefaulttheme_p.h
index f372b111..3a7311c7 100644
--- a/src/imports/controls/qquickdefaulttheme_p.h
+++ b/src/imports/controls/qquickdefaulttheme_p.h
@@ -48,17 +48,16 @@
// We mean it.
//
-#include <QtQuickTemplates2/private/qquicktheme_p.h>
+#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
-class QQuickDefaultTheme : public QQuickTheme
+class QQuickTheme;
+
+class QQuickDefaultTheme
{
public:
- explicit QQuickDefaultTheme();
-
-protected:
- void resolve() override;
+ static void initialize(QQuickTheme *theme);
};
QT_END_NAMESPACE
diff --git a/src/imports/controls/qtquickcontrols2plugin.cpp b/src/imports/controls/qtquickcontrols2plugin.cpp
index e1b683e8..553060a1 100644
--- a/src/imports/controls/qtquickcontrols2plugin.cpp
+++ b/src/imports/controls/qtquickcontrols2plugin.cpp
@@ -37,10 +37,9 @@
#include <QtCore/qdir.h>
#include <QtCore/qfile.h>
#include <QtCore/qfileinfo.h>
-#if !defined(QT_STATIC) && QT_CONFIG(library)
-#include <QtCore/qlibrary.h>
-#endif
+#include <QtCore/qpluginloader.h>
#include <QtCore/private/qfileselector_p.h>
+#include <QtQml/qqmlfile.h>
#include <QtQml/private/qqmldirparser_p.h>
#include <QtQuickControls2/qquickstyle.h>
#include <QtQuickControls2/private/qquickchecklabel_p.h>
@@ -59,6 +58,7 @@
#include <QtQuickTemplates2/private/qquickoverlay_p.h>
#include <QtQuickControls2/private/qquickclippedtext_p.h>
#include <QtQuickControls2/private/qquickitemgroup_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p_p.h>
#include "qquickdefaultbusyindicator_p.h"
#include "qquickdefaultdial_p.h"
@@ -80,12 +80,11 @@ public:
void registerTypes(const char *uri) override;
QString name() const override;
- QQuickTheme *createTheme() const override;
+ void initializeTheme(QQuickTheme *theme) override;
-#if !defined(QT_STATIC) && QT_CONFIG(library)
private:
- void loadStylePlugin();
-#endif
+ QList<QQuickStylePlugin *> loadStylePlugins();
+ QQuickTheme *createTheme(const QString &name);
};
QtQuickControls2Plugin::QtQuickControls2Plugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -106,6 +105,11 @@ static QUrl fixupBaseUrl(QQmlExtensionPlugin *plugin)
#endif
}
+static bool isDefaultStyle(const QString &style)
+{
+ return style.isEmpty() || style.compare(QStringLiteral("Default"), Qt::CaseInsensitive) == 0;
+}
+
void QtQuickControls2Plugin::registerTypes(const char *uri)
{
QQuickStylePrivate::init(fixupBaseUrl(this));
@@ -114,10 +118,15 @@ void QtQuickControls2Plugin::registerTypes(const char *uri)
if (!style.isEmpty())
QFileSelectorPrivate::addStatics(QStringList() << style.toLower());
-#if !defined(QT_STATIC) && QT_CONFIG(library)
- // load the style's plugin to get access to its resources
- loadStylePlugin();
-#endif
+ QQuickTheme *theme = createTheme(style.isEmpty() ? name() : style);
+ if (isDefaultStyle(style))
+ initializeTheme(theme);
+
+ // load the style's plugins to get access to its resources and initialize the theme
+ QList<QQuickStylePlugin *> stylePlugins = loadStylePlugins();
+ for (QQuickStylePlugin *stylePlugin : stylePlugins)
+ stylePlugin->initializeTheme(theme);
+ qDeleteAll(stylePlugins);
qmlRegisterModule(uri, 2, QT_VERSION_MINOR - 7); // Qt 5.7->2.0, 5.8->2.1, 5.9->2.2...
@@ -229,45 +238,69 @@ QString QtQuickControls2Plugin::name() const
return QStringLiteral("Default");
}
-QQuickTheme *QtQuickControls2Plugin::createTheme() const
+void QtQuickControls2Plugin::initializeTheme(QQuickTheme *theme)
{
- return new QQuickDefaultTheme;
+ QQuickDefaultTheme::initialize(theme);
}
-#if !defined(QT_STATIC) && QT_CONFIG(library)
-void QtQuickControls2Plugin::loadStylePlugin()
+QList<QQuickStylePlugin *> QtQuickControls2Plugin::loadStylePlugins()
{
- QFileInfo fileInfo = resolvedUrl(QStringLiteral("qmldir")).toLocalFile();
- if (!fileInfo.exists() || fileInfo.path() == baseUrl().toLocalFile())
- return;
-
- QFile file(fileInfo.filePath());
- if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
- return;
-
- QQmlDirParser parser;
- parser.parse(QString::fromUtf8(file.readAll()));
- if (parser.hasError())
- return;
-
- QLibrary lib;
- lib.setLoadHints(QLibrary::PreventUnloadHint);
- const auto plugins = parser.plugins();
- for (const QQmlDirParser::Plugin &plugin : plugins) {
- QDir dir = fileInfo.dir();
- if (!plugin.path.isEmpty() && !dir.cd(plugin.path))
- continue;
- QString filePath = dir.filePath(plugin.name);
+ QList<QQuickStylePlugin *> stylePlugins;
+
+ QFileInfo fileInfo = QQmlFile::urlToLocalFileOrQrc(resolvedUrl(QStringLiteral("qmldir")));
+ if (fileInfo.exists() && fileInfo.path() != QQmlFile::urlToLocalFileOrQrc(baseUrl())) {
+ QFile file(fileInfo.filePath());
+ if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ QQmlDirParser parser;
+ parser.parse(QString::fromUtf8(file.readAll()));
+ if (!parser.hasError()) {
+#ifdef QT_STATIC
+ const auto plugins = QPluginLoader::staticInstances();
+ for (QObject *instance : plugins) {
+ QQuickStylePlugin *stylePlugin = qobject_cast<QQuickStylePlugin *>(instance);
+ if (!stylePlugin || parser.className() != QLatin1String(instance->metaObject()->className()))
+ continue;
+ stylePlugins += stylePlugin;
+ }
+#elif QT_CONFIG(library)
+ QPluginLoader loader;
+ const auto plugins = parser.plugins();
+ for (const QQmlDirParser::Plugin &plugin : plugins) {
+ QDir dir = fileInfo.dir();
+ if (!plugin.path.isEmpty() && !dir.cd(plugin.path))
+ continue;
+ QString filePath = dir.filePath(plugin.name);
#if defined(Q_OS_MACOS) && defined(QT_DEBUG)
- // Avoid mismatching plugins on macOS so that we don't end up loading both debug and
- // release versions of the same Qt libraries (due to the plugin's dependencies).
- filePath += QStringLiteral("_debug");
+ // Avoid mismatching plugins on macOS so that we don't end up loading both debug and
+ // release versions of the same Qt libraries (due to the plugin's dependencies).
+ filePath += QStringLiteral("_debug");
#endif // Q_OS_MACOS && QT_DEBUG
- lib.setFileName(filePath);
- lib.load();
+ loader.setFileName(filePath);
+ QQuickStylePlugin *stylePlugin = qobject_cast<QQuickStylePlugin *>(loader.instance());
+ if (stylePlugin)
+ stylePlugins += stylePlugin;
+ }
+#endif
+ }
+ }
}
+ return stylePlugins;
+}
+
+QQuickTheme *QtQuickControls2Plugin::createTheme(const QString &name)
+{
+ QQuickTheme *theme = new QQuickTheme;
+#if QT_CONFIG(settings)
+ QQuickThemePrivate *p = QQuickThemePrivate::get(theme);
+ QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(name);
+ if (settings) {
+ p->defaultFont.reset(QQuickStylePrivate::readFont(settings));
+ p->defaultPalette.reset(QQuickStylePrivate::readPalette(settings));
+ }
+#endif
+ QQuickThemePrivate::instance.reset(theme);
+ return theme;
}
-#endif // !QT_STATIC && QT_CONFIG(library)
QT_END_NAMESPACE
diff --git a/src/imports/controls/universal/qquickuniversaltheme.cpp b/src/imports/controls/universal/qquickuniversaltheme.cpp
index 6485afbc..041dce9e 100644
--- a/src/imports/controls/universal/qquickuniversaltheme.cpp
+++ b/src/imports/controls/universal/qquickuniversaltheme.cpp
@@ -36,16 +36,12 @@
#include "qquickuniversaltheme_p.h"
-#include <QtGui/qfont.h>
#include <QtGui/qfontinfo.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
QT_BEGIN_NAMESPACE
-QQuickUniversalTheme::QQuickUniversalTheme()
-{
-}
-
-void QQuickUniversalTheme::resolve()
+void QQuickUniversalTheme::initialize(QQuickTheme *theme)
{
QFont systemFont;
QFont groupBoxTitleFont;
@@ -60,15 +56,15 @@ void QQuickUniversalTheme::resolve()
}
systemFont.setPixelSize(15);
- setFont(System, systemFont);
+ theme->setFont(QQuickTheme::System, systemFont);
groupBoxTitleFont.setPixelSize(15);
groupBoxTitleFont.setWeight(QFont::DemiBold);
- setFont(GroupBox, groupBoxTitleFont);
+ theme->setFont(QQuickTheme::GroupBox, groupBoxTitleFont);
tabButtonFont.setPixelSize(24);
tabButtonFont.setWeight(QFont::Light);
- setFont(TabBar, tabButtonFont);
+ theme->setFont(QQuickTheme::TabBar, tabButtonFont);
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/universal/qquickuniversaltheme_p.h b/src/imports/controls/universal/qquickuniversaltheme_p.h
index f0f18db5..f762d0e3 100644
--- a/src/imports/controls/universal/qquickuniversaltheme_p.h
+++ b/src/imports/controls/universal/qquickuniversaltheme_p.h
@@ -48,18 +48,16 @@
// We mean it.
//
-#include <QtGui/qfont.h>
-#include <QtQuickTemplates2/private/qquicktheme_p.h>
+#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
-class QQuickUniversalTheme : public QQuickTheme
+class QQuickTheme;
+
+class QQuickUniversalTheme
{
public:
- explicit QQuickUniversalTheme();
-
-protected:
- void resolve() override;
+ static void initialize(QQuickTheme *theme);
};
QT_END_NAMESPACE
diff --git a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp
index edc14327..1265f636 100644
--- a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp
+++ b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp
@@ -55,7 +55,7 @@ public:
void registerTypes(const char *uri) override;
QString name() const override;
- QQuickTheme *createTheme() const override;
+ void initializeTheme(QQuickTheme *theme) override;
};
QtQuickControls2UniversalStylePlugin::QtQuickControls2UniversalStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -85,9 +85,9 @@ QString QtQuickControls2UniversalStylePlugin::name() const
return QStringLiteral("Universal");
}
-QQuickTheme *QtQuickControls2UniversalStylePlugin::createTheme() const
+void QtQuickControls2UniversalStylePlugin::initializeTheme(QQuickTheme *theme)
{
- return new QQuickUniversalTheme;
+ QQuickUniversalTheme::initialize(theme);
}
QT_END_NAMESPACE
diff --git a/src/quickcontrols2/qquickstyleplugin.cpp b/src/quickcontrols2/qquickstyleplugin.cpp
index c42ba88d..553a6cad 100644
--- a/src/quickcontrols2/qquickstyleplugin.cpp
+++ b/src/quickcontrols2/qquickstyleplugin.cpp
@@ -39,14 +39,11 @@
#include "qquickstyle_p.h"
#include "qquickstyleselector_p.h"
-#include <QtQuickTemplates2/private/qquicktheme_p_p.h>
-
QT_BEGIN_NAMESPACE
class QQuickStylePluginPrivate
{
public:
- QQuickTheme *theme = nullptr;
mutable QScopedPointer<QQuickStyleSelector> selector;
};
@@ -57,51 +54,6 @@ QQuickStylePlugin::QQuickStylePlugin(QObject *parent)
QQuickStylePlugin::~QQuickStylePlugin()
{
- Q_D(QQuickStylePlugin);
- if (QQuickTheme::instance() == d->theme)
- QQuickThemePrivate::instance.reset();
-}
-
-void QQuickStylePlugin::registerTypes(const char *uri)
-{
- Q_UNUSED(uri);
-}
-
-void QQuickStylePlugin::initializeEngine(QQmlEngine *engine, const char *uri)
-{
- Q_D(QQuickStylePlugin);
- Q_UNUSED(engine);
- Q_UNUSED(uri);
-
- // make sure not to re-create the theme if initializeEngine()
- // is called multiple times, like in case of qml2puppet (QTBUG-54995)
- if (d->theme)
- return;
-
- if (isCurrent()) {
- d->theme = createTheme();
- if (d->theme) {
-#if QT_CONFIG(settings)
- QQuickThemePrivate *p = QQuickThemePrivate::get(d->theme);
- QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(name());
- if (settings) {
- p->defaultFont.reset(QQuickStylePrivate::readFont(settings));
- p->defaultPalette.reset(QQuickStylePrivate::readPalette(settings));
- }
-#endif
- QQuickThemePrivate::instance.reset(d->theme);
- }
- }
-}
-
-bool QQuickStylePlugin::isCurrent() const
-{
- QString style = QQuickStyle::name();
- if (style.isEmpty())
- style = QStringLiteral("Default");
-
- const QString theme = name();
- return theme.compare(style, Qt::CaseInsensitive) == 0;
}
QString QQuickStylePlugin::name() const
@@ -109,9 +61,9 @@ QString QQuickStylePlugin::name() const
return QString();
}
-QQuickTheme *QQuickStylePlugin::createTheme() const
+void QQuickStylePlugin::initializeTheme(QQuickTheme *theme)
{
- return nullptr;
+ Q_UNUSED(theme);
}
QUrl QQuickStylePlugin::resolvedUrl(const QString &fileName) const
diff --git a/src/quickcontrols2/qquickstyleplugin_p.h b/src/quickcontrols2/qquickstyleplugin_p.h
index 735341df..6b89926c 100644
--- a/src/quickcontrols2/qquickstyleplugin_p.h
+++ b/src/quickcontrols2/qquickstyleplugin_p.h
@@ -64,12 +64,8 @@ public:
explicit QQuickStylePlugin(QObject *parent = nullptr);
~QQuickStylePlugin();
- void registerTypes(const char *uri) override;
- void initializeEngine(QQmlEngine *engine, const char *uri) override;
-
- bool isCurrent() const;
virtual QString name() const;
- virtual QQuickTheme *createTheme() const;
+ virtual void initializeTheme(QQuickTheme *theme);
QUrl resolvedUrl(const QString &fileName) const;
diff --git a/src/quicktemplates2/qquicktheme.cpp b/src/quicktemplates2/qquicktheme.cpp
index b8ced7b9..1ea0cef2 100644
--- a/src/quicktemplates2/qquicktheme.cpp
+++ b/src/quicktemplates2/qquicktheme.cpp
@@ -94,26 +94,6 @@ static QPlatformTheme::Palette platformPalette(QQuickTheme::Scope scope)
}
}
-const QFont *QQuickThemePrivate::resolveThemeFont(QQuickTheme::Scope scope)
-{
- Q_Q(QQuickTheme);
- if (!hasResolved) {
- q->resolve();
- hasResolved = true;
- }
- return fonts[scope].data();
-}
-
-const QPalette *QQuickThemePrivate::resolveThemePalette(QQuickTheme::Scope scope)
-{
- Q_Q(QQuickTheme);
- if (!hasResolved) {
- q->resolve();
- hasResolved = true;
- }
- return palettes[scope].data();
-}
-
QQuickTheme::QQuickTheme()
: d_ptr(new QQuickThemePrivate)
{
@@ -133,7 +113,7 @@ QFont QQuickTheme::font(Scope scope)
{
const QFont *font = nullptr;
if (QQuickTheme *theme = instance())
- font = QQuickThemePrivate::get(theme)->resolveThemeFont(scope);
+ font = QQuickThemePrivate::get(theme)->fonts[scope].data();
else if (QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme())
font = theme->font(platformFont(scope));
@@ -154,7 +134,7 @@ QPalette QQuickTheme::palette(Scope scope)
{
const QPalette *palette = nullptr;
if (QQuickTheme *theme = instance())
- palette = QQuickThemePrivate::get(theme)->resolveThemePalette(scope);
+ palette = QQuickThemePrivate::get(theme)->palettes[scope].data();
else if (QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme())
palette = theme->palette(platformPalette(scope));
@@ -183,8 +163,4 @@ void QQuickTheme::setPalette(Scope scope, const QPalette &palette)
d->palettes[scope] = QSharedPointer<QPalette>::create(d->defaultPalette ? d->defaultPalette->resolve(palette) : palette);
}
-void QQuickTheme::resolve()
-{
-}
-
QT_END_NAMESPACE
diff --git a/src/quicktemplates2/qquicktheme_p.h b/src/quicktemplates2/qquicktheme_p.h
index 44610c09..d51cc5b6 100644
--- a/src/quicktemplates2/qquicktheme_p.h
+++ b/src/quicktemplates2/qquicktheme_p.h
@@ -61,7 +61,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickTheme
{
public:
QQuickTheme();
- virtual ~QQuickTheme();
+ ~QQuickTheme();
static QQuickTheme *instance();
@@ -90,12 +90,9 @@ public:
static QFont font(Scope scope);
static QPalette palette(Scope scope);
-protected:
void setFont(Scope scope, const QFont &font);
void setPalette(Scope scope, const QPalette &palette);
- virtual void resolve();
-
private:
Q_DISABLE_COPY(QQuickTheme)
Q_DECLARE_PRIVATE(QQuickTheme)
diff --git a/src/quicktemplates2/qquicktheme_p_p.h b/src/quicktemplates2/qquicktheme_p_p.h
index 6a32440f..c7421677 100644
--- a/src/quicktemplates2/qquicktheme_p_p.h
+++ b/src/quicktemplates2/qquicktheme_p_p.h
@@ -62,14 +62,10 @@ public:
return theme->d_func();
}
- const QFont *resolveThemeFont(QQuickTheme::Scope scope);
- const QPalette *resolveThemePalette(QQuickTheme::Scope scope);
-
static QScopedPointer<QQuickTheme> instance;
static const int NScopes = QQuickTheme::Tumbler + 1;
- bool hasResolved = false;
QScopedPointer<const QFont> defaultFont;
QScopedPointer<const QPalette> defaultPalette;
QSharedPointer<QFont> fonts[NScopes];
diff --git a/tests/auto/font/tst_font.cpp b/tests/auto/font/tst_font.cpp
index 6746e39e..84f6334b 100644
--- a/tests/auto/font/tst_font.cpp
+++ b/tests/auto/font/tst_font.cpp
@@ -222,7 +222,7 @@ class TestFontTheme : public QQuickTheme
public:
static const int NFonts = QQuickTheme::Tumbler + 1;
- void resolve() override
+ TestFontTheme()
{
for (int i = 0; i < NFonts; ++i) {
QFont font = QFont();
diff --git a/tests/auto/palette/tst_palette.cpp b/tests/auto/palette/tst_palette.cpp
index ab7d9b16..e91fd732 100644
--- a/tests/auto/palette/tst_palette.cpp
+++ b/tests/auto/palette/tst_palette.cpp
@@ -221,7 +221,7 @@ class TestTheme : public QQuickTheme
public:
static const int NPalettes = QQuickTheme::Tumbler + 1;
- void resolve() override
+ TestTheme()
{
for (int i = 0; i < NPalettes; ++i)
setPalette(static_cast<Scope>(i), QPalette(QColor::fromRgb(i)));
diff --git a/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp b/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp
index 4ab3be4e..dec32e36 100644
--- a/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp
+++ b/tests/auto/qquickapplicationwindow/tst_qquickapplicationwindow.cpp
@@ -558,7 +558,7 @@ void tst_QQuickApplicationWindow::font()
class TestTheme : public QQuickTheme
{
public:
- void resolve() override
+ TestTheme()
{
setFont(System, QFont("Courier"));
}