diff options
author | Bea Lam <bea.lam@nokia.com> | 2012-03-07 13:29:20 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-10 00:58:12 +0100 |
commit | 78356f6038065227acb2dc898994765f49f07b42 (patch) | |
tree | 2749621a6209b809660c128e0cb06402f786b5ec /src/quick/items/qquickpositioners.cpp | |
parent | 3c94c7eb7e622051677eb319f6a79e5edb8e2a12 (diff) |
Avoid using QQuickViewItem as base class
This patch renames it to QQuickItemViewTransitionableItem, and
FxViewItem and PositionedItem now create instances of this instead of
subclassing it, to reduce the memory used when transitions are not
required.
Change-Id: Ie050cda5a121bff9542c7ba7356f6eacf37d241a
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Diffstat (limited to 'src/quick/items/qquickpositioners.cpp')
-rw-r--r-- | src/quick/items/qquickpositioners.cpp | 64 |
1 files changed, 58 insertions, 6 deletions
diff --git a/src/quick/items/qquickpositioners.cpp b/src/quick/items/qquickpositioners.cpp index e9a0c179e0..4a4e6fc6d9 100644 --- a/src/quick/items/qquickpositioners.cpp +++ b/src/quick/items/qquickpositioners.cpp @@ -72,6 +72,60 @@ void QQuickBasePositionerPrivate::unwatchChanges(QQuickItem* other) otherPrivate->removeItemChangeListener(this, watchedChanges); } + +QQuickBasePositioner::PositionedItem::PositionedItem(QQuickItem *i) + : item(i) + , transitionableItem(0) + , index(-1) + , isNew(false) + , isVisible(true) +{ +} + +QQuickBasePositioner::PositionedItem::~PositionedItem() +{ + delete transitionableItem; +} + +qreal QQuickBasePositioner::PositionedItem::itemX() const +{ + return transitionableItem ? transitionableItem->itemX() : item->x(); +} + +qreal QQuickBasePositioner::PositionedItem::itemY() const +{ + return transitionableItem ? transitionableItem->itemY() : item->y(); +} + +void QQuickBasePositioner::PositionedItem::moveTo(const QPointF &pos) +{ + if (transitionableItem) + transitionableItem->moveTo(pos); + else + item->setPos(pos); +} + +void QQuickBasePositioner::PositionedItem::transitionNextReposition(QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, bool asTarget) +{ + if (!transitioner) + return; + if (!transitionableItem) + transitionableItem = new QQuickItemViewTransitionableItem(item); + transitioner->transitionNextReposition(transitionableItem, type, asTarget); +} + +bool QQuickBasePositioner::PositionedItem::prepareTransition(QQuickItemViewTransitioner *transitioner, const QRectF &viewBounds) +{ + return transitionableItem ? transitionableItem->prepareTransition(transitioner, index, viewBounds) : false; +} + +void QQuickBasePositioner::PositionedItem::startTransition(QQuickItemViewTransitioner *transitioner) +{ + if (transitionableItem) + transitionableItem->startTransition(transitioner, index); +} + + QQuickBasePositioner::QQuickBasePositioner(PositionerType at, QQuickItem *parent) : QQuickImplicitSizeItem(*(new QQuickBasePositionerPrivate), parent) { @@ -246,8 +300,7 @@ void QQuickBasePositioner::prePositioning() if (addedIndex < 0) addedIndex = posItem.index; PositionedItem *theItem = &positionedItems[positionedItems.count()-1]; - d->transitioner->transitionNextReposition(theItem, - QQuickItemViewTransitioner::AddTransition, true); + theItem->transitionNextReposition(d->transitioner, QQuickItemViewTransitioner::AddTransition, true); } } } else { @@ -268,8 +321,7 @@ void QQuickBasePositioner::prePositioning() if (d->transitioner) { if (addedIndex < 0) addedIndex = item->index; - d->transitioner->transitionNextReposition(&positionedItems[positionedItems.count()-1], - QQuickItemViewTransitioner::AddTransition, true); + positionedItems[positionedItems.count()-1].transitionNextReposition(d->transitioner, QQuickItemViewTransitioner::AddTransition, true); } } else { item->isNew = false; @@ -283,11 +335,11 @@ void QQuickBasePositioner::prePositioning() for (int i=0; i<positionedItems.count(); i++) { if (!positionedItems[i].isNew) { if (addedIndex >= 0) { - d->transitioner->transitionNextReposition(&positionedItems[i], QQuickItemViewTransitioner::AddTransition, false); + positionedItems[i].transitionNextReposition(d->transitioner, QQuickItemViewTransitioner::AddTransition, false); } else { // just queue the item for a move-type displace - if the item hasn't // moved anywhere, it won't be transitioned anyway - d->transitioner->transitionNextReposition(&positionedItems[i], QQuickItemViewTransitioner::MoveTransition, false); + positionedItems[i].transitionNextReposition(d->transitioner, QQuickItemViewTransitioner::MoveTransition, false); } } } |