diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2020-06-30 14:48:34 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2020-07-03 11:35:49 +0000 |
commit | fccc02de96861d2909bfae7078c65d4e10ec2497 (patch) | |
tree | 2987aa4845fa8a4899619baa142d906522e2ed29 /share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp | |
parent | 195690973e9e96e38052b170356647ca471d5eb2 (diff) |
QmlDesigner: Allow starting free drag on initial selection press
Changed object selection to be done on press instead of click, and
the initial press now also starts free drag of the selected object
after a short distance moved to prevent accidental drags.
Change-Id: I61656661cd734d167ef9f8db42d986f0e97402a3
Fixes: QDS-2376
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp')
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp index 89c33c2900..03ec0f56d9 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp @@ -512,6 +512,32 @@ double MouseArea3D::getRelativeScale(QQuick3DNode *node) const return (scenePos1 - scenePos2).length() / 100.; } +void MouseArea3D::forcePressEvent(double x, double y) +{ + m_forceCaptureNextPress = true; + + Qt::MouseButtons buttons; + Qt::KeyboardModifiers mods; + QMouseEvent event(QEvent::MouseButtonPress, QPointF(x, y), Qt::LeftButton, buttons, mods); + eventFilter(m_view3D, &event); +} + +void QmlDesigner::Internal::MouseArea3D::forceMoveEvent(double x, double y) +{ + Qt::MouseButtons buttons; + Qt::KeyboardModifiers mods; + QMouseEvent event(QEvent::MouseMove, QPointF(x, y), Qt::LeftButton, buttons, mods); + eventFilter(m_view3D, &event); +} + +void QmlDesigner::Internal::MouseArea3D::forceReleaseEvent(double x, double y) +{ + Qt::MouseButtons buttons; + Qt::KeyboardModifiers mods; + QMouseEvent event(QEvent::MouseButtonRelease, QPointF(x, y), Qt::LeftButton, buttons, mods); + eventFilter(m_view3D, &event); +} + QVector3D MouseArea3D::getMousePosInPlane(const MouseArea3D *helper, const QPointF &mousePosInView) const { @@ -535,7 +561,8 @@ QVector3D MouseArea3D::getMousePosInPlane(const MouseArea3D *helper, bool MouseArea3D::eventFilter(QObject *, QEvent *event) { if (!m_active || (m_grabsMouse && s_mouseGrab && s_mouseGrab != this - && (m_priority <= s_mouseGrab->m_priority || s_mouseGrab->m_dragging))) { + && (m_priority <= s_mouseGrab->m_priority || s_mouseGrab->m_dragging + || s_mouseGrab->m_forceCaptureNextPress))) { return false; } @@ -596,7 +623,8 @@ bool MouseArea3D::eventFilter(QObject *, QEvent *event) m_dragHelper->setScale(sceneScale()); } m_mousePosInPlane = getMousePosInPlane(m_dragHelper, mouseEvent->pos()); - if (mouseOnTopOfMouseArea(m_mousePosInPlane, mouseEvent->pos())) { + if (m_forceCaptureNextPress || mouseOnTopOfMouseArea(m_mousePosInPlane, mouseEvent->pos())) { + m_forceCaptureNextPress = false; setDragging(true); emit pressed(m_mousePosInPlane.toVector2D(), mouseEvent->pos(), pickAngle); if (m_grabsMouse) { |