aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2020-11-16 17:06:51 +0100
committerJarek Kobus <jaroslaw.kobus@qt.io>2020-11-17 08:42:57 +0000
commitdf9d1414b836c93e97b4e12b90c4bf981b506467 (patch)
tree4be9619fa7a6893cf9ad71f5b64171213fb10550
parent01d509a10050a29ead723c3af3161c941b71b6f2 (diff)
Don't cast QHoverEvent into QMouseEvent
Such a cast rely on the fact that some internal data of both classes must match. Qt doesn't guarantee it. Change-Id: I5c29af98e320b72b599c059a2827eb2e7d3843da Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp
index 1495bc4ea5..1853363287 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp
@@ -838,6 +838,19 @@ QVector3D MouseArea3D::getMousePosInPlane(const MouseArea3D *helper,
return sceneTrans.inverted().transform(intersectGlobalPos).toVec3();
}
+static QPoint getPosFromMoveEvent(QEvent *event)
+{
+ switch (event->type()) {
+ case QEvent::MouseMove:
+ return static_cast<QMouseEvent *>(event)->pos();
+ case QEvent::HoverMove:
+ return static_cast<QHoverEvent *>(event)->pos();
+ default:
+ break;
+ }
+ return {};
+}
+
bool MouseArea3D::eventFilter(QObject *, QEvent *event)
{
if (!m_active || (m_grabsMouse && s_mouseGrab && s_mouseGrab != this
@@ -951,10 +964,9 @@ bool MouseArea3D::eventFilter(QObject *, QEvent *event)
}
case QEvent::MouseMove:
case QEvent::HoverMove: {
- auto const mouseEvent = static_cast<QMouseEvent *>(event);
- const QVector3D mousePosInPlane = getMousePosInPlane(m_dragging ? m_dragHelper : this,
- mouseEvent->pos());
- const bool hasMouse = mouseOnTopOfMouseArea(mousePosInPlane, mouseEvent->pos());
+ const QPoint pos = getPosFromMoveEvent(event);
+ const QVector3D mousePosInPlane = getMousePosInPlane(m_dragging ? m_dragHelper : this, pos);
+ const bool hasMouse = mouseOnTopOfMouseArea(mousePosInPlane, pos);
setHovering(hasMouse);
@@ -970,7 +982,7 @@ bool MouseArea3D::eventFilter(QObject *, QEvent *event)
if (m_dragging && (m_circlePickArea.y() > 0. || !qFuzzyCompare(mousePosInPlane.z(), -1))) {
m_mousePosInPlane = mousePosInPlane;
- emit dragged(mousePosInPlane.toVector2D(), mouseEvent->pos());
+ emit dragged(mousePosInPlane.toVector2D(), pos);
}
break;