aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols2/qquickstyleplugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickcontrols2/qquickstyleplugin.cpp')
-rw-r--r--src/quickcontrols2/qquickstyleplugin.cpp80
1 files changed, 30 insertions, 50 deletions
diff --git a/src/quickcontrols2/qquickstyleplugin.cpp b/src/quickcontrols2/qquickstyleplugin.cpp
index fa8e9785..553a6cad 100644
--- a/src/quickcontrols2/qquickstyleplugin.cpp
+++ b/src/quickcontrols2/qquickstyleplugin.cpp
@@ -35,51 +35,25 @@
****************************************************************************/
#include "qquickstyleplugin_p.h"
-#include "qquickproxytheme_p.h"
#include "qquickstyle.h"
-
-#include <QtGui/private/qguiapplication_p.h>
+#include "qquickstyle_p.h"
+#include "qquickstyleselector_p.h"
QT_BEGIN_NAMESPACE
-QQuickStylePlugin::QQuickStylePlugin(QObject *parent) : QQmlExtensionPlugin(parent)
-{
-}
-
-QQuickStylePlugin::~QQuickStylePlugin()
+class QQuickStylePluginPrivate
{
-}
-
-void QQuickStylePlugin::registerTypes(const char *uri)
-{
- Q_UNUSED(uri);
-}
+public:
+ mutable QScopedPointer<QQuickStyleSelector> selector;
+};
-void QQuickStylePlugin::initializeEngine(QQmlEngine *engine, const char *uri)
+QQuickStylePlugin::QQuickStylePlugin(QObject *parent)
+ : QQmlExtensionPlugin(parent), d_ptr(new QQuickStylePluginPrivate)
{
- Q_UNUSED(engine);
- Q_UNUSED(uri);
-
- // make sure not to re-create the proxy theme if initializeEngine()
- // is called multiple times, like in case of qml2puppet (QTBUG-54995)
- if (!m_theme.isNull())
- return;
-
- if (isCurrent()) {
- m_theme.reset(createTheme());
- if (m_theme)
- QGuiApplicationPrivate::platform_theme = m_theme.data();
- }
}
-bool QQuickStylePlugin::isCurrent() const
+QQuickStylePlugin::~QQuickStylePlugin()
{
- 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
@@ -87,25 +61,31 @@ QString QQuickStylePlugin::name() const
return QString();
}
-QQuickProxyTheme *QQuickStylePlugin::createTheme() const
+void QQuickStylePlugin::initializeTheme(QQuickTheme *theme)
{
- return nullptr;
+ Q_UNUSED(theme);
}
-/*
- Returns either a file system path if Qt was built as shared libraries,
- or a QRC path if Qt was built statically.
-*/
-QUrl QQuickStylePlugin::typeUrl(const QString &name) const
+QUrl QQuickStylePlugin::resolvedUrl(const QString &fileName) const
{
-#ifdef QT_STATIC
- QString url = QLatin1String("qrc") + baseUrl().path();
-#else
- QString url = baseUrl().toString();
-#endif
- if (!name.isEmpty())
- url += QLatin1Char('/') + name;
- return QUrl(url);
+ Q_D(const QQuickStylePlugin);
+ if (!d->selector) {
+ d->selector.reset(new QQuickStyleSelector);
+ const QString style = QQuickStyle::name();
+ if (!style.isEmpty())
+ d->selector->addSelector(style);
+
+ const QString fallback = QQuickStylePrivate::fallbackStyle();
+ if (!fallback.isEmpty() && fallback != style)
+ d->selector->addSelector(fallback);
+
+ const QString theme = name();
+ if (!theme.isEmpty() && theme != style)
+ d->selector->addSelector(theme);
+
+ d->selector->setPaths(QQuickStylePrivate::stylePaths(true));
+ }
+ return d->selector->select(fileName);
}
QT_END_NAMESPACE