]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/bmpbuttn.cpp
Create(): use wxAutoNSAutoreleasePool
[wxWidgets.git] / src / mac / carbon / bmpbuttn.cpp
index f29677665210d7a71aecda0a6ec3210ca45dcf44..f6ce4dd00c3779b42b9493566343856db820a056 100644 (file)
@@ -29,25 +29,36 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit
            const wxValidator& validator,
            const wxString& name)
 {
-    if ( !wxBitmapButtonBase::Create(parent, id, _T(""), pos, size,
+    // since bitmapbuttonbase is subclass of button calling wxBitmapButtonBase::Create
+    // essentially creates an additional button
+    if ( !wxControl::Create(parent, id, pos, size,
                                      style, validator, name) )
         return false;
 
     m_bmpNormal = bitmap;
  
-    m_marginX = 0;
-    m_marginY = 0;
+    if (style & wxBU_AUTODRAW)
+    {
+        m_marginX = wxDEFAULT_BUTTON_MARGIN;
+        m_marginY = wxDEFAULT_BUTTON_MARGIN;
+    }
+    else
+    {
+        m_marginX = 0;
+        m_marginY = 0;
+    }
 
-    // int x = pos.x;
-    // int y = pos.y;
     int width = size.x;
     int height = size.y;
 
-    if ( width == -1 && bitmap.Ok())
-        width = bitmap.GetWidth() + 2*m_marginX;
-
-    if ( height == -1 && bitmap.Ok())
-        height = bitmap.GetHeight() + 2*m_marginY;
+    if ( bitmap.Ok() )
+    {
+        wxSize newSize = DoGetBestSize();
+        if ( width == -1 )
+            width = newSize.x;
+        if ( height == -1 )
+            height = newSize.y;
+    }
 
     Rect bounds ;
     Str255 title ;
@@ -89,3 +100,14 @@ void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap)
     }
 }
 
+
+wxSize wxBitmapButton::DoGetBestSize() const
+{
+    wxSize best;
+    if (m_bmpNormal.Ok())
+    {
+        best.x = m_bmpNormal.GetWidth() + 2*m_marginX;
+        best.y = m_bmpNormal.GetHeight() + 2*m_marginY;
+    }
+    return best;
+}