]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/sizer.cpp
added the mention of library in which each class is defined to the documentation...
[wxWidgets.git] / src / common / sizer.cpp
index 4c54b27d065d522802bef23b820202ac9b937564..c8965d7295d0ff10480e912aa3f2450c6c940206 100644 (file)
@@ -1352,6 +1352,8 @@ void wxFlexGridSizer::RecalcSizes()
     AdjustForGrowables(sz);
 
     wxSizerItemList::const_iterator i = m_children.begin();
+    const wxSizerItemList::const_iterator end = m_children.end();
+
     int y = 0;
     for ( int r = 0; r < nrows; r++ )
     {
@@ -1359,7 +1361,12 @@ void wxFlexGridSizer::RecalcSizes()
         {
             // this row is entirely hidden, skip it
             for ( int c = 0; c < ncols; c++ )
+            {
+                if ( i == end )
+                    return;
+
                 ++i;
+            }
 
             continue;
         }
@@ -1370,22 +1377,13 @@ void wxFlexGridSizer::RecalcSizes()
             h = hrow;
 
         int x = 0;
-        for ( int c = 0; c < ncols; c++, ++i )
+        for ( int c = 0; c < ncols && i != end; c++, ++i )
         {
             const int wcol = m_colWidths[c];
 
             if ( wcol == -1 )
                 continue;
 
-            // check if there are any remaining children: it may happen that
-            // the last row is incomplete
-            if ( i == m_children.end() )
-            {
-                wxASSERT_MSG( r == nrows - 1, _T("too few items") );
-
-                return;
-            }
-
             int w = sz.x - x; // max possible value, ensure we don't overflow
             if ( wcol < w )
                 w = wcol;
@@ -1395,6 +1393,9 @@ void wxFlexGridSizer::RecalcSizes()
             x += wcol + m_hgap;
         }
 
+        if ( i == end )
+            return;
+
         y += hrow + m_vgap;
     }
 }
@@ -1660,13 +1661,14 @@ void wxBoxSizer::RecalcSizes()
 
     // the amount of free space which we should redistribute among the
     // stretchable items (i.e. those with non zero proportion)
-    const int delta = SizeInMajorDir(m_size) - SizeInMajorDir(m_minSize);
+    int delta = SizeInMajorDir(m_size) - SizeInMajorDir(m_minSize);
 
     // the position at which we put the next child
     wxPoint pt(m_position);
 
     const wxCoord totalMinorSize = SizeInMinorDir(m_size);
 
+    int totalProportion = m_totalProportion;
     for ( wxSizerItemList::const_iterator i = m_children.begin();
           i != m_children.end();
           ++i )
@@ -1681,11 +1683,15 @@ void wxBoxSizer::RecalcSizes()
 
         // adjust the size in the major direction using the proportion
         wxCoord majorSize = SizeInMajorDir(sizeThis);
-        if ( item->GetProportion() )
+        const int propItem = item->GetProportion();
+        if ( propItem )
         {
-            // as at least one visible item has non-zero proportion the total
-            // proportion must be non zero
-            majorSize += (delta * item->GetProportion()) / m_totalProportion;
+            const int deltaItem = (delta * propItem) / totalProportion;
+
+            majorSize += deltaItem;
+
+            delta -= deltaItem;
+            totalProportion -= propItem;
         }