diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index 99a0c503a5..5ba5908ccc 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -1172,27 +1172,31 @@ void QQuickFlickablePrivate::handleMouseReleaseEvent(QMouseEvent *event) flickBoost = canBoost ? qBound(1.0, flickBoost+0.25, QML_FLICK_MULTIFLICK_MAXBOOST) : 1.0; - bool flickedV = false; + bool flickedVertically = false; vVelocity *= flickBoost; - if (q->yflick() && qAbs(vVelocity) > MinimumFlickVelocity && qAbs(event->localPos().y() - pressPos.y()) > FlickThreshold) { + bool isVerticalFlickAllowed = q->yflick() && qAbs(vVelocity) > MinimumFlickVelocity && qAbs(event->localPos().y() - pressPos.y()) > FlickThreshold; + if (isVerticalFlickAllowed) { velocityTimeline.reset(vData.smoothVelocity); vData.smoothVelocity.setValue(-vVelocity); - flickedV = flickY(vVelocity); - } else { - fixupY(); + flickedVertically = flickY(vVelocity); } - bool flickedH = false; + bool flickedHorizontally = false; hVelocity *= flickBoost; - if (q->xflick() && qAbs(hVelocity) > MinimumFlickVelocity && qAbs(event->localPos().x() - pressPos.x()) > FlickThreshold) { + bool isHorizontalFlickAllowed = q->xflick() && qAbs(hVelocity) > MinimumFlickVelocity && qAbs(event->localPos().x() - pressPos.x()) > FlickThreshold; + if (isHorizontalFlickAllowed) { velocityTimeline.reset(hData.smoothVelocity); hData.smoothVelocity.setValue(-hVelocity); - flickedH = flickX(hVelocity); - } else { - fixupX(); + flickedHorizontally = flickX(hVelocity); } - flickingStarted(flickedH, flickedV); + if (!isVerticalFlickAllowed) + fixupY(); + + if (!isHorizontalFlickAllowed) + fixupX(); + + flickingStarted(flickedHorizontally, flickedVertically); if (!isViewMoving()) q->movementEnding(); } |