diff options
author | Aleix Pol <aleixpol@kde.org> | 2017-11-17 16:47:14 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@qt.io> | 2018-07-31 13:11:04 +0000 |
commit | dc7f59d5025b977117e6a61e30c892d0cad7dff7 (patch) | |
tree | 1bfcb2133434dd217c67573b1df20818c48631eb /src/quick/items | |
parent | f70a25aecb2415d33b76b95d607f7e303c8db0a0 (diff) |
Increase fine-grained signals for some properties in Flickable
Flickable.at[X/Y][Beginning/End] were being always notified of changes
at bulk. This is can be harmful in performance of QML applications that
will trigger change requests on the program whenever a property is
modified.
This introduces separate signals so it's not a problem anymore.
Change-Id: I729852df665ec34f532812dd0a45507d053d624c
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Diffstat (limited to 'src/quick/items')
-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 |
3 files changed, 25 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", |