]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/button.cpp
Patch # 984209 - Calls to wxFind() were using an old signature. They now check for...
[wxWidgets.git] / src / mac / carbon / button.cpp
index 94610153a1358a2bd7661522156c6a2bc62e2a3a..6c3d6f26494921c5c2c0bb232485ee9da918586f 100644 (file)
@@ -77,30 +77,44 @@ void wxButton::SetDefault()
 
 wxSize wxButton::DoGetBestSize() const
 {
-  wxSize sz = GetDefaultSize() ;
-  
-  int charspace = 8 ;
-  if ( GetWindowVariant() == wxWINDOW_VARIANT_NORMAL || GetWindowVariant() == wxWINDOW_VARIANT_LARGE )
-  {
-    sz.y = 20 ;
-    charspace = 10 ;
-  }
-  else if ( GetWindowVariant() == wxWINDOW_VARIANT_SMALL )
-  {
-    sz.y = 17 ;
-    charspace = 8 ;
-  }
-  else if ( GetWindowVariant() == wxWINDOW_VARIANT_MINI )
-  {
-    sz.y = 15 ;
-    charspace = 8 ;
-  }
+    wxSize sz = GetDefaultSize() ;
+
+    int charspace = 8 ;
+    if ( GetWindowVariant() == wxWINDOW_VARIANT_NORMAL || GetWindowVariant() == wxWINDOW_VARIANT_LARGE )
+    {
+        sz.y = 20 ;
+        charspace = 10 ;
+    }
+    else if ( GetWindowVariant() == wxWINDOW_VARIANT_SMALL )
+    {
+        sz.y = 17 ;
+        charspace = 8 ;
+    }
+    else if ( GetWindowVariant() == wxWINDOW_VARIANT_MINI )
+    {
+        sz.y = 15 ;
+        charspace = 8 ;
+    }
   
-  int wBtn = m_label.Length() * charspace + 12 ;
-  if (wBtn > sz.x) sz.x = wBtn;
+    Rect    bestsize = { 0 , 0 , 0 , 0 } ;
+    short   baselineoffset ;
+    ::GetBestControlRect( *m_peer , &bestsize , &baselineoffset ) ;
   
-  return sz ;
+    int wBtn = 0 ;
+    if ( EmptyRect( &bestsize ) )
+    {
+        int wBtn = m_label.Length() * charspace + 12 ;
+    }
+    else
+    {
+        sz.x = bestsize.right - bestsize.left ;
+        sz.y = bestsize.bottom - bestsize.top ;
+    }
+    
+    if (wBtn > sz.x || ( GetWindowStyle() & wxBU_EXACTFIT) ) 
+        sz.x = wBtn;
+
+    return sz ;
 }
 
 wxSize wxButton::GetDefaultSize()