From cb86525df6e4721cd150dea2a2f93d1bf54f478f Mon Sep 17 00:00:00 2001 From: Adriano Rezende Date: Sun, 26 Feb 2012 17:26:49 +0100 Subject: Adjust Flickable autotest to check mouse events with transformation Tests mouse events with graphical transformations applied to the element. Change-Id: I767a40ca0d5ed748bcb27ad23212ddbc22272fc5 Reviewed-by: Frederik Gladhorn --- .../qquickflickable/data/transformedFlickable.qml | 43 +++++++++++++++++++ .../quick/qquickflickable/tst_qquickflickable.cpp | 48 ++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 tests/auto/quick/qquickflickable/data/transformedFlickable.qml (limited to 'tests/auto') diff --git a/tests/auto/quick/qquickflickable/data/transformedFlickable.qml b/tests/auto/quick/qquickflickable/data/transformedFlickable.qml new file mode 100644 index 0000000000..ed5b0ae8c5 --- /dev/null +++ b/tests/auto/quick/qquickflickable/data/transformedFlickable.qml @@ -0,0 +1,43 @@ +import QtQuick 2.0 + +Rectangle { + width: 400 + height: 400 + + Rectangle { + x: 100 + y: 100 + width: 200 + height: 200 + rotation: 45 + + Rectangle { + scale: 0.5 + color: "#888888" + anchors.fill: parent + + Flickable { + id: flickable + contentHeight: 300 + anchors.fill: parent + objectName: "flickable" + + property alias itemPressed: mouseArea.pressed + + Rectangle { + x: 50 + y: 50 + width: 100 + height: 100 + scale: 0.4 + color: "red" + + MouseArea { + id: mouseArea + anchors.fill: parent + } + } + } + } + } +} diff --git a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp index 242f639ee2..90f4b6c311 100644 --- a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp +++ b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include #include +#include #include #include #include @@ -86,6 +87,7 @@ private slots: void flickVelocity(); void margins(); void cancelOnMouseGrab(); + void clickAndDragWhenTransformed(); private: QQmlEngine engine; @@ -1133,6 +1135,52 @@ void tst_qquickflickable::cancelOnMouseGrab() QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(50, 10)); } +void tst_qquickflickable::clickAndDragWhenTransformed() +{ + QQuickView *canvas = new QQuickView; + canvas->setSource(testFileUrl("transformedFlickable.qml")); + canvas->show(); + canvas->requestActivateWindow(); + QTest::qWaitForWindowShown(canvas); + QVERIFY(canvas->rootObject() != 0); + + QQuickFlickable *flickable = canvas->rootObject()->findChild("flickable"); + QVERIFY(flickable != 0); + + // click outside child rect + QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(190, 190)); + QTest::qWait(10); + QCOMPARE(flickable->property("itemPressed").toBool(), false); + QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(190, 190)); + + // click inside child rect + QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(200, 200)); + QTest::qWait(10); + QCOMPARE(flickable->property("itemPressed").toBool(), true); + QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(200, 200)); + + const int threshold = qApp->styleHints()->startDragDistance(); + + // drag outside bounds + QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(160, 160)); + QTest::qWait(10); + QTest::mouseMove(canvas, QPoint(160 + threshold * 2, 160)); + QTest::mouseMove(canvas, QPoint(160 + threshold * 3, 160)); + QCOMPARE(flickable->isDragging(), false); + QCOMPARE(flickable->property("itemPressed").toBool(), false); + QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(180, 160)); + + // drag inside bounds + QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(200, 140)); + QTest::qWait(10); + QTest::mouseMove(canvas, QPoint(200 + threshold * 2, 140)); + QTest::mouseMove(canvas, QPoint(200 + threshold * 3, 140)); + QCOMPARE(flickable->isDragging(), true); + QCOMPARE(flickable->property("itemPressed").toBool(), false); + QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(220, 140)); + + delete canvas; +} QTEST_MAIN(tst_qquickflickable) -- cgit v1.2.3