diff options
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 21 | ||||
-rw-r--r-- | src/quick/items/qquickflickable_p.h | 13 | ||||
-rw-r--r-- | src/quick/items/qquickitemsmodule.cpp | 1 | ||||
-rw-r--r-- | tests/auto/quick/qquickflickable/tst_qquickflickable.cpp | 9 |
4 files changed, 34 insertions, 10 deletions
diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index de3f835dc0..83d383d7c0 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -509,7 +509,8 @@ static bool fuzzyLessThanOrEqualTo(qreal a, qreal b) void QQuickFlickablePrivate::updateBeginningEnd() { Q_Q(QQuickFlickable); - bool atBoundaryChange = false; + bool atXBeginningChange = false, atXEndChange = false; + bool atYBeginningChange = false, atYEndChange = false; // Vertical const qreal maxyextent = -q->maxYExtent(); @@ -520,11 +521,11 @@ void QQuickFlickablePrivate::updateBeginningEnd() if (atBeginning != vData.atBeginning) { vData.atBeginning = atBeginning; - atBoundaryChange = true; + atYBeginningChange = true; } if (atEnd != vData.atEnd) { vData.atEnd = atEnd; - atBoundaryChange = true; + atYEndChange = true; } // Horizontal @@ -536,11 +537,11 @@ void QQuickFlickablePrivate::updateBeginningEnd() if (atBeginning != hData.atBeginning) { hData.atBeginning = atBeginning; - atBoundaryChange = true; + atXBeginningChange = true; } if (atEnd != hData.atEnd) { hData.atEnd = atEnd; - atBoundaryChange = true; + atXEndChange = true; } if (vData.extentsChanged) { @@ -561,8 +562,16 @@ void QQuickFlickablePrivate::updateBeginningEnd() } } - if (atBoundaryChange) + if (atXEndChange || atYEndChange || atXBeginningChange || atYBeginningChange) emit q->isAtBoundaryChanged(); + if (atXEndChange) + emit q->atXEndChanged(); + if (atXBeginningChange) + emit q->atXBeginningChanged(); + if (atYEndChange) + emit q->atYEndChanged(); + if (atYBeginningChange) + emit q->atYBeginningChanged(); if (visibleArea) visibleArea->updateVisible(); diff --git a/src/quick/items/qquickflickable_p.h b/src/quick/items/qquickflickable_p.h index 45921c8b86..1bd8fc1020 100644 --- a/src/quick/items/qquickflickable_p.h +++ b/src/quick/items/qquickflickable_p.h @@ -98,10 +98,10 @@ class Q_QUICK_PRIVATE_EXPORT QQuickFlickable : public QQuickItem Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged) Q_PROPERTY(int pressDelay READ pressDelay WRITE setPressDelay NOTIFY pressDelayChanged) - Q_PROPERTY(bool atXEnd READ isAtXEnd NOTIFY isAtBoundaryChanged) - Q_PROPERTY(bool atYEnd READ isAtYEnd NOTIFY isAtBoundaryChanged) - Q_PROPERTY(bool atXBeginning READ isAtXBeginning NOTIFY isAtBoundaryChanged) - Q_PROPERTY(bool atYBeginning READ isAtYBeginning NOTIFY isAtBoundaryChanged) + Q_PROPERTY(bool atXEnd READ isAtXEnd NOTIFY atXEndChanged) + Q_PROPERTY(bool atYEnd READ isAtYEnd NOTIFY atYEndChanged) + Q_PROPERTY(bool atXBeginning READ isAtXBeginning NOTIFY atXBeginningChanged) + Q_PROPERTY(bool atYBeginning READ isAtYBeginning NOTIFY atYBeginningChanged) Q_PROPERTY(QQuickFlickableVisibleArea *visibleArea READ visibleArea CONSTANT) @@ -267,6 +267,11 @@ Q_SIGNALS: Q_REVISION(9) void horizontalOvershootChanged(); Q_REVISION(9) void verticalOvershootChanged(); + Q_REVISION(12) void atXEndChanged(); + Q_REVISION(12) void atYEndChanged(); + Q_REVISION(12) void atXBeginningChanged(); + Q_REVISION(12) void atYBeginningChanged(); + protected: bool childMouseEventFilter(QQuickItem *, QEvent *) override; void mousePressEvent(QMouseEvent *event) override; diff --git a/src/quick/items/qquickitemsmodule.cpp b/src/quick/items/qquickitemsmodule.cpp index 3a42766667..c8550af7cc 100644 --- a/src/quick/items/qquickitemsmodule.cpp +++ b/src/quick/items/qquickitemsmodule.cpp @@ -431,6 +431,7 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor) qmlRegisterType<QQuickAnimatedImage, 11>(uri, 2, 11,"AnimatedImage"); #endif qmlRegisterType<QQuickItem, 11>(uri, 2, 11,"Item"); + qmlRegisterType<QQuickFlickable, 12>(uri, 2, 12, "Flickable"); // classes related to Input Handlers which are newly exposed since 5.12 qmlRegisterUncreatableType<QQuickPointerEvent>(uri, 2, 12, "PointerEvent", diff --git a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp index ba266824e6..965ef6987a 100644 --- a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp +++ b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp @@ -1919,6 +1919,10 @@ void tst_qquickflickable::stopAtBounds() else QCOMPARE(transpose ? flickable->isAtYBeginning() : flickable->isAtXBeginning(), true); + QSignalSpy atXBeginningChangedSpy(flickable, &QQuickFlickable::atXBeginningChanged); + QSignalSpy atYBeginningChangedSpy(flickable, &QQuickFlickable::atYBeginningChanged); + QSignalSpy atXEndChangedSpy(flickable, &QQuickFlickable::atXEndChanged); + QSignalSpy atYEndChangedSpy(flickable, &QQuickFlickable::atYEndChanged); // drag back towards boundary for (int i = 0; i < 24; ++i) { axis += invert ? threshold / 3 : -threshold / 3; @@ -1930,6 +1934,11 @@ void tst_qquickflickable::stopAtBounds() else QCOMPARE(transpose ? flickable->isAtYBeginning() : flickable->isAtXBeginning(), false); + QCOMPARE(atXBeginningChangedSpy.count(), (!transpose && !invert) ? 1 : 0); + QCOMPARE(atYBeginningChangedSpy.count(), ( transpose && !invert) ? 1 : 0); + QCOMPARE(atXEndChangedSpy.count(), (!transpose && invert) ? 1 : 0); + QCOMPARE(atYEndChangedSpy.count(), ( transpose && invert) ? 1 : 0); + // Drag away from the aligned boundary again. // None of the mouse movements will position the view at the boundary exactly, // but the view should end up aligned on the boundary |