diff options
author | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2011-01-04 18:12:50 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2011-01-04 18:12:50 +0100 |
commit | 7136f5b90787741e96689c13419aea23244db275 (patch) | |
tree | 07f9da1739d1a0acfd1c06ec62fdf7632c62a665 | |
parent | d62f88e726e41e00174f12fe9716e25fa037242b (diff) |
Backported jump fix to Flickable
Avoid Flickable view jumping when drag threashold is exceeded.
(d630c627ed1dfbcfb48f907d2d37048b049830a5)
-rw-r--r-- | src/graphicsitems/qxflickable.cpp | 10 | ||||
-rw-r--r-- | src/graphicsitems/qxflickable_p_p.h | 1 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/graphicsitems/qxflickable.cpp b/src/graphicsitems/qxflickable.cpp index 78c0e7a..0287205 100644 --- a/src/graphicsitems/qxflickable.cpp +++ b/src/graphicsitems/qxflickable.cpp @@ -642,6 +642,8 @@ void QxFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event) timeline.clear(); hData.velocity = 0; vData.velocity = 0; + hData.dragStartOffset = 0; + vData.dragStartOffset = 0; lastPos = QPoint(); lastPosTime.start(); pressPos = event->pos(); @@ -664,7 +666,9 @@ void QxFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event) if (q->yflick()) { int dy = int(event->pos().y() - pressPos.y()); if (qAbs(dy) > QApplication::startDragDistance() || pressTime.elapsed() > 200) { - qreal newY = dy + vData.pressPos; + if (!vMoved) + vData.dragStartOffset = dy; + qreal newY = dy + vData.pressPos - vData.dragStartOffset; const qreal minY = q->minYExtent(); const qreal maxY = q->maxYExtent(); if (newY > minY) @@ -691,7 +695,9 @@ void QxFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event) if (q->xflick()) { int dx = int(event->pos().x() - pressPos.x()); if (qAbs(dx) > QApplication::startDragDistance() || pressTime.elapsed() > 200) { - qreal newX = dx + hData.pressPos; + if (!hMoved) + hData.dragStartOffset = dx; + qreal newX = dx + hData.pressPos - hData.dragStartOffset; const qreal minX = q->minXExtent(); const qreal maxX = q->maxXExtent(); if (newX > minX) diff --git a/src/graphicsitems/qxflickable_p_p.h b/src/graphicsitems/qxflickable_p_p.h index fa28be4..264bddc 100644 --- a/src/graphicsitems/qxflickable_p_p.h +++ b/src/graphicsitems/qxflickable_p_p.h @@ -94,6 +94,7 @@ public: QDeclarativeTimeLineValueProxy<QxFlickablePrivate> move; qreal viewSize; qreal pressPos; + qreal dragStartOffset; qreal velocity; qreal flickTarget; QxFlickablePrivate::Velocity smoothVelocity; |