aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEvgen Pervenenko <yauheni.pervenenka@viber.com>2022-10-11 12:52:01 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-11-09 08:50:47 +0000
commitc25f5b4c55d6dd7ad8a8b37317b9a7db194a7d47 (patch)
tree8f24644d2d89c5e86fe9346b7b118717a03042f7 /src
parent0ac01b27ef93c9b59aaa0a9f1676a97adafffef6 (diff)
ListView: Snap one item mode fix next item calculation
Details: Move value for velocity less than 0 should consider size of item, for getting correct position for next item, bias should not be considered with press position when QWheelEvent::phase() gives us NoScrollPhase because it is possible to use value saved last time (last wheelevent with press position) Fixes: QTBUG-98979 Change-Id: I825033c958602032f699f2c207b0a4312dd96c8c Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io> (cherry picked from commit b9ca19b1b541b8f3535d28cc7525328ff9b77b1f) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquicklistview.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index 9ea4624997..5f9bd84ada 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -1824,15 +1824,15 @@ bool QQuickListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExte
return QQuickItemViewPrivate::flick(data, minExtent, maxExtent, vSize, fixupCallback, velocity);
}
qreal maxDistance = 0;
- qreal dataValue = isContentFlowReversed() ? -data.move.value()+size() : data.move.value();
+ const qreal dataValue =
+ isContentFlowReversed() ? -data.move.value() + size() : data.move.value();
// -ve velocity means list is moving up/left
if (velocity > 0) {
if (data.move.value() < minExtent) {
if (snapMode == QQuickListView::SnapOneItem && !hData.flicking && !vData.flicking) {
- // if we've been dragged < averageSize/2 then bias towards the next item
- qreal dist = data.move.value() - data.pressPos;
- qreal bias = dist < averageSize/2 ? averageSize/2 : 0;
+ // averageSize/2 + 1 - next item
+ qreal bias = averageSize / 2 + 1 - (pressed ? data.pressPos : 0);
if (isContentFlowReversed())
bias = -bias;
data.flickTarget = -snapPosAt(-(dataValue - highlightRangeStart) - bias) + highlightRangeStart;
@@ -1847,12 +1847,12 @@ bool QQuickListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExte
} else {
if (data.move.value() > maxExtent) {
if (snapMode == QQuickListView::SnapOneItem && !hData.flicking && !vData.flicking) {
- // if we've been dragged < averageSize/2 then bias towards the next item
- qreal dist = data.move.value() - data.pressPos;
- qreal bias = -dist < averageSize/2 ? averageSize/2 : 0;
+ // averageSize/2 + 1 - next item
+ qreal bias = averageSize / 2 + 1 - (pressed ? data.pressPos : 0);
if (isContentFlowReversed())
bias = -bias;
- data.flickTarget = -snapPosAt(-(dataValue - highlightRangeStart) + bias) + highlightRangeStart;
+ data.flickTarget =
+ -snapPosAt(-(dataValue - highlightRangeStart) + bias) + highlightRangeStart;
maxDistance = qAbs(data.flickTarget - data.move.value());
velocity = -maxVelocity;
} else {