aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2022-03-07 14:06:11 +0200
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2022-03-08 07:38:41 +0000
commitec02c157eec9aeece5cdbb6b5ab112d0eae4c4e2 (patch)
treebf1fed24541a7b2bf520f3fb7afb6f82c1105844
parente1643c89034b5ab5c397ec6749f2c3acd0ebedc9 (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>
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml6
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml12
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp31
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h6
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp9
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