aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2020-06-30 14:48:34 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2020-07-03 11:35:49 +0000
commitfccc02de96861d2909bfae7078c65d4e10ec2497 (patch)
tree2987aa4845fa8a4899619baa142d906522e2ed29 /share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp
parent195690973e9e96e38052b170356647ca471d5eb2 (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.cpp32
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) {