aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2019-10-30 10:52:51 +0200
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2019-11-01 08:49:12 +0000
commit97788c457eed2bb7e97eadf87900f9bef9329e78 (patch)
treedd124e00e52168b36d9d19a23e465e1526a6a3fa /share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml
parentd4797587b12944ccb0880115dc550127e2a1470e (diff)
QmlDesigner: MoveGizmo improvements in 3D edit view
Mouse press and release are now properly handled by MouseArea3D. This fixes various issues: - No need to move the mouse after release for release to register. - Drag is no longer limited to the 3D edit window, though it is still limited to the screen. - Drag arrows no longer register start of drag if you click outside the arrow and then move the cursor over the arrow while holding the mouse button down. Also added the missing center ball to the MoveGizmo to allow free dragging along the camera plane. Change-Id: Iab55ae79f8af024534510e5fd29379532ac74025 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml')
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml151
1 files changed, 113 insertions, 38 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml
index ded8acc7d3..7ad5a2a011 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml
@@ -25,56 +25,131 @@
import QtQuick 2.0
import QtQuick3D 1.0
+import MouseArea3D 1.0
Node {
- id: arrows
+ id: moveGizmo
property View3D view3D
property bool highlightOnHover: false
property Node targetNode: null
- readonly property bool isDragging: arrowX.isDragging || arrowY.isDragging || arrowZ.isDragging
-
- scale: Qt.vector3d(5, 5, 5)
+ property bool globalOrientation: true
+ readonly property bool dragging: arrowX.dragging || arrowY.dragging || arrowZ.dragging
+ || centerMouseArea.dragging
signal positionCommit()
signal positionMove()
- Arrow {
- id: arrowX
- objectName: "Arrow X"
- rotation: Qt.vector3d(0, 0, -90)
- targetNode: arrows.targetNode
- color: highlightOnHover && hovering ? Qt.lighter(Qt.rgba(1, 0, 0, 1))
- : Qt.rgba(1, 0, 0, 1)
- view3D: arrows.view3D
-
- onPositionCommit: arrows.positionCommit()
- onPositionMove: arrows.positionMove()
- }
+ Node {
+ rotation: globalOrientation || !targetNode ? Qt.vector3d(0, 0, 0) : targetNode.sceneRotation
+
+ Arrow {
+ id: arrowX
+ objectName: "Arrow X"
+ rotation: Qt.vector3d(0, 0, -90)
+ targetNode: moveGizmo.targetNode
+ color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(1, 0, 0, 1))
+ : Qt.rgba(1, 0, 0, 1)
+ view3D: moveGizmo.view3D
+
+ onPositionCommit: moveGizmo.positionCommit()
+ onPositionMove: moveGizmo.positionMove()
+ }
+
+ Arrow {
+ id: arrowY
+ objectName: "Arrow Y"
+ rotation: Qt.vector3d(0, 0, 0)
+ targetNode: moveGizmo.targetNode
+ color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0, 1, 1))
+ : Qt.rgba(0, 0, 1, 1)
+ view3D: moveGizmo.view3D
+
+ onPositionCommit: moveGizmo.positionCommit()
+ onPositionMove: moveGizmo.positionMove()
+ }
+
+ Arrow {
+ id: arrowZ
+ objectName: "Arrow Z"
+ rotation: Qt.vector3d(90, 0, 0)
+ targetNode: moveGizmo.targetNode
+ color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0.6, 0, 1))
+ : Qt.rgba(0, 0.6, 0, 1)
+ view3D: moveGizmo.view3D
+
+ onPositionCommit: moveGizmo.positionCommit()
+ onPositionMove: moveGizmo.positionMove()
+ }
- Arrow {
- id: arrowY
- objectName: "Arrow Y"
- rotation: Qt.vector3d(0, 0, 0)
- targetNode: arrows.targetNode
- color: highlightOnHover && hovering ? Qt.lighter(Qt.rgba(0, 0, 1, 1))
- : Qt.rgba(0, 0, 1, 1)
- view3D: arrows.view3D
-
- onPositionCommit: arrows.positionCommit()
- onPositionMove: arrows.positionMove()
}
- Arrow {
- id: arrowZ
- objectName: "Arrow Z"
- rotation: Qt.vector3d(90, 0, 0)
- targetNode: arrows.targetNode
- color: highlightOnHover && hovering ? Qt.lighter(Qt.rgba(0, 0.6, 0, 1))
- : Qt.rgba(0, 0.6, 0, 1)
- view3D: arrows.view3D
-
- onPositionCommit: arrows.positionCommit()
- onPositionMove: arrows.positionMove()
+ Model {
+ id: centerBall
+
+ source: "#Sphere"
+ scale: Qt.vector3d(0.024, 0.024, 0.024)
+ materials: DefaultMaterial {
+ id: material
+ emissiveColor: highlightOnHover
+ && (centerMouseArea.hovering || centerMouseArea.dragging)
+ ? Qt.lighter(Qt.rgba(0.5, 0.5, 0.5, 1))
+ : Qt.rgba(0.5, 0.5, 0.5, 1)
+ lighting: DefaultMaterial.NoLighting
+ }
+
+ MouseArea3D {
+ id: centerMouseArea
+ view3D: moveGizmo.view3D
+ x: -60
+ y: -60
+ width: 120
+ height: 120
+ rotation: view3D.camera.rotation
+ grabsMouse: moveGizmo.targetNode
+ priority: 1
+
+ property var _pointerPosPressed
+ property var _targetStartPos
+
+ function posInParent(pointerPosition)
+ {
+ var scenePointerPos = mapPositionToScene(pointerPosition);
+ var sceneRelativeDistance = Qt.vector3d(
+ scenePointerPos.x - _pointerPosPressed.x,
+ scenePointerPos.y - _pointerPosPressed.y,
+ scenePointerPos.z - _pointerPosPressed.z);
+
+ var newScenePos = Qt.vector3d(
+ _targetStartPos.x + sceneRelativeDistance.x,
+ _targetStartPos.y + sceneRelativeDistance.y,
+ _targetStartPos.z + sceneRelativeDistance.z);
+
+ return moveGizmo.targetNode.parent.mapPositionFromScene(newScenePos);
+ }
+
+ onPressed: {
+ if (!moveGizmo.targetNode)
+ return;
+
+ _pointerPosPressed = mapPositionToScene(pointerPosition);
+ var sp = moveGizmo.targetNode.scenePosition;
+ _targetStartPos = Qt.vector3d(sp.x, sp.y, sp.z);
+ }
+ onDragged: {
+ if (!moveGizmo.targetNode)
+ return;
+
+ moveGizmo.targetNode.position = posInParent(pointerPosition);
+ moveGizmo.positionMove();
+ }
+ onReleased: {
+ if (!moveGizmo.targetNode)
+ return;
+
+ moveGizmo.targetNode.position = posInParent(pointerPosition);
+ moveGizmo.positionCommit();
+ }
+ }
}
}