diff options
author | Evgen Pervenenko <yauheni.pervenenka@viber.com> | 2022-10-11 12:52:01 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-11-09 08:50:47 +0000 |
commit | c25f5b4c55d6dd7ad8a8b37317b9a7db194a7d47 (patch) | |
tree | 8f24644d2d89c5e86fe9346b7b118717a03042f7 /src | |
parent | 0ac01b27ef93c9b59aaa0a9f1676a97adafffef6 (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.cpp | 16 |
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 { |