forked from qt-creator/qt-creator
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 <mahmoud.badri@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -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 {
|
||||
|
@@ -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 {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user