From 6d7888aa59f08a0f91aaf844f27dc0c9462707f6 Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Tue, 3 Nov 2009 10:19:07 +1000 Subject: Fix repeater + positioners. Don't leave empty space (or an empty cell) where the repeater would be. --- .../graphicsitems/qmlgraphicspositioners.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/declarative/graphicsitems/qmlgraphicspositioners.cpp b/src/declarative/graphicsitems/qmlgraphicspositioners.cpp index ba696e7..35b0833 100644 --- a/src/declarative/graphicsitems/qmlgraphicspositioners.cpp +++ b/src/declarative/graphicsitems/qmlgraphicspositioners.cpp @@ -481,6 +481,11 @@ QmlGraphicsColumn::QmlGraphicsColumn(QmlGraphicsItem *parent) { } +inline bool isInvisible(QmlGraphicsItem *child) +{ + return child->opacity() == 0.0 || !child->isVisible() || !child->width() || !child->height(); +} + void QmlGraphicsColumn::doPositioning() { int voffset = 0; @@ -495,7 +500,7 @@ void QmlGraphicsColumn::doPositioning() QList<QGraphicsItem *> children = childItems(); for (int ii = 0; ii < children.count(); ++ii) { QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(ii)); - if (!child || child->opacity() == 0.0) + if (!child || isInvisible(child)) continue; bool needMove = (child->y() != voffset || child->x()); @@ -651,7 +656,7 @@ void QmlGraphicsRow::doPositioning() QList<QGraphicsItem *> children = childItems(); for (int ii = 0; ii < children.count(); ++ii) { QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(ii)); - if (!child || child->opacity() == 0.0) + if (!child || isInvisible(child)) continue; bool needMove = (child->x() != hoffset || child->y()); @@ -668,10 +673,8 @@ void QmlGraphicsRow::doPositioning() child->setX(hoffset); setMovingItem(0); } - if(child->width() && child->height()){//don't advance for invisible children - hoffset += child->width(); - hoffset += spacing(); - } + hoffset += child->width(); + hoffset += spacing(); } } @@ -867,7 +870,7 @@ void QmlGraphicsGrid::doPositioning() if (childIndex == children.count()) continue; QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(childIndex++)); - if (!child || child->opacity() == 0.0) + if (!child || isInvisible(child)) continue; if (child->width() > maxColWidth[j]) maxColWidth[j] = child->width(); @@ -888,7 +891,7 @@ void QmlGraphicsGrid::doPositioning() } foreach(QGraphicsItem* schild, children){ QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(schild); - if (!child || child->opacity() == 0.0) + if (!child || isInvisible(child)) continue; bool needMove = (child->x()!=xoffset)||(child->y()!=yoffset); QList<QPair<QString, QVariant> > changes; -- cgit v0.12