diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-03-07 14:06:11 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-03-08 07:38:41 +0000 |
commit | ec02c157eec9aeece5cdbb6b5ab112d0eae4c4e2 (patch) | |
tree | bf1fed24541a7b2bf520f3fb7afb6f82c1105844 | |
parent | e1643c89034b5ab5c397ec6749f2c3acd0ebedc9 (diff) |
QmlDesigner: Simplify hidden and locked handling for gizmos
There is no need to have an event filter to listen to changes to
_edit3dLocked and _edit3dHidden properties, as they are only changed
in one place. We can simply emit the change notification there.
Fixes: QDS-6403
Change-Id: I8136f38fd8e435e3a4dbd69d70169496e1675dfa
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Samuel Ghinet <samuel.ghinet@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
5 files changed, 8 insertions, 56 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml index 0b15f19067..904a062a62 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml @@ -385,14 +385,12 @@ Item { lightIconGizmos[slotFound].targetNode = obj; lightIconGizmos[slotFound].locked = _generalHelper.isLocked(obj); lightIconGizmos[slotFound].hidden = _generalHelper.isHidden(obj); - _generalHelper.registerGizmoTarget(obj); return; } // No free gizmos available, create a new one var gizmoComponent = Qt.createComponent("LightIconGizmo.qml"); if (gizmoComponent.status === Component.Ready) { - _generalHelper.registerGizmoTarget(obj); var gizmo = gizmoComponent.createObject(overlayView, {"view3D": overlayView, "targetNode": obj, "selectedNodes": selectedNodes, "scene": scene, @@ -426,7 +424,6 @@ Item { cameraGizmos[slotFound].targetNode = obj; cameraGizmos[slotFound].locked = _generalHelper.isLocked(obj); cameraGizmos[slotFound].hidden = _generalHelper.isHidden(obj); - _generalHelper.registerGizmoTarget(obj); return; } @@ -434,7 +431,6 @@ Item { var gizmoComponent = Qt.createComponent("CameraGizmo.qml"); var frustumComponent = Qt.createComponent("CameraFrustum.qml"); if (gizmoComponent.status === Component.Ready && frustumComponent.status === Component.Ready) { - _generalHelper.registerGizmoTarget(obj); var geometryName = _generalHelper.generateUniqueName("CameraGeometry"); var frustum = frustumComponent.createObject( overlayScene, @@ -463,7 +459,6 @@ Item { if (lightIconGizmos[i].targetNode === obj) { lightIconGizmos[i].scene = null; lightIconGizmos[i].targetNode = null; - _generalHelper.unregisterGizmoTarget(obj); return; } } @@ -475,7 +470,6 @@ Item { if (cameraGizmos[i].targetNode === obj) { cameraGizmos[i].scene = null; cameraGizmos[i].targetNode = null; - _generalHelper.unregisterGizmoTarget(obj); return; } } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml index a8425fd6cb..bc0c6a9d9d 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml @@ -385,14 +385,12 @@ Item { lightIconGizmos[slotFound].targetNode = obj; lightIconGizmos[slotFound].locked = _generalHelper.isLocked(obj); lightIconGizmos[slotFound].hidden = _generalHelper.isHidden(obj); - _generalHelper.registerGizmoTarget(obj); return; } // No free gizmos available, create a new one var gizmoComponent = Qt.createComponent("LightIconGizmo.qml"); if (gizmoComponent.status === Component.Ready) { - _generalHelper.registerGizmoTarget(obj); var gizmo = gizmoComponent.createObject(overlayView, {"view3D": overlayView, "targetNode": obj, "selectedNodes": selectedNodes, "scene": scene, @@ -426,7 +424,6 @@ Item { cameraGizmos[slotFound].targetNode = obj; cameraGizmos[slotFound].locked = _generalHelper.isLocked(obj); cameraGizmos[slotFound].hidden = _generalHelper.isHidden(obj); - _generalHelper.registerGizmoTarget(obj); return; } @@ -434,7 +431,6 @@ Item { var gizmoComponent = Qt.createComponent("CameraGizmo.qml"); var frustumComponent = Qt.createComponent("CameraFrustum.qml"); if (gizmoComponent.status === Component.Ready && frustumComponent.status === Component.Ready) { - _generalHelper.registerGizmoTarget(obj); var geometryName = _generalHelper.generateUniqueName("CameraGeometry"); var frustum = frustumComponent.createObject( overlayScene, @@ -475,14 +471,12 @@ Item { particleSystemIconGizmos[slotFound].targetNode = obj; particleSystemIconGizmos[slotFound].locked = _generalHelper.isLocked(obj); particleSystemIconGizmos[slotFound].hidden = _generalHelper.isHidden(obj); - _generalHelper.registerGizmoTarget(obj); return; } // No free gizmos available, create a new one var gizmoComponent = Qt.createComponent("ParticleSystemGizmo.qml"); if (gizmoComponent.status === Component.Ready) { - _generalHelper.registerGizmoTarget(obj); var gizmo = gizmoComponent.createObject(overlayView, {"view3D": overlayView, "targetNode": obj, "selectedNodes": selectedNodes, "scene": scene, @@ -518,14 +512,12 @@ Item { particleEmitterGizmos[slotFound].targetNode = obj; particleEmitterGizmos[slotFound].hidden = _generalHelper.isHidden(obj); particleEmitterGizmos[slotFound].systemHidden = _generalHelper.isHidden(obj.system); - _generalHelper.registerGizmoTarget(obj); return; } // No free gizmos available, create a new one var gizmoComponent = Qt.createComponent("ParticleEmitterGizmo.qml"); if (gizmoComponent.status === Component.Ready) { - _generalHelper.registerGizmoTarget(obj); var gizmo = gizmoComponent.createObject( overlayScene, {"targetNode": obj, "selectedNodes": selectedNodes, @@ -548,7 +540,6 @@ Item { if (lightIconGizmos[i].targetNode === obj) { lightIconGizmos[i].scene = null; lightIconGizmos[i].targetNode = null; - _generalHelper.unregisterGizmoTarget(obj); return; } } @@ -560,7 +551,6 @@ Item { if (cameraGizmos[i].targetNode === obj) { cameraGizmos[i].scene = null; cameraGizmos[i].targetNode = null; - _generalHelper.unregisterGizmoTarget(obj); return; } } @@ -572,7 +562,6 @@ Item { if (particleSystemIconGizmos[i].targetNode === obj) { particleSystemIconGizmos[i].scene = null; particleSystemIconGizmos[i].targetNode = null; - _generalHelper.unregisterGizmoTarget(obj); return; } } @@ -584,7 +573,6 @@ Item { if (particleEmitterGizmos[i].targetNode === obj) { particleEmitterGizmos[i].scene = null; particleEmitterGizmos[i].targetNode = null; - _generalHelper.unregisterGizmoTarget(obj); return; } } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp index 3c976ea0cb..66cd2d80b8 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp @@ -410,22 +410,6 @@ QQuick3DNode *GeneralHelper::resolvePick(QQuick3DNode *pickNode) return pickNode; } -void GeneralHelper::registerGizmoTarget(QQuick3DNode *node) -{ - if (!m_gizmoTargets.contains(node)) { - m_gizmoTargets.insert(node); - node->installEventFilter(this); - } -} - -void GeneralHelper::unregisterGizmoTarget(QQuick3DNode *node) -{ - if (m_gizmoTargets.contains(node)) { - m_gizmoTargets.remove(node); - node->removeEventFilter(this); - } -} - bool GeneralHelper::isLocked(QQuick3DNode *node) const { if (node) { @@ -744,21 +728,6 @@ bool GeneralHelper::isRotationBlocked(QQuick3DNode *node) const return m_rotationBlockedNodes.contains(node); } -bool GeneralHelper::eventFilter(QObject *obj, QEvent *event) -{ - if (event->type() == QEvent::DynamicPropertyChange) { - auto node = qobject_cast<QQuick3DNode *>(obj); - if (m_gizmoTargets.contains(node)) { - auto de = static_cast<QDynamicPropertyChangeEvent *>(event); - if (de->propertyName() == "_edit3dLocked") - emit lockedStateChanged(node); - else if (de->propertyName() == "_edit3dHidden") - emit hiddenStateChanged(node); - } - } - return QObject::eventFilter(obj, event); -} - void GeneralHelper::handlePendingToolStateUpdate() { m_toolStateUpdateTimer.stop(); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h index 97ffa35adb..e94451a15a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h @@ -84,8 +84,6 @@ public: Q_INVOKABLE QQuick3DPickResult pickViewAt(QQuick3DViewport *view, float posX, float posY); Q_INVOKABLE QQuick3DNode *resolvePick(QQuick3DNode *pickNode); - Q_INVOKABLE void registerGizmoTarget(QQuick3DNode *node); - Q_INVOKABLE void unregisterGizmoTarget(QQuick3DNode *node); Q_INVOKABLE bool isLocked(QQuick3DNode *node) const; Q_INVOKABLE bool isHidden(QQuick3DNode *node) const; Q_INVOKABLE bool isPickable(QQuick3DNode *node) const; @@ -125,9 +123,6 @@ signals: void lockedStateChanged(QQuick3DNode *node); void rotationBlocksChanged(); -protected: - bool eventFilter(QObject *obj, QEvent *event) final; - private: void handlePendingToolStateUpdate(); QVector3D pivotScenePosition(QQuick3DNode *node) const; @@ -138,7 +133,6 @@ private: QTimer m_toolStateUpdateTimer; QHash<QString, QVariantMap> m_toolStates; QHash<QString, QVariantMap> m_toolStatesPending; - QSet<QQuick3DNode *> m_gizmoTargets; QSet<QQuick3DNode *> m_rotationBlockedNodes; struct MultiSelData { diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index c1df9cc56e..ae1c289b41 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -2278,8 +2278,12 @@ void Qt5InformationNodeInstanceServer::handleInstanceLocked(const ServerNodeInst QObject *obj = instance.internalObject(); auto node = qobject_cast<QQuick3DNode *>(obj); - if (node) + if (node) { node->setProperty("_edit3dLocked", edit3dLocked); + auto helper = qobject_cast<QmlDesigner::Internal::GeneralHelper *>(m_3dHelper); + if (helper) + emit helper->lockedStateChanged(node); + } const auto children = obj->children(); for (auto child : children) { if (hasInstanceForObject(child)) { @@ -2334,6 +2338,9 @@ void Qt5InformationNodeInstanceServer::handleInstanceHidden(const ServerNodeInst // as changes in the node tree (reparenting, adding new nodes) can make the previously set // hide status based on ancestor unreliable. node->setProperty("_edit3dHidden", edit3dHidden); + auto helper = qobject_cast<QmlDesigner::Internal::GeneralHelper *>(m_3dHelper); + if (helper) + emit helper->hiddenStateChanged(node); #if QT_VERSION < QT_VERSION_CHECK(6, 2, 1) if (auto model = qobject_cast<QQuick3DModel *>(node)) model->setPickable(!edit3dHidden); // allow 3D objects to receive mouse clicks |