diff options
author | Alan Alpert <alan.alpert@nokia.com> | 2009-11-03 22:53:12 (GMT) |
---|---|---|
committer | Alan Alpert <alan.alpert@nokia.com> | 2009-11-04 01:55:00 (GMT) |
commit | 4e8df537210736d8a723a409e5e01046efa44a39 (patch) | |
tree | 357c25e3fcc75e3a54bfe5a78f03ecd165ed3e95 /src/declarative | |
parent | afcbf6a97744a7b113dc5ce542618a5543aead91 (diff) | |
download | Qt-4e8df537210736d8a723a409e5e01046efa44a39.zip Qt-4e8df537210736d8a723a409e5e01046efa44a39.tar.gz Qt-4e8df537210736d8a723a409e5e01046efa44a39.tar.bz2 |
Position items in the correct order
Nearly fixes QT-2241, but still waiting for a signal to appear in
QGraphicsItem which allows up to reposition items after a change.
Diffstat (limited to 'src/declarative')
-rw-r--r-- | src/declarative/graphicsitems/qmlgraphicspositioners.cpp | 21 | ||||
-rw-r--r-- | src/declarative/graphicsitems/qmlgraphicspositioners_p.h | 1 |
2 files changed, 14 insertions, 8 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicspositioners.cpp b/src/declarative/graphicsitems/qmlgraphicspositioners.cpp index f599025..b4544c5 100644 --- a/src/declarative/graphicsitems/qmlgraphicspositioners.cpp +++ b/src/declarative/graphicsitems/qmlgraphicspositioners.cpp @@ -209,7 +209,12 @@ void QmlGraphicsBasePositioner::prePositioning() QCoreApplication::postEvent(this, new QEvent(QEvent::User)); } QSet<QmlGraphicsItem *> allItems; + //Need to order children by creation order modified by stacking order + //###can we avoid using the QGraphicsItemPrivate? QList<QGraphicsItem *> children = childItems(); + qSort(children.begin(), children.end(), d->insertionOrder); + positionedItems = QList<QmlGraphicsItem*>(); + for (int ii = 0; ii < children.count(); ++ii) { QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(ii)); if (!child) @@ -234,6 +239,7 @@ void QmlGraphicsBasePositioner::prePositioning() d->_newItems+=child; } allItems += child; + positionedItems << child; } QSet<QmlGraphicsItem *> deletedItems = d->_items - allItems; foreach(QmlGraphicsItem *child, d->_items){ @@ -497,9 +503,9 @@ void QmlGraphicsColumn::doPositioning() } } - QList<QGraphicsItem *> children = childItems(); + QList<QmlGraphicsItem *> children = positionedItems; for (int ii = 0; ii < children.count(); ++ii) { - QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(ii)); + QmlGraphicsItem *child = children.at(ii); if (!child || isInvisible(child)) continue; @@ -653,9 +659,9 @@ void QmlGraphicsRow::doPositioning() applyRemove(changes, item); } } - QList<QGraphicsItem *> children = childItems(); + QList<QmlGraphicsItem *> children = positionedItems; for (int ii = 0; ii < children.count(); ++ii) { - QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(ii)); + QmlGraphicsItem *child = children.at(ii); if (!child || isInvisible(child)) continue; @@ -859,7 +865,7 @@ void QmlGraphicsGrid::doPositioning() QList<int> maxColWidth; QList<int> maxRowHeight; int childIndex =0; - QList<QGraphicsItem *> children = childItems(); + QList<QmlGraphicsItem *> children = positionedItems; for (int i=0; i<r; i++){ for (int j=0; j<c; j++){ if (j==0) @@ -869,7 +875,7 @@ void QmlGraphicsGrid::doPositioning() if (childIndex == children.count()) continue; - QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(childIndex++)); + QmlGraphicsItem *child = children.at(childIndex++); if (!child || isInvisible(child)) continue; if (child->width() > maxColWidth[j]) @@ -889,8 +895,7 @@ void QmlGraphicsGrid::doPositioning() applyRemove(changes, item); } } - foreach(QGraphicsItem* schild, children){ - QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(schild); + foreach(QmlGraphicsItem* child, children){ if (!child || isInvisible(child)) continue; bool needMove = (child->x()!=xoffset)||(child->y()!=yoffset); diff --git a/src/declarative/graphicsitems/qmlgraphicspositioners_p.h b/src/declarative/graphicsitems/qmlgraphicspositioners_p.h index 0011ec5..56adc8b 100644 --- a/src/declarative/graphicsitems/qmlgraphicspositioners_p.h +++ b/src/declarative/graphicsitems/qmlgraphicspositioners_p.h @@ -104,6 +104,7 @@ private Q_SLOTS: protected: QmlGraphicsBasePositioner(QmlGraphicsBasePositionerPrivate &dd, AutoUpdateType at, QmlGraphicsItem *parent); void setMovingItem(QmlGraphicsItem *); + QList<QmlGraphicsItem *> positionedItems; private: void applyTransition(const QList<QPair<QString, QVariant> >& changes, QmlGraphicsItem* target, |