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