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/qquickflickable.cpp | |
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/qquickflickable.cpp')
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 21 |
1 files changed, 15 insertions, 6 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(); |