From 14e00670b7393dd16e8896b2365e6d0c154c2d9a Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 6 Mar 2012 09:28:56 +1000 Subject: prepareTransition() must cancel current transition If it does not, itemX() or itemY() will still return the current transition's 'to' position instead of the nextTransitionTo pos that was scheduled for the next transition (which the item now has moved to using the direct setPos() method). Also refactor prepareTransition() to always move the item directly to the nextTransitionTo if transition is not going ahead. Also fix some broken test code. Task-number: QTBUG-24523 Change-Id: I2e536fbc0da2acbf96fdf2d177190a8968f7fdb1 Reviewed-by: Martin Jones --- src/quick/items/qquickitemviewtransition.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'src/quick/items') diff --git a/src/quick/items/qquickitemviewtransition.cpp b/src/quick/items/qquickitemviewtransition.cpp index 54375bf4ff..ac9375bfd8 100644 --- a/src/quick/items/qquickitemviewtransition.cpp +++ b/src/quick/items/qquickitemviewtransition.cpp @@ -408,14 +408,11 @@ bool QQuickViewItem::prepareTransition(const QRectF &viewBounds) doTransition = (nextTransitionType == QQuickItemViewTransitioner::AddTransition) ? viewBounds.intersects(QRectF(nextTransitionTo.x(), nextTransitionTo.y(), item->width(), item->height())) : viewBounds.intersects(QRectF(item->x(), item->y(), item->width(), item->height())); - if (!doTransition) - item->setPos(nextTransitionTo); } else { + // do transition if moving from or into visible area if (viewBounds.intersects(QRectF(item->x(), item->y(), item->width(), item->height())) || viewBounds.intersects(QRectF(nextTransitionTo.x(), nextTransitionTo.y(), item->width(), item->height()))) { doTransition = transitionWillChangePosition(); - } else { - item->setPos(nextTransitionTo); } } break; @@ -425,14 +422,16 @@ bool QQuickViewItem::prepareTransition(const QRectF &viewBounds) doTransition = viewBounds.isNull() || viewBounds.intersects(QRectF(item->x(), item->y(), item->width(), item->height())) || viewBounds.intersects(QRectF(nextTransitionTo.x(), nextTransitionTo.y(), item->width(), item->height())); - if (!doTransition) - item->setPos(nextTransitionTo); } break; } - if (!doTransition) + if (!doTransition) { + if (transition) + transition->cancel(); + item->setPos(nextTransitionTo); resetTransitionData(); + } return doTransition; } -- cgit v1.2.3