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