From b44194ecc62e7c2d51a90bad17a41451319f7c1f Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Thu, 21 Apr 2016 11:31:26 +0200 Subject: Add Drawer::dragMargin Allows controlling "sensitivity" of the edge drag, or disabling (dragMargin<=0) the entire drag operation if preferred. Change-Id: Icfe6f186704ca7f11abc66abeec603f29345af98 Task-number: QTBUG-52730 Reviewed-by: BogDan Vatra --- tests/auto/controls/data/tst_drawer.qml | 1 + tests/auto/drawer/tst_drawer.cpp | 60 +++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) (limited to 'tests/auto') diff --git a/tests/auto/controls/data/tst_drawer.qml b/tests/auto/controls/data/tst_drawer.qml index 83e04187..72bf6e76 100644 --- a/tests/auto/controls/data/tst_drawer.qml +++ b/tests/auto/controls/data/tst_drawer.qml @@ -59,6 +59,7 @@ TestCase { var control = drawer.createObject(testCase) compare(control.edge, Qt.LeftEdge) compare(control.position, 0.0) + compare(control.dragMargin, Qt.styleHints.startDragDistance) control.destroy() } diff --git a/tests/auto/drawer/tst_drawer.cpp b/tests/auto/drawer/tst_drawer.cpp index 557064a6..6a19af91 100644 --- a/tests/auto/drawer/tst_drawer.cpp +++ b/tests/auto/drawer/tst_drawer.cpp @@ -39,6 +39,8 @@ #include "../shared/util.h" #include "../shared/visualtestutil.h" +#include +#include #include #include @@ -51,6 +53,9 @@ class tst_Drawer : public QQmlDataTest private slots: void position_data(); void position(); + + void dragMargin_data(); + void dragMargin(); }; void tst_Drawer::position_data() @@ -90,6 +95,61 @@ void tst_Drawer::position() QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, to); } +void tst_Drawer::dragMargin_data() +{ + QTest::addColumn("edge"); + QTest::addColumn("dragMargin"); + QTest::addColumn("dragFromLeft"); + QTest::addColumn("dragFromRight"); + + QTest::newRow("left:0") << Qt::LeftEdge << qreal(0) << qreal(0) << qreal(0); + QTest::newRow("left:-1") << Qt::LeftEdge << qreal(-1) << qreal(0) << qreal(0); + QTest::newRow("left:startDragDistance") << Qt::LeftEdge << qreal(QGuiApplication::styleHints()->startDragDistance()) << qreal(0.25) << qreal(0); + QTest::newRow("left:startDragDistance*2") << Qt::LeftEdge << qreal(QGuiApplication::styleHints()->startDragDistance() * 2) << qreal(0.25) << qreal(0); + + QTest::newRow("right:0") << Qt::RightEdge << qreal(0) << qreal(0) << qreal(0); + QTest::newRow("right:-1") << Qt::RightEdge << qreal(-1) << qreal(0) << qreal(0); + QTest::newRow("right:startDragDistance") << Qt::RightEdge << qreal(QGuiApplication::styleHints()->startDragDistance()) << qreal(0) << qreal(0.75); + QTest::newRow("right:startDragDistance*2") << Qt::RightEdge << qreal(QGuiApplication::styleHints()->startDragDistance() * 2) << qreal(0) << qreal(0.75); +} + +void tst_Drawer::dragMargin() +{ + QFETCH(Qt::Edge, edge); + QFETCH(qreal, dragMargin); + QFETCH(qreal, dragFromLeft); + QFETCH(qreal, dragFromRight); + + QQuickApplicationHelper helper(this, QStringLiteral("applicationwindow.qml")); + + QQuickApplicationWindow *window = helper.window; + window->show(); + window->requestActivate(); + QVERIFY(QTest::qWaitForWindowActive(window)); + + QQuickDrawer *drawer = helper.window->property("drawer").value(); + QVERIFY(drawer); + drawer->setEdge(edge); + drawer->setDragMargin(dragMargin); + + // drag from the left + int leftX = qMax(0, dragMargin); + QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(leftX, drawer->height() / 2)); + QTest::mouseMove(window, QPoint(drawer->width() * 0.25, drawer->height() / 2)); + QCOMPARE(drawer->position(), dragFromLeft); + QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(drawer->width() * 0.25, drawer->height() / 2)); + + drawer->close(); + QTRY_COMPARE(drawer->position(), qreal(0.0)); + + // drag from the right + int rightX = qMin(window->width() - 1, window->width() - dragMargin); + QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(rightX, drawer->height() / 2)); + QTest::mouseMove(window, QPoint(window->width() - drawer->width() * 0.75, drawer->height() / 2)); + QCOMPARE(drawer->position(), dragFromRight); + QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(window->width() - drawer->width() * 0.75, drawer->height() / 2)); +} + QTEST_MAIN(tst_Drawer) #include "tst_drawer.moc" -- cgit v1.2.3