aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWang Chuan <ouchuanm@outlook.com>2019-05-25 15:10:03 +0800
committerouchuan <ouchuanm@outlook.com>2019-05-29 23:13:59 +0800
commit8068e7b98cde09565efe27585b84e120f9c5ea99 (patch)
tree4439a84015ad530920576e79ac3b6ed242f76737
parent75895afd7d2b8b6a82838600aabe24f5bb5e4c79 (diff)
QQuickMouseArea: synchronize relative position after dragging
[ChangeLog][QtQuick][QQuickMouseArea] mouseX and mouseY will now be synchronized after dragging the target item Fixes: QTBUG-75993 Change-Id: I0b56f6bd494791f9e2fe55a0cf059a7bad2d63dc Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
-rw-r--r--src/quick/items/qquickmousearea.cpp4
-rw-r--r--tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp14
2 files changed, 15 insertions, 3 deletions
diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp
index 53a5e5df1c..bce7ec718b 100644
--- a/src/quick/items/qquickmousearea.cpp
+++ b/src/quick/items/qquickmousearea.cpp
@@ -761,8 +761,10 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event)
QPointF targetPos = d->drag->target()->position();
- if (d->drag->active())
+ if (d->drag->active()) {
d->drag->target()->setPosition(boundedDragPos);
+ d->lastPos = d->lastScenePos - mapToScene(position());
+ }
bool dragOverThresholdX = QQuickWindowPrivate::dragOverThreshold(dragPos.x() - startPos.x(),
Qt::XAxis, event, d->drag->threshold());
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
index 52d1458a53..4215017db3 100644
--- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
+++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
@@ -393,10 +393,20 @@ void tst_QQuickMouseArea::dragging()
QTRY_COMPARE(blackRect->x(), 61.0);
QCOMPARE(blackRect->y(), 61.0);
+ qreal relativeX = mouseRegion->mouseX();
+ qreal relativeY = mouseRegion->mouseY();
+ for (int i = 0; i < 20; i++) {
+ p += QPoint(1, 1);
+ QTest::mouseMove(&window, p);
+ }
+ QTRY_VERIFY(drag->active());
+ QTRY_COMPARE(mouseRegion->mouseX(), relativeX);
+ QCOMPARE(mouseRegion->mouseY(), relativeY);
+
QTest::mouseRelease(&window, button, Qt::NoModifier, p);
QTRY_VERIFY(!drag->active());
- QTRY_COMPARE(blackRect->x(), 61.0);
- QCOMPARE(blackRect->y(), 61.0);
+ QTRY_COMPARE(blackRect->x(), 81.0);
+ QCOMPARE(blackRect->y(), 81.0);
}
void tst_QQuickMouseArea::dragSmoothed()