From 50924bd8557db9a398f3c1ccdd6996d968658b23 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Tue, 13 Mar 2018 19:50:17 -0500 Subject: Improve interaction between snapping and sections * Use velocity to prefer snapping in the active direction. * Calculate snap based on where the item is, rather than where the section is. Change-Id: I2531501dbe0a58f26f20bc3e719e435185e047a5 Task-number: QTBUG-67051 Reviewed-by: Mitch Curtis --- .../quick/qquicklistview/tst_qquicklistview.cpp | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'tests/auto/quick/qquicklistview/tst_qquicklistview.cpp') diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 2574eb9c6c..ae02352293 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -132,6 +132,8 @@ private slots: void sectionPropertyChange(); void sectionDelegateChange(); void sectionsItemInsertion(); + void sectionsSnap_data(); + void sectionsSnap(); void cacheBuffer(); void positionViewAtBeginningEnd(); void positionViewAtIndex(); @@ -2667,6 +2669,62 @@ void tst_QQuickListView::sectionsItemInsertion() } } +void tst_QQuickListView::sectionsSnap_data() +{ + QTest::addColumn("snapMode"); + QTest::addColumn("point"); + QTest::addColumn("duration"); + + QTest::newRow("drag") << QQuickListView::NoSnap << QPoint(100, 45) << 500; + QTest::newRow("flick") << QQuickListView::SnapOneItem << QPoint(100, 75) << 50; +} + +void tst_QQuickListView::sectionsSnap() +{ + QFETCH(QQuickListView::SnapMode, snapMode); + QFETCH(QPoint, point); + QFETCH(int, duration); + + QScopedPointer window(createView()); + window->setSource(testFileUrl("sectionSnapping.qml")); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); + + QQuickListView *listview = qobject_cast(window->rootObject()); + QTRY_VERIFY(listview != nullptr); + listview->setSnapMode(snapMode); + + QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); + QTRY_COMPARE(listview->currentIndex(), 0); + QCOMPARE(listview->contentY(), qreal(-50)); + + // move down + flick(window.data(), QPoint(100, 100), point, duration); + QTRY_VERIFY(!listview->isMovingVertically()); + QCOMPARE(listview->contentY(), qreal(0)); + + flick(window.data(), QPoint(100, 100), point, duration); + QTRY_VERIFY(!listview->isMovingVertically()); + QCOMPARE(listview->contentY(), qreal(50)); + + flick(window.data(), QPoint(100, 100), point, duration); + QTRY_VERIFY(!listview->isMovingVertically()); + QCOMPARE(listview->contentY(), qreal(150)); + + // move back up + flick(window.data(), point, QPoint(100, 100), duration); + QTRY_VERIFY(!listview->isMovingVertically()); + QCOMPARE(listview->contentY(), qreal(50)); + + flick(window.data(), point, QPoint(100, 100), duration); + QTRY_VERIFY(!listview->isMovingVertically()); + QCOMPARE(listview->contentY(), qreal(0)); + + flick(window.data(), point, QPoint(100, 100), duration); + QTRY_VERIFY(!listview->isMovingVertically()); + QCOMPARE(listview->contentY(), qreal(-50)); +} + void tst_QQuickListView::currentIndex_delayedItemCreation() { QFETCH(bool, setCurrentToZero); -- cgit v1.2.3