diff options
| author | Evgen Pervenenko <yauheni.pervenenka@viber.com> | 2022-10-11 12:52:01 +0300 |
|---|---|---|
| committer | Evgen Pervenenko <yauheni.pervenenka@viber.com> | 2022-11-08 10:29:10 +0300 |
| commit | b9ca19b1b541b8f3535d28cc7525328ff9b77b1f (patch) | |
| tree | fd0822e437e0fc232427c4cd3bce62d5278450d3 /src/quick/items/qquicklistview.cpp | |
| parent | 649151bdcc4c2e747224d4405d3b6bb13525161d (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
Pick-to: 6.2 6.4
Change-Id: I825033c958602032f699f2c207b0a4312dd96c8c
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
Diffstat (limited to 'src/quick/items/qquicklistview.cpp')
| -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 e3a05bb237..293d8acc7c 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 { |
