From 3a80424aeae19e838be03aa12a5243911ec3f020 Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Tue, 12 Mar 2013 16:04:54 +1000 Subject: Fix jump and property changes on first move when dragging a Flickable. Fixes a regression whereby on the first mouse move the contentItem was moved the total distance from the touch point to where the drag distance was exceeded. For large drag thresholds this causes a noticeable jump. Task-number: QTBUG-30032 Change-Id: I92c119d27dc2e22203484f9ada5978697d171957 Reviewed-by: Martin Jones --- src/declarative/graphicsitems/qdeclarativeflickable.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/declarative') diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index c0c7b2a0..64ae2094 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -789,9 +789,9 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent if (q->yflick()) { int dy = int(event->pos().y() - pressPos.y()); - if (vData.dragStartOffset == 0) - vData.dragStartOffset = dy; if (qAbs(dy) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) { + if (!vMoved) + vData.dragStartOffset = dy; qreal newY = dy + vData.pressPos - vData.dragStartOffset; const qreal minY = vData.dragMinBound; const qreal maxY = vData.dragMaxBound; @@ -818,9 +818,9 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent if (q->xflick()) { int dx = int(event->pos().x() - pressPos.x()); - if (hData.dragStartOffset == 0) - hData.dragStartOffset = dx; if (qAbs(dx) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) { + if (!hMoved) + hData.dragStartOffset = dx; qreal newX = dx + hData.pressPos - hData.dragStartOffset; const qreal minX = hData.dragMinBound; const qreal maxX = hData.dragMaxBound; -- cgit v1.2.3 From b35d793648a24b229aac75ea43d5a175967304ca Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Thu, 14 Mar 2013 13:27:35 +1000 Subject: Smooth dragging an item with MouseArea. Calculate drag distance relative to the mouse position when a drag is detected rather than the press position so there isn't a large change in position on the first move. Task-number: QTBUG-30188 Change-Id: I46918a7b3c62bdaef567b6a9fed651ce33434247 Reviewed-by: Martin Jones --- src/declarative/graphicsitems/qdeclarativemousearea.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/declarative') diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 9fa325b0..4752ec32 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -558,6 +558,7 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if (qAbs(x - d->startX) > dragThreshold || qAbs(y - d->startY) > dragThreshold) { setKeepMouseGrab(true); d->stealMouse = true; + d->startScene = event->scenePos(); } } -- cgit v1.2.3