From dbfdacecf4fe60ee85200510e325930272e0850e Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 18 Nov 2019 15:44:33 +0200 Subject: [PATCH] QmlDesigner: Fix issues with MouseArea3D deactivation detection Existing mouse grab is now released when MouseArea3D is deactivated or set to no longer grab the mouse. Various gizmos were also set to follow MouseArea3D's dragging property instead of keeping track of drag themselves. Change-Id: I49f968f20b26eb222fc8635b943e9144073fb164 Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- .../qmlpuppet/mockfiles/DirectionalDraggable.qml | 4 +--- .../qml/qmlpuppet/mockfiles/PlanarDraggable.qml | 4 +--- .../qml/qmlpuppet/mockfiles/RotateRing.qml | 4 +--- .../qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp | 14 ++++++++++++++ 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/DirectionalDraggable.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/DirectionalDraggable.qml index 243744210ee..7ccfaa9816c 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/DirectionalDraggable.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/DirectionalDraggable.qml @@ -34,7 +34,7 @@ Model { property View3D view3D property alias color: material.emissiveColor property Node targetNode: null - property bool dragging: false + property bool dragging: mouseAreaYZ.dragging || mouseAreaXZ.dragging property bool active: false readonly property bool hovering: mouseAreaYZ.hovering || mouseAreaXZ.hovering @@ -61,7 +61,6 @@ Model { _pointerPosPressed = mouseArea.mapPositionToScene(maskedPosition); var sp = targetNode.scenePosition; _targetStartPos = Qt.vector3d(sp.x, sp.y, sp.z); - dragging = true; pressed(mouseArea); } @@ -88,7 +87,6 @@ Model { return; released(mouseArea, calcRelativeDistance(mouseArea, scenePos)); - dragging = false; } MouseArea3D { diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarDraggable.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarDraggable.qml index 7bb1085e65c..bd4fcd388bf 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarDraggable.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarDraggable.qml @@ -34,7 +34,7 @@ Model { property alias color: gizmoMaterial.emissiveColor property alias priority: mouseArea.priority property Node targetNode: null - property bool dragging: false + property bool dragging: mouseArea.dragging property bool active: false readonly property bool hovering: mouseArea.hovering @@ -65,7 +65,6 @@ Model { _pointerPosPressed = mouseArea.mapPositionToScene(scenePos); var sp = targetNode.scenePosition; _targetStartPos = Qt.vector3d(sp.x, sp.y, sp.z); - dragging = true; pressed(mouseArea); } @@ -91,7 +90,6 @@ Model { return; released(mouseArea, calcRelativeDistance(mouseArea, scenePos)); - dragging = false; } MouseArea3D { diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/RotateRing.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/RotateRing.qml index 634eb017c9b..3d21f8fd6a3 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/RotateRing.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/RotateRing.qml @@ -33,7 +33,7 @@ Model { property View3D view3D property alias color: material.emissiveColor property Node targetNode: null - property bool dragging: false + property bool dragging: mouseAreaMain.dragging property bool active: false property alias hovering: mouseAreaMain.hovering property alias priority: mouseAreaMain.priority @@ -80,7 +80,6 @@ Model { _targetPosOnScreen = view3D.mapFrom3DScene(targetNode.scenePosition); _targetPosOnScreen.z = 0; _pointerPosPressed = Qt.vector3d(screenPos.x, screenPos.y, 0); - dragging = true; _trackBall = angle < 0.1; // Recreate vector so we don't follow the changes in targetNode.rotation @@ -108,7 +107,6 @@ Model { applyLocalRotation(screenPos); rotateCommit(); - dragging = false; currentAngle = 0; currentMousePos = screenPos; } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp index a1e25dea3a8..d571b24dcbe 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp @@ -123,6 +123,13 @@ void MouseArea3D::setGrabsMouse(bool grabsMouse) return; m_grabsMouse = grabsMouse; + + if (!m_grabsMouse && s_mouseGrab == this) { + setDragging(false); + setHovering(false); + s_mouseGrab = nullptr; + } + emit grabsMouseChanged(); } @@ -132,6 +139,13 @@ void MouseArea3D::setActive(bool active) return; m_active = active; + + if (!m_active && s_mouseGrab == this) { + setDragging(false); + setHovering(false); + s_mouseGrab = nullptr; + } + emit activeChanged(); }