aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickmousearea
diff options
context:
space:
mode:
authorAlberto Mardegan <info@mardy.it>2012-07-05 18:10:34 +0400
committerQt by Nokia <qt-info@nokia.com>2012-07-16 02:30:52 +0200
commit80dd824864df17bb1293a4438325f2b20306861b (patch)
tree0dafc29e090daf32a8d769c172aa00d1326d8957 /tests/auto/quick/qquickmousearea
parentc87df269c0590f5d0b9837d539a5c119e401b750 (diff)
MouseArea: use current value of drag.axis
If the drag.axis is changed while a drag operation is in progress, put it into action immediately. This allows, for example, start a dragging operation out of an item in a scrollable ListView to anywhere on the screen. See the linked bug number for an example. Task-number: QTBUG-26440 Change-Id: Id4219d44d1066dd962319086ac1f2a2a75bb2525 Reviewed-by: Damian Jansen <damian.jansen@nokia.com> Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests/auto/quick/qquickmousearea')
-rw-r--r--tests/auto/quick/qquickmousearea/data/changeAxis.qml22
-rw-r--r--tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp63
2 files changed, 85 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickmousearea/data/changeAxis.qml b/tests/auto/quick/qquickmousearea/data/changeAxis.qml
new file mode 100644
index 0000000000..cf791df31d
--- /dev/null
+++ b/tests/auto/quick/qquickmousearea/data/changeAxis.qml
@@ -0,0 +1,22 @@
+import QtQuick 2.0
+Rectangle {
+ id: whiteRect
+ width: 200
+ height: 200
+ color: "white"
+ Rectangle {
+ id: blackRect
+ objectName: "blackrect"
+ color: "black"
+ y: 50
+ x: 50
+ width: 100
+ height: 100
+ MouseArea {
+ objectName: "mouseregion"
+ anchors.fill: parent
+ drag.target: blackRect
+ drag.axis: blackRect.x <= 75 ? Drag.XandYAxis : Drag.YAxis
+ }
+ }
+ }
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
index 7d42eb2261..b2ef1909df 100644
--- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
+++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
@@ -84,6 +84,7 @@ private slots:
void transformedMouseArea();
void pressedMultipleButtons_data();
void pressedMultipleButtons();
+ void changeAxis();
private:
void acceptedButton_data();
@@ -1303,6 +1304,68 @@ void tst_QQuickMouseArea::pressedMultipleButtons()
delete canvas;
}
+void tst_QQuickMouseArea::changeAxis()
+{
+ QQuickView *canvas = createView();
+
+ canvas->setSource(testFileUrl("changeAxis.qml"));
+ canvas->show();
+ canvas->requestActivateWindow();
+ QTRY_VERIFY(canvas->rootObject() != 0);
+
+ QQuickMouseArea *mouseRegion = canvas->rootObject()->findChild<QQuickMouseArea*>("mouseregion");
+ QQuickDrag *drag = mouseRegion->drag();
+ QVERIFY(mouseRegion != 0);
+ QVERIFY(drag != 0);
+
+ mouseRegion->setAcceptedButtons(Qt::LeftButton);
+
+ // target
+ QQuickItem *blackRect = canvas->rootObject()->findChild<QQuickItem*>("blackrect");
+ QVERIFY(blackRect != 0);
+ QVERIFY(blackRect == drag->target());
+
+ QVERIFY(!drag->active());
+
+ // Start a diagonal drag
+ QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(100, 100));
+
+ QVERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 50.0);
+ QCOMPARE(blackRect->y(), 50.0);
+
+ QTest::mouseMove(canvas, QPoint(111, 111));
+ QTest::qWait(50);
+ QTest::mouseMove(canvas, QPoint(122, 122));
+
+ QTRY_VERIFY(drag->active());
+ QCOMPARE(blackRect->x(), 72.0);
+ QCOMPARE(blackRect->y(), 72.0);
+ QCOMPARE(drag->axis(), QQuickDrag::XandYAxis);
+
+ /* When blackRect.x becomes bigger than 75, the drag axis is changed to
+ * Drag.YAxis by the QML code. Verify that this happens, and that the drag
+ * movement is effectively constrained to the Y axis. */
+ QTest::mouseMove(canvas, QPoint(133, 133));
+
+ QTRY_COMPARE(blackRect->x(), 83.0);
+ QTRY_COMPARE(blackRect->y(), 83.0);
+ QTRY_COMPARE(drag->axis(), QQuickDrag::YAxis);
+
+ QTest::mouseMove(canvas, QPoint(144, 144));
+
+ QTRY_COMPARE(blackRect->y(), 94.0);
+ QCOMPARE(blackRect->x(), 83.0);
+
+ QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(144, 144));
+
+ QTRY_VERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 83.0);
+ QCOMPARE(blackRect->y(), 94.0);
+
+ delete canvas;
+}
+
QTEST_MAIN(tst_QQuickMouseArea)
#include "tst_qquickmousearea.moc"