diff options
author | Bea Lam <[email protected]> | 2012-03-06 09:28:56 +1000 |
---|---|---|
committer | Qt by Nokia <[email protected]> | 2012-03-07 02:45:21 +0100 |
commit | 14e00670b7393dd16e8896b2365e6d0c154c2d9a (patch) | |
tree | f9893acf86f8c5af41bd36271d12a296f16902cc /src/quick/items/qquickitemviewtransition.cpp | |
parent | 4b2a7b063bd8a75dd10859d477e53c833fc844fa (diff) |
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 <[email protected]>
Diffstat (limited to 'src/quick/items/qquickitemviewtransition.cpp')
-rw-r--r-- | src/quick/items/qquickitemviewtransition.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
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; } |