summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2011-01-04 18:12:50 +0100
committerThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2011-01-04 18:12:50 +0100
commit7136f5b90787741e96689c13419aea23244db275 (patch)
tree07f9da1739d1a0acfd1c06ec62fdf7632c62a665
parentd62f88e726e41e00174f12fe9716e25fa037242b (diff)
Backported jump fix to Flickable
Avoid Flickable view jumping when drag threashold is exceeded. (d630c627ed1dfbcfb48f907d2d37048b049830a5)
-rw-r--r--src/graphicsitems/qxflickable.cpp10
-rw-r--r--src/graphicsitems/qxflickable_p_p.h1
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;