diff --git a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialItem.qml b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialItem.qml index bb38fe435ea..ec36e61d854 100644 --- a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialItem.qml +++ b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialItem.qml @@ -43,6 +43,18 @@ Rectangle { color: "transparent" visible: materialVisible + DropArea { + anchors.fill: parent + + onEntered: (drag) => { + drag.accepted = drag.formats[0] === "application/vnd.qtdesignstudio.texture" + } + + onDropped: (drag) => { + rootView.acceptTextureDropOnMaterial(index, drag.getDataAsString(drag.keys[0])) + } + } + MouseArea { id: mouseArea diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp index 901626b5a24..64d285f9222 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp @@ -265,6 +265,17 @@ void MaterialBrowserWidget::acceptBundleTextureDrop() m_materialBrowserView->emitCustomNotification("drop_bundle_texture", {}, {}); // To ContentLibraryView } +void MaterialBrowserWidget::acceptTextureDropOnMaterial(int matIndex, const QString &texId) +{ + ModelNode mat = m_materialBrowserModel->materialAt(matIndex); + ModelNode tex = m_materialBrowserView->modelNodeForInternalId(texId.toInt()); + + if (mat.isValid() && tex.isValid()) { + m_materialBrowserModel->selectMaterial(matIndex); + m_materialBrowserView->applyTextureToMaterial({mat}, tex); + } +} + void MaterialBrowserWidget::focusMaterialSection(bool focusMatSec) { if (focusMatSec != m_materialSectionFocused) { diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h index 4b0541ee560..47930eee0ae 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h @@ -56,6 +56,7 @@ public: Q_INVOKABLE void startDragTexture(int index, const QPointF &mousePos); Q_INVOKABLE void acceptBundleMaterialDrop(); Q_INVOKABLE void acceptBundleTextureDrop(); + Q_INVOKABLE void acceptTextureDropOnMaterial(int matIndex, const QString &texId); Q_INVOKABLE void focusMaterialSection(bool focusMatSec); QQuickWidget *quickWidget() const;