diff options
Diffstat (limited to 'src/quick/util/qquickdeliveryagent.cpp')
-rw-r--r-- | src/quick/util/qquickdeliveryagent.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/quick/util/qquickdeliveryagent.cpp b/src/quick/util/qquickdeliveryagent.cpp index 2fd5cab9a2..332b6a8537 100644 --- a/src/quick/util/qquickdeliveryagent.cpp +++ b/src/quick/util/qquickdeliveryagent.cpp @@ -1518,9 +1518,12 @@ void QQuickDeliveryAgentPrivate::deliverPointerEvent(QPointerEvent *event) // updates get delivered here pretty directly, bypassing picking; but we need to // be able to map the 2D viewport coordinate to a 2D coordinate within // d->rootItem, a 2D scene that has been arbitrarily mapped onto a 3D object. + QVarLengthArray<QPointF, 16> originalScenePositions; if (sceneTransform) { + originalScenePositions.resize(event->pointCount()); for (int i = 0; i < event->pointCount(); ++i) { auto &mut = QMutableEventPoint::from(event->point(i)); + originalScenePositions[i] = mut.scenePosition(); mut.setScenePosition(sceneTransform->map(mut.scenePosition())); qCDebug(lcPtrLoc) << q << event->type() << mut.id() << "transformed scene pos" << mut.scenePosition(); } @@ -1570,6 +1573,10 @@ void QQuickDeliveryAgentPrivate::deliverPointerEvent(QPointerEvent *event) } eventsInDelivery.pop(); + if (sceneTransform) { + for (int i = 0; i < event->pointCount(); ++i) + QMutableEventPoint::from(event->point(i)).setScenePosition(originalScenePositions.at(i)); + } --pointerEventRecursionGuard; lastUngrabbed = nullptr; } |