aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBea Lam <bea.lam@nokia.com>2012-02-17 12:38:53 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-17 04:30:23 +0100
commitdbaccf95532eec3a2b68a0cf5b4ba824ee084706 (patch)
treef272f375b040cecf47cfdeaf46578f70086477b4 /src
parent70c08e83cd47945a9cbaf6864d8da1b0de900e52 (diff)
Take QDeclarativeTransition::enabled() into account
Don't run transitions if enabled() is false Change-Id: I1df5479f8415b12837df8d54aa3902e072c73037 Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickgridview.cpp6
-rw-r--r--src/quick/items/qquickitemview.cpp99
-rw-r--r--src/quick/items/qquickitemview_p_p.h1
-rw-r--r--src/quick/items/qquicklistview.cpp6
4 files changed, 61 insertions, 51 deletions
diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp
index 39c7eab518..d7f4b808f2 100644
--- a/src/quick/items/qquickgridview.cpp
+++ b/src/quick/items/qquickgridview.cpp
@@ -485,7 +485,7 @@ bool QQuickGridViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, bool d
#endif
if (!(item = static_cast<FxGridItemSG*>(createItem(modelIndex, doBuffer))))
break;
- if (!(usePopulateTransition && populateTransition)) // pos will be set by layoutVisibleItems()
+ if (!canTransition(FxViewItemTransitionManager::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(colPos, rowPos);
item->item->setVisible(!doBuffer);
visibleItems.append(item);
@@ -523,7 +523,7 @@ bool QQuickGridViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, bool d
if (!(item = static_cast<FxGridItemSG*>(createItem(visibleIndex-1, doBuffer))))
break;
--visibleIndex;
- if (!(usePopulateTransition && populateTransition)) // pos will be set by layoutVisibleItems()
+ if (!canTransition(FxViewItemTransitionManager::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(colPos, rowPos);
item->item->setVisible(!doBuffer);
visibleItems.prepend(item);
@@ -2176,7 +2176,7 @@ bool QQuickGridViewPrivate::applyInsertionChange(const QDeclarativeChangeSet::In
if (change.isMove()) {
// we know this is a move target, since move displaced items that are
// shuffled into view due to a move would be added in refill()
- if (moveTransition && newItem)
+ if (canTransition(FxViewItemTransitionManager::MoveTransition, true) && newItem)
movingIntoView->append(MovedItem(item, change.moveKey(item->index)));
} else {
addedItems->append(item);
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index eee1504bd7..57b35214d8 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -1464,51 +1464,61 @@ void QQuickItemViewPrivate::applyPendingChanges()
layout();
}
-bool QQuickItemViewPrivate::hasItemTransitions() const
-{
- return populateTransition
- || addTransition || addDisplacedTransition
- || moveTransition || moveDisplacedTransition
- || removeTransition || removeDisplacedTransition;
-}
-
-void QQuickItemViewPrivate::transitionNextReposition(FxViewItem *item, FxViewItemTransitionManager::TransitionType type, bool isTarget)
+bool QQuickItemViewPrivate::canTransition(FxViewItemTransitionManager::TransitionType type, bool asTarget) const
{
switch (type) {
case FxViewItemTransitionManager::NoTransition:
- return;
+ return false;
case FxViewItemTransitionManager::PopulateTransition:
- if (populateTransition) {
- item->setNextTransition(FxViewItemTransitionManager::PopulateTransition, isTarget);
- return;
- }
- break;
+ return usePopulateTransition
+ && populateTransition && populateTransition->enabled();
case FxViewItemTransitionManager::AddTransition:
- if (!usePopulateTransition) {
- if ((isTarget && addTransition) || (!isTarget && addDisplacedTransition)) {
- item->setNextTransition(type, isTarget);
- return;
- }
- }
- break;
+ if (asTarget)
+ return addTransition && addTransition->enabled();
+ else
+ return addDisplacedTransition && addDisplacedTransition->enabled();
case FxViewItemTransitionManager::MoveTransition:
- if ((isTarget && moveTransition) || (!isTarget && moveDisplacedTransition)) {
- item->setNextTransition(type, isTarget);
- return;
- }
- break;
+ if (asTarget)
+ return moveTransition && moveTransition->enabled();
+ else
+ return moveDisplacedTransition && moveDisplacedTransition->enabled();
case FxViewItemTransitionManager::RemoveTransition:
- if ((isTarget && removeTransition) || (!isTarget && removeDisplacedTransition)) {
- item->setNextTransition(type, isTarget);
- return;
- }
- break;
+ if (asTarget)
+ return removeTransition && removeTransition->enabled();
+ else
+ return removeDisplacedTransition && removeDisplacedTransition->enabled();
}
+}
- // the requested transition type is not valid, but the item is scheduled/in another
- // transition, so cancel it to allow the item to move directly to the correct pos
- if (item->transitionScheduledOrRunning())
- item->stopTransition();
+bool QQuickItemViewPrivate::hasItemTransitions() const
+{
+ return canTransition(FxViewItemTransitionManager::PopulateTransition, true)
+ || canTransition(FxViewItemTransitionManager::AddTransition, true)
+ || canTransition(FxViewItemTransitionManager::AddTransition, false)
+ || canTransition(FxViewItemTransitionManager::MoveTransition, true)
+ || canTransition(FxViewItemTransitionManager::MoveTransition, false)
+ || canTransition(FxViewItemTransitionManager::RemoveTransition, true)
+ || canTransition(FxViewItemTransitionManager::RemoveTransition, false);
+}
+
+void QQuickItemViewPrivate::transitionNextReposition(FxViewItem *item, FxViewItemTransitionManager::TransitionType type, bool isTarget)
+{
+ bool matchedTransition = false;
+ if (type == FxViewItemTransitionManager::AddTransition) {
+ // don't run add transitions for added items while populating
+ matchedTransition = !usePopulateTransition && canTransition(type, isTarget);
+ } else {
+ matchedTransition = canTransition(type, isTarget);
+ }
+
+ if (matchedTransition) {
+ item->setNextTransition(type, isTarget);
+ } else {
+ // the requested transition type is not valid, but the item is scheduled/in another
+ // transition, so cancel it to allow the item to move directly to the correct pos
+ if (item->transitionScheduledOrRunning())
+ item->stopTransition();
+ }
}
int QQuickItemViewPrivate::findMoveKeyIndex(QDeclarativeChangeSet::MoveKey key, const QVector<QDeclarativeChangeSet::Remove> &changes) const
@@ -1590,7 +1600,7 @@ void QQuickItemView::destroyRemoved()
it != d->visibleItems.end();) {
FxViewItem *item = *it;
if (item->index == -1 && item->attached->delayRemove() == false) {
- if (d->removeTransition) {
+ if (d->canTransition(FxViewItemTransitionManager::RemoveTransition, true)) {
// don't remove from visibleItems until next layout()
d->runDelayedRemoveTransition = true;
QObject::disconnect(item->attached, SIGNAL(delayRemoveChanged()), this, SLOT(destroyRemoved()));
@@ -2253,7 +2263,7 @@ void QQuickItemViewPrivate::layout()
return;
}
- if (runDelayedRemoveTransition && removeDisplacedTransition) {
+ if (runDelayedRemoveTransition && canTransition(FxViewItemTransitionManager::RemoveTransition, false)) {
// assume that any items moving now are moving due to the remove - if they schedule
// a different transition, that will override this one anyway
for (int i=0; i<visibleItems.count(); i++)
@@ -2271,7 +2281,7 @@ void QQuickItemViewPrivate::layout()
}
forceLayout = false;
- if (usePopulateTransition && populateTransition) {
+ if (canTransition(FxViewItemTransitionManager::PopulateTransition, true)) {
for (int i=0; i<visibleItems.count(); i++)
transitionNextReposition(visibleItems.at(i), FxViewItemTransitionManager::PopulateTransition, true);
}
@@ -2295,8 +2305,10 @@ void QQuickItemViewPrivate::layout()
if (hasItemTransitions()) {
// items added in the last refill() may need to be transitioned in - e.g. a remove
// causes items to slide up into view
- if (moveDisplacedTransition || removeDisplacedTransition)
+ if (canTransition(FxViewItemTransitionManager::MoveTransition, false)
+ || canTransition(FxViewItemTransitionManager::RemoveTransition, false)) {
translateAndTransitionItemsAfter(lastIndexInView, insertionPosChanges, removalPosChanges);
+ }
prepareVisibleItemTransitions();
@@ -2421,7 +2433,7 @@ bool QQuickItemViewPrivate::applyModelChanges(ChangeResult *totalInsertionResult
// for each item that was moved directly into the view as a result of a move(),
// find the index it was moved from in order to set its initial position, so that we
// can transition it from this "original" position to its new position in the view
- if (moveTransition) {
+ if (canTransition(FxViewItemTransitionManager::MoveTransition, true)) {
for (int i=0; i<movingIntoView.count(); i++) {
int fromIndex = findMoveKeyIndex(movingIntoView[i].moveKey, removals);
if (fromIndex >= 0) {
@@ -2618,13 +2630,10 @@ void QQuickItemViewPrivate::prepareVisibleItemTransitions()
void QQuickItemViewPrivate::prepareRemoveTransitions(QHash<QDeclarativeChangeSet::MoveKey, FxViewItem *> *removedItems)
{
- if (!removeTransition && !removeDisplacedTransition)
- return;
-
removeTransitionIndexes.clear();
removeTransitionTargets.clear();
- if (removeTransition) {
+ if (canTransition(FxViewItemTransitionManager::RemoveTransition, true)) {
for (QHash<QDeclarativeChangeSet::MoveKey, FxViewItem *>::Iterator it = removedItems->begin();
it != removedItems->end(); ) {
bool isRemove = it.key().moveId < 0;
diff --git a/src/quick/items/qquickitemview_p_p.h b/src/quick/items/qquickitemview_p_p.h
index 6768149d74..05927c0d68 100644
--- a/src/quick/items/qquickitemview_p_p.h
+++ b/src/quick/items/qquickitemview_p_p.h
@@ -247,6 +247,7 @@ public:
void prepareRemoveTransitions(QHash<QDeclarativeChangeSet::MoveKey, FxViewItem *> *removedItems);
bool prepareNonVisibleItemTransition(FxViewItem *item, const QRectF &viewBounds);
+ bool canTransition(FxViewItemTransitionManager::TransitionType type, bool asTarget) const;
bool hasItemTransitions() const;
void transitionNextReposition(FxViewItem *item, FxViewItemTransitionManager::TransitionType type, bool isTarget);
int findMoveKeyIndex(QDeclarativeChangeSet::MoveKey key, const QVector<QDeclarativeChangeSet::Remove> &changes) const;
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index 03be177e2c..906b9b3781 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -629,7 +629,7 @@ bool QQuickListViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, bool d
#endif
if (!(item = static_cast<FxListItemSG*>(createItem(modelIndex, doBuffer))))
break;
- if (!(usePopulateTransition && populateTransition)) // pos will be set by layoutVisibleItems()
+ if (!canTransition(FxViewItemTransitionManager::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(pos);
item->item->setVisible(!doBuffer);
pos += item->size() + spacing;
@@ -649,7 +649,7 @@ bool QQuickListViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, bool d
break;
--visibleIndex;
visiblePos -= item->size() + spacing;
- if (!(usePopulateTransition && populateTransition)) // pos will be set by layoutVisibleItems()
+ if (!canTransition(FxViewItemTransitionManager::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(visiblePos);
item->item->setVisible(!doBuffer);
visibleItems.prepend(item);
@@ -2755,7 +2755,7 @@ bool QQuickListViewPrivate::applyInsertionChange(const QDeclarativeChangeSet::In
if (change.isMove()) {
// we know this is a move target, since move displaced items that are
// shuffled into view due to a move would be added in refill()
- if (moveTransition && newItem)
+ if (canTransition(FxViewItemTransitionManager::MoveTransition, true) && newItem)
movingIntoView->append(MovedItem(item, change.moveKey(item->index)));
} else {
addedItems->append(item);