]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wrapsizer.cpp
compute scrollbar spacing the same way GtkScrolledWindow does it
[wxWidgets.git] / src / common / wrapsizer.cpp
index 91a43c2ea57dc8d02ff606968c467c6558a1397e..9f2261e67c42449b306c445d5d91271dc42b9359 100644 (file)
@@ -59,7 +59,7 @@ private:
     wxSizerItem& m_item;
     const int m_propOld;
 
-    DECLARE_NO_COPY_CLASS(wxPropChanger)
+    wxDECLARE_NO_COPY_CLASS(wxPropChanger);
 };
 
 } // anonymous namespace
@@ -68,7 +68,7 @@ private:
 // wxWrapSizer implementation
 // ============================================================================
 
-IMPLEMENT_DYNAMIC_CLASS(wxWrapSizer, wxBoxSizer);
+IMPLEMENT_DYNAMIC_CLASS(wxWrapSizer, wxBoxSizer)
 
 wxWrapSizer::wxWrapSizer(int orient, int flags)
            : wxBoxSizer(orient),
@@ -112,7 +112,7 @@ void wxWrapSizer::ClearRows()
         row->GetChildren().clear();
 
         wxPropChanger * const
-            propChanger = wx_static_cast(wxPropChanger *, item->GetUserData());
+            propChanger = static_cast<wxPropChanger *>(item->GetUserData());
         if ( propChanger )
         {
             // this deletes propChanger and so restores the old proportion
@@ -177,15 +177,6 @@ wxSize wxWrapSizer::CalcMin()
     //     layout, trying to maintain the possibility to re-arrange lines by
     //     sizing
 
-    wxSize szBoundary;    // Keep track of boundary so we don't overflow
-    if ( m_availSize > 0 )
-    {
-        if ( m_dirInform == m_orient )
-            szBoundary = SizeFromMajorMinor(m_availSize, m_availableOtherDir);
-        else
-            szBoundary = SizeFromMajorMinor(m_availableOtherDir, m_availSize);
-    }
-
     if ( !m_lastUsed )
     {
         // Case 1 above: InformFirstDirection() has just been called
@@ -195,21 +186,22 @@ wxSize wxWrapSizer::CalcMin()
         // a wrap sizer, depending on whether the first reported size component
         // is the opposite as our own orientation (the simpler case) or the same
         // one (more complicated).
-        wxSize szMinPrev = m_minSize;
         if ( m_dirInform == m_orient )
             CalcMinFromMajor(m_availSize);
         else
             CalcMinFromMinor(m_availSize);
-
-        // If overflowing given boundary, go back to previous min size
-        if ( m_minSize.x > szBoundary.x || m_minSize.y>szBoundary.y )
-            m_minSize = szMinPrev;
     }
     else // Case 2 above: not immediately after InformFirstDirection()
     {
         if ( m_availSize > 0 )
         {
-            CalcMinFittingSize(szBoundary);
+            wxSize szAvail;    // Keep track of boundary so we don't overflow
+            if ( m_dirInform == m_orient )
+                szAvail = SizeFromMajorMinor(m_availSize, m_availableOtherDir);
+            else
+                szAvail = SizeFromMajorMinor(m_availableOtherDir, m_availSize);
+
+            CalcMinFittingSize(szAvail);
         }
         else // Initial calculation, before we have size available to us
         {
@@ -425,7 +417,7 @@ void wxWrapSizer::CalcMinFromMinor(int totMinor)
             wxSizerItem *item = node->GetData();
             if ( item->IsShown() )
             {
-                sz = item->GetMinSize();
+                sz = item->GetMinSizeWithBorder();
                 if ( line->m_width+SizeInMajorDir(sz)>lineSize )
                 {
                     line = new wxWrapLine;
@@ -458,7 +450,7 @@ void wxWrapSizer::CalcMinFromMinor(int totMinor)
                 // Take what is not used on this line, see how much extension we get
                 // by adding first item on next line.
                 int size = lineSize-lines[ix]->m_width; // Left over at end of this line
-                int extSize = GetSizeInMajorDir(lines[ix+1]->m_first->GetMinSize()) - size;
+                int extSize = GetSizeInMajorDir(lines[ix+1]->m_first->GetMinSizeWithBorder()) - size;
                 if ( (extSize>=tailSize && (extSize<bestExtSize || bestExtSize<tailSize)) ||
                     (extSize>bestExtSize && bestExtSize<tailSize) )
                     bestExtSize = extSize;
@@ -527,7 +519,7 @@ void wxWrapSizer::RecalcSizes()
         if ( !item->IsShown() )
             continue;
 
-        wxSize minItemSize = item->GetMinSize();
+        wxSize minItemSize = item->GetMinSizeWithBorder();
         const int itemMajor = SizeInMajorDir(minItemSize);
         const int itemMinor = SizeInMinorDir(minItemSize);
         if ( itemMajor > 0 && itemMajor < m_minItemMajor )