From e4980ed3b6d143358c352904f4b679d5ae8504e9 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 3 Dec 2009 17:31:57 +1000 Subject: Minor optimization for layout. --- .../graphicsitems/qmlgraphicspositioners.cpp | 55 +++++++++++++--------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/declarative/graphicsitems/qmlgraphicspositioners.cpp b/src/declarative/graphicsitems/qmlgraphicspositioners.cpp index 70f0cb0..07bbf1f 100644 --- a/src/declarative/graphicsitems/qmlgraphicspositioners.cpp +++ b/src/declarative/graphicsitems/qmlgraphicspositioners.cpp @@ -243,38 +243,51 @@ void QmlGraphicsBasePositioner::prePositioning() d->_ep = true; QCoreApplication::postEvent(this, new QEvent(QEvent::User)); } - QSet allItems; //Need to order children by creation order modified by stacking order //###can we avoid using the QGraphicsItemPrivate? QList children = childItems(); qSort(children.begin(), children.end(), d->insertionOrder); positionedItems.clear(); - allItems.reserve(children.count()); - for (int ii = 0; ii < children.count(); ++ii) { - QmlGraphicsItem *child = qobject_cast(children.at(ii)); - if (!child) - continue; - if (!d->_items.contains(child)){ + if (d->_items.isEmpty()) { + for (int ii = 0; ii < children.count(); ++ii) { + QmlGraphicsItem *child = qobject_cast(children.at(ii)); + if (!child) + continue; d->watchChanges(child); d->_items += child; + if (child->opacity() != 0.0) + d->_newItems += child; + positionedItems << child; } - if (child->opacity() == 0.0){ - if (d->_stableItems.contains(child)){ - d->_leavingItems += child; - d->_stableItems -= child; + } else { + QSet allItems; + allItems.reserve(children.count()); + for (int ii = 0; ii < children.count(); ++ii) { + QmlGraphicsItem *child = qobject_cast(children.at(ii)); + if (!child) + continue; + if (!d->_items.contains(child)){ + d->watchChanges(child); + d->_items += child; } - }else if (!d->_stableItems.contains(child)){ - d->_newItems+=child; + if (child->opacity() == 0.0){ + if (d->_stableItems.contains(child)){ + d->_leavingItems += child; + d->_stableItems -= child; + } + }else if (!d->_stableItems.contains(child)){ + d->_newItems+=child; + } + allItems += child; + positionedItems << child; } - allItems += child; - positionedItems << child; - } - if (d->_items.count() != allItems.count()) { - QSet deletedItems = d->_items - allItems; - foreach(QmlGraphicsItem *child, deletedItems){ - d->unwatchChanges(child); - d->_items -= child; + if (d->_items.count() != allItems.count()) { + QSet deletedItems = d->_items - allItems; + foreach(QmlGraphicsItem *child, deletedItems){ + d->unwatchChanges(child); + d->_items -= child; + } } } d->_animated.clear(); -- cgit v0.12