]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/sizer.cpp
applied patch #103444
[wxWidgets.git] / src / common / sizer.cpp
index a41263744895ad26306f145f00f30160586bca7a..0a92ab056970a00e32c4854abc47d9f0c318c63a 100644 (file)
@@ -163,30 +163,12 @@ wxSize wxSizerItem::CalcMin()
 
 void wxSizerItem::SetDimension( wxPoint pos, wxSize size )
 {
-    m_pos = pos;
-
-    if (m_flag & wxWEST)
-    {
-        pos.x += m_border;
-        size.x -= m_border;
-    }
-    if (m_flag & wxEAST)
-    {
-        size.x -= m_border;
-    }
-    if (m_flag & wxNORTH)
-    {
-        pos.y += m_border;
-        size.y -= m_border;
-    }
-    if (m_flag & wxSOUTH)
+    if (m_flag & wxSHAPED)
     {
-        size.y -= m_border;
-    }
-    if (m_flag & wxSHAPED) {
         // adjust aspect ratio
         int rwidth = (int) (size.y * m_ratio);
-        if (rwidth > size.x) {
+        if (rwidth > size.x)
+        {
             // fit horizontally
             int rheight = (int) (size.x / m_ratio);
             // add vertical space
@@ -196,7 +178,9 @@ void wxSizerItem::SetDimension( wxPoint pos, wxSize size )
                 pos.y += (size.y - rheight);
             // use reduced dimensions
             size.y =rheight;
-        } else if (rwidth < size.x) {
+        }
+        else if (rwidth < size.x)
+        {
             // add horizontal space
             if (m_flag & wxALIGN_CENTER_HORIZONTAL)
                 pos.x += (size.x - rwidth) / 2;
@@ -205,6 +189,30 @@ void wxSizerItem::SetDimension( wxPoint pos, wxSize size )
             size.x = rwidth;
         }
     }
+    
+    // This is what GetPosition() returns. Since we calculate
+    // borders afterwards, GetPosition() will be the left/top
+    // corner of the surrounding border.
+    m_pos = pos;
+
+    if (m_flag & wxWEST)
+    {
+        pos.x += m_border;
+        size.x -= m_border;
+    }
+    if (m_flag & wxEAST)
+    {
+        size.x -= m_border;
+    }
+    if (m_flag & wxNORTH)
+    {
+        pos.y += m_border;
+        size.y -= m_border;
+    }
+    if (m_flag & wxSOUTH)
+    {
+        size.y -= m_border;
+    }
 
     if (IsSizer())
         m_sizer->SetDimension( pos.x, pos.y, size.x, size.y );
@@ -937,21 +945,32 @@ wxSize wxBoxSizer::CalcMin()
 //---------------------------------------------------------------------------
 
 wxStaticBoxSizer::wxStaticBoxSizer( wxStaticBox *box, int orient )
-  : wxBoxSizer( orient )
+                : wxBoxSizer( orient )
 {
     wxASSERT_MSG( box, wxT("wxStaticBoxSizer needs a static box") );
 
     m_staticBox = box;
 }
 
+static void GetStaticBoxBorders(wxStaticBox *box,
+                                int *borderTop, int *borderOther)
+{
+    // this has to be done platform by platform as there is no way to
+    // guess the thickness of a wxStaticBox border
+#ifdef __WXGTK__
+    if ( box->GetLabel().IsEmpty() )
+        *borderTop = 5;
+    else
+#endif // __WXGTK__
+        *borderTop = 15;
+
+    *borderOther = 5;
+}
+
 void wxStaticBoxSizer::RecalcSizes()
 {
-    // this will have to be done platform by platform
-    // as there is no way to guess the thickness of
-    // a wxStaticBox border
-    int top_border = 15;
-    if (m_staticBox->GetLabel().IsEmpty()) top_border = 5;
-    int other_border = 5;
+    int top_border, other_border;
+    GetStaticBoxBorders(m_staticBox, &top_border, &other_border);
 
     m_staticBox->SetSize( m_position.x, m_position.y, m_size.x, m_size.y );
 
@@ -970,13 +989,8 @@ void wxStaticBoxSizer::RecalcSizes()
 
 wxSize wxStaticBoxSizer::CalcMin()
 {
-    // This will have to be done platform by platform
-    // as there is no way to guess the thickness of
-    // a wxStaticBox border.
-
-    int top_border = 15;
-    if (m_staticBox->GetLabel().IsEmpty()) top_border = 5;
-    int other_border = 5;
+    int top_border, other_border;
+    GetStaticBoxBorders(m_staticBox, &top_border, &other_border);
 
     wxSize ret( wxBoxSizer::CalcMin() );
     ret.x += 2*other_border;