From 857ee29c1a177117ed44619a05ff76af6d93d813 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 13 Dec 2022 16:29:25 +0200 Subject: [PATCH] QmlDesigner: Add support for dragging textures to materials Dragging textures to materials within material browser now works. Fixes: QDS-8552 Change-Id: I1ec0287020fe2cd347bc0db7cda9d235678e9f04 Reviewed-by: Mahmoud Badri --- .../materialBrowserQmlSource/MaterialItem.qml | 12 ++++++++++++ .../materialbrowser/materialbrowserwidget.cpp | 11 +++++++++++ .../materialbrowser/materialbrowserwidget.h | 1 + 3 files changed, 24 insertions(+) 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;