diff --git a/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml b/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml
index b5ef129a6c3..4f73722f692 100644
--- a/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml
+++ b/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml
@@ -37,7 +37,7 @@ Rectangle {
}
Image {
- source: textureSource
+ source: "image://materialBrowserTex/" + textureSource
sourceSize.width: root.width - 10
sourceSize.height: root.height - 10
anchors.centerIn: parent
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrary.qrc b/src/plugins/qmldesigner/components/assetslibrary/assetslibrary.qrc
index f8cea612985..61d39d016db 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrary.qrc
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrary.qrc
@@ -1,7 +1,5 @@
- images/asset_default.png
- images/asset_default@2x.png
images/asset_shader.png
images/asset_shader@2x.png
images/asset_shader_128.png
@@ -12,5 +10,8 @@
images/asset_video@2x.png
images/browse.png
images/browse@2x.png
+ images/assets_default.png
+ images/assets_default@2x.png
+ images/assets_default_128.png
diff --git a/src/plugins/qmldesigner/components/assetslibrary/images/asset_default.png b/src/plugins/qmldesigner/components/assetslibrary/images/asset_default.png
deleted file mode 100644
index ef59d892791..00000000000
Binary files a/src/plugins/qmldesigner/components/assetslibrary/images/asset_default.png and /dev/null differ
diff --git a/src/plugins/qmldesigner/components/assetslibrary/images/asset_default@2x.png b/src/plugins/qmldesigner/components/assetslibrary/images/asset_default@2x.png
deleted file mode 100644
index 6540cc859cd..00000000000
Binary files a/src/plugins/qmldesigner/components/assetslibrary/images/asset_default@2x.png and /dev/null differ
diff --git a/src/plugins/qmldesigner/components/assetslibrary/images/assets_default.png b/src/plugins/qmldesigner/components/assetslibrary/images/assets_default.png
new file mode 100644
index 00000000000..8e8f94cf5f5
Binary files /dev/null and b/src/plugins/qmldesigner/components/assetslibrary/images/assets_default.png differ
diff --git a/src/plugins/qmldesigner/components/assetslibrary/images/assets_default@2x.png b/src/plugins/qmldesigner/components/assetslibrary/images/assets_default@2x.png
new file mode 100644
index 00000000000..e54039dcbde
Binary files /dev/null and b/src/plugins/qmldesigner/components/assetslibrary/images/assets_default@2x.png differ
diff --git a/src/plugins/qmldesigner/components/assetslibrary/images/assets_default_128.png b/src/plugins/qmldesigner/components/assetslibrary/images/assets_default_128.png
new file mode 100644
index 00000000000..27997ea2a75
Binary files /dev/null and b/src/plugins/qmldesigner/components/assetslibrary/images/assets_default_128.png differ
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp
index b39bdbb1f94..15613960da1 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp
@@ -35,7 +35,7 @@ QVariant MaterialBrowserTexturesModel::data(const QModelIndex &index, int role)
QByteArray roleName = roleNames().value(role);
if (roleName == "textureSource") {
QString source = m_textureList.at(index.row()).variantProperty("source").value().toString();
- return QUrl::fromLocalFile(DocumentManager::currentResourcePath().path() + '/' + source);
+ return QVariant(DocumentManager::currentResourcePath().path() + '/' + source);
}
if (roleName == "textureVisible")
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp
index d9a3539d249..75aad7bd7af 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp
@@ -18,6 +18,7 @@
#include
#include
+#include
#include
#include
@@ -88,6 +89,33 @@ public:
}
};
+class TextureImageProvider : public QQuickImageProvider
+{
+public:
+ TextureImageProvider() : QQuickImageProvider(Pixmap) {}
+
+ QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override
+ {
+ QPixmap pixmap;
+ const QString suffix = id.split('.').last().toLower();
+ if (suffix == "hdr")
+ pixmap = HdrImage{id}.toPixmap();
+ else
+ pixmap = Utils::StyleHelper::dpiSpecificImageFile(id);
+
+ if (pixmap.isNull())
+ pixmap = Utils::StyleHelper::dpiSpecificImageFile(":/materialeditor/images/texture_default.png");
+
+ if (size)
+ *size = pixmap.size();
+
+ if (requestedSize.isValid())
+ return pixmap.scaled(requestedSize, Qt::KeepAspectRatio);
+
+ return pixmap;
+ }
+};
+
bool MaterialBrowserWidget::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::FocusOut) {
@@ -119,8 +147,9 @@ bool MaterialBrowserWidget::eventFilter(QObject *obj, QEvent *event)
QString iconPath = QLatin1String("%1/%2")
.arg(DocumentManager::currentResourcePath().path(),
m_textureToDrag.variantProperty("source").value().toString());
-
- model->startDrag(mimeData, QPixmap(iconPath).scaled({128, 128}));
+ model->startDrag(mimeData,
+ m_textureImageProvider->requestPixmap(iconPath, nullptr,
+ {128, 128}));
}
m_materialToDrag = {};
m_textureToDrag = {};
@@ -140,6 +169,7 @@ MaterialBrowserWidget::MaterialBrowserWidget(MaterialBrowserView *view)
, m_materialBrowserTexturesModel(new MaterialBrowserTexturesModel(this))
, m_quickWidget(new QQuickWidget(this))
, m_previewImageProvider(new PreviewImageProvider())
+ , m_textureImageProvider(new TextureImageProvider())
{
setWindowTitle(tr("Material Browser", "Title of material browser widget"));
setMinimumWidth(120);
@@ -160,6 +190,8 @@ MaterialBrowserWidget::MaterialBrowserWidget(MaterialBrowserView *view)
});
m_quickWidget->engine()->addImageProvider("materialBrowser", m_previewImageProvider);
+ m_quickWidget->engine()->addImageProvider("materialBrowserTex", m_textureImageProvider);
+
Theme::setupTheme(m_quickWidget->engine());
m_quickWidget->installEventFilter(this);
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h
index d1c0ef7c8a6..8e868a69864 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h
@@ -28,6 +28,7 @@ class MaterialBrowserView;
class MaterialBrowserModel;
class MaterialBrowserTexturesModel;
class PreviewImageProvider;
+class TextureImageProvider;
class MaterialBrowserWidget : public QFrame
{
@@ -70,6 +71,7 @@ private:
QShortcut *m_qmlSourceUpdateShortcut = nullptr;
PreviewImageProvider *m_previewImageProvider = nullptr;
+ TextureImageProvider *m_textureImageProvider = nullptr;
Core::IContext *m_context = nullptr;
QString m_filterText;
diff --git a/src/plugins/qmldesigner/components/materialeditor/images/texture_default.png b/src/plugins/qmldesigner/components/materialeditor/images/texture_default.png
new file mode 100644
index 00000000000..70e85cc2eba
Binary files /dev/null and b/src/plugins/qmldesigner/components/materialeditor/images/texture_default.png differ
diff --git a/src/plugins/qmldesigner/components/materialeditor/images/texture_default@2x.png b/src/plugins/qmldesigner/components/materialeditor/images/texture_default@2x.png
new file mode 100644
index 00000000000..a27efb275d3
Binary files /dev/null and b/src/plugins/qmldesigner/components/materialeditor/images/texture_default@2x.png differ
diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditor.qrc b/src/plugins/qmldesigner/components/materialeditor/materialeditor.qrc
index 4ed3c769175..872452df1a0 100644
--- a/src/plugins/qmldesigner/components/materialeditor/materialeditor.qrc
+++ b/src/plugins/qmldesigner/components/materialeditor/materialeditor.qrc
@@ -1,5 +1,7 @@
images/defaultmaterialpreview.png
+ images/texture_default.png
+ images/texture_default@2x.png