diff options
author | Eike Ziller <eike.ziller@qt.io> | 2022-09-13 11:15:16 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2022-09-13 11:15:16 +0200 |
commit | 5ae23f8c6644bc990c6c5132b15d27c0b1287ea7 (patch) | |
tree | e303987b0f871158826c3ac08adbdb3b16f054a1 /share/qtcreator/qml/qmlpuppet | |
parent | fbd4775f899cda7a802cbdbec8e596ed8a0358de (diff) | |
parent | 67408ac1830a3d2493273cd74fe2941b38ba4b87 (diff) |
Merge remote-tracking branch 'origin/8.0'
Conflicts:
.github/workflows/build_cmake.yml
src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp
src/plugins/qmldesigner/components/materialeditor/materialeditorview.h
src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
src/plugins/qmldesigner/designercore/model/model.cpp
Change-Id: I111b9140375b894a5487cc012b17cc32100bdb8d
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet')
8 files changed, 77 insertions, 13 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h b/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h index 356e7f7c84..762054bb9b 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h +++ b/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h @@ -18,7 +18,7 @@ public: ActiveSceneChanged, RenderModelNodePreviewImage, Import3DSupport, - ModelAtPos, + NodeAtPos, None }; PuppetToCreatorCommand(Type type, const QVariant &data); diff --git a/share/qtcreator/qml/qmlpuppet/commands/view3dactioncommand.h b/share/qtcreator/qml/qmlpuppet/commands/view3dactioncommand.h index b54a86a008..fca9777692 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/view3dactioncommand.h +++ b/share/qtcreator/qml/qmlpuppet/commands/view3dactioncommand.h @@ -38,7 +38,7 @@ public: SelectGridColor, ResetBackgroundColor, SyncBackgroundColor, - GetModelAtPos + GetNodeAtPos }; View3DActionCommand(Type type, const QVariant &value); diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml index 833131b5e1..672aca03c6 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml @@ -525,6 +525,19 @@ Item { } } + function gizmoAt(x, y) + { + for (var i = 0; i < lightIconGizmos.length; ++i) { + if (lightIconGizmos[i].visible && lightIconGizmos[i].hasPoint(x, y)) + return lightIconGizmos[i].targetNode; + } + for (var i = 0; i < cameraGizmos.length; ++i) { + if (cameraGizmos[i].visible && cameraGizmos[i].hasPoint(x, y)) + return cameraGizmos[i].targetNode; + } + return null; + } + Component.onCompleted: { createEditView(); selectObjects([]); diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/IconGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/IconGizmo.qml index 4c3dd38598..e44cf74d08 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/IconGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/IconGizmo.qml @@ -30,6 +30,17 @@ Item { signal clicked(Node node, bool multi) + function hasPoint(x, y) + { + if (!view3D || !targetNode) + return false; + + var point = view3D.mapToItem(iconMouseArea, x, y); + + return point.x >= iconMouseArea.x && (point.x <= iconMouseArea.x + iconMouseArea.width) + && point.y >= iconMouseArea.y && (point.y <= iconMouseArea.y + iconMouseArea.height); + } + onSelectedChanged: { if (selected) hasMouse = false; diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml index ccb05244f3..915feea4f2 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml @@ -648,6 +648,23 @@ Item { } } + function gizmoAt(x, y) + { + for (var i = 0; i < lightIconGizmos.length; ++i) { + if (lightIconGizmos[i].visible && lightIconGizmos[i].hasPoint(x, y)) + return lightIconGizmos[i].targetNode; + } + for (var i = 0; i < cameraGizmos.length; ++i) { + if (cameraGizmos[i].visible && cameraGizmos[i].hasPoint(x, y)) + return cameraGizmos[i].targetNode; + } + for (var i = 0; i < particleSystemIconGizmos.length; ++i) { + if (particleSystemIconGizmos[i].visible && particleSystemIconGizmos[i].hasPoint(x, y)) + return particleSystemIconGizmos[i].targetNode; + } + return null; + } + Component.onCompleted: { createEditView(); selectObjects([]); diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/IconGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/IconGizmo.qml index cc0fdea291..70ee9d51f1 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/IconGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/IconGizmo.qml @@ -31,6 +31,17 @@ Item { signal clicked(Node node, bool multi) + function hasPoint(x, y) + { + if (!view3D || !targetNode) + return false; + + var point = view3D.mapToItem(iconMouseArea, x, y); + + return point.x >= iconMouseArea.x && (point.x <= iconMouseArea.x + iconMouseArea.width) + && point.y >= iconMouseArea.y && (point.y <= iconMouseArea.y + iconMouseArea.height); + } + onSelectedChanged: { if (selected) hasMouse = false; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 1ac414185d..b99f4c4282 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -272,7 +272,7 @@ void Qt5InformationNodeInstanceServer::handleInputEvents() // Context menu requested if (command.button() == Qt::RightButton && command.modifiers() == Qt::NoModifier) - getModelAtPos(command.pos()); + getNodeAtPos(command.pos()); } } @@ -386,7 +386,7 @@ void Qt5InformationNodeInstanceServer::removeRotationBlocks( #endif } -void Qt5InformationNodeInstanceServer::getModelAtPos(const QPointF &pos) +void Qt5InformationNodeInstanceServer::getNodeAtPos(const QPointF &pos) { #ifdef QUICK3D_MODULE // pick a Quick3DModel at view position @@ -398,13 +398,25 @@ void Qt5InformationNodeInstanceServer::getModelAtPos(const QPointF &pos) QObject *obj = qvariant_cast<QObject *>(editViewProp.read()); QQuick3DViewport *editView = qobject_cast<QQuick3DViewport *>(obj); - QQuick3DModel *hitModel = helper->pickViewAt(editView, pos.x(), pos.y()).objectHit(); - - // filter out picks of models created dynamically or inside components - QQuick3DModel *resolvedPick = qobject_cast<QQuick3DModel *>(helper->resolvePick(hitModel)); + // Non-model nodes with icon gizmos are also valid results + QVariant gizmoVar; + QMetaObject::invokeMethod(m_editView3DData.rootItem, "gizmoAt", Qt::DirectConnection, + Q_RETURN_ARG(QVariant, gizmoVar), + Q_ARG(QVariant, pos.x()), + Q_ARG(QVariant, pos.y())); + QObject *gizmoObj = qvariant_cast<QObject *>(gizmoVar); + QVariant instance = -1; + + if (gizmoObj && hasInstanceForObject(gizmoObj)) { + instance = instanceForObject(gizmoObj).instanceId(); + } else { + QQuick3DModel *hitModel = helper->pickViewAt(editView, pos.x(), pos.y()).objectHit(); + QObject *resolvedPick = helper->resolvePick(hitModel); + if (hasInstanceForObject(resolvedPick)) + instance = instanceForObject(resolvedPick).instanceId(); + } - QVariant instance = resolvedPick ? instanceForObject(resolvedPick).instanceId() : -1; - nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::ModelAtPos, instance}); + nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::NodeAtPos, instance}); #else Q_UNUSED(pos) #endif @@ -2387,8 +2399,8 @@ void Qt5InformationNodeInstanceServer::view3DAction(const View3DActionCommand &c break; #endif #ifdef QUICK3D_MODULE - case View3DActionCommand::GetModelAtPos: { - getModelAtPos(command.value().toPointF()); + case View3DActionCommand::GetNodeAtPos: { + getNodeAtPos(command.value().toPointF()); return; } #endif diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index a37fc42f9c..2099c184d9 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -126,7 +126,7 @@ private: void updateMaterialPreviewData(const QVector<PropertyValueContainer> &valueChanges); void updateRotationBlocks(const QVector<PropertyValueContainer> &valueChanges); void removeRotationBlocks(const QVector<qint32> &instanceIds); - void getModelAtPos(const QPointF &pos); + void getNodeAtPos(const QPointF &pos); void createAuxiliaryQuickView(const QUrl &url, RenderViewData &viewData); #ifdef QUICK3D_PARTICLES_MODULE |