]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/bmpbuttn.cpp
If -1 is used for width/height, use best size.
[wxWidgets.git] / src / motif / bmpbuttn.cpp
index 374b8db63b83f11589caeac57a0262b787ced5f6..54d735b85667f58e26dd5192150474784011d11a 100644 (file)
@@ -17,6 +17,8 @@
 #define XtScreen XTSCREEN
 #endif
 
+#include "wx/defs.h"
+
 #include "wx/bmpbuttn.h"
 
 #ifdef __VMS__
@@ -111,7 +113,19 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit
         (XtPointer) this);
 
     SetCanAddEventHandler(TRUE);
-    AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
+    
+    wxSize newSize = size;
+    
+    if (m_buttonBitmap.Ok())
+    {
+        int border = (style & wxNO_BORDER) ? 4 : 10;
+        if (newSize.x == -1)
+            newSize.x = m_buttonBitmap.GetWidth()+border;
+        if (newSize.y == -1)
+            newSize.y = m_buttonBitmap.GetHeight()+border;
+    }
+    
+    AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, newSize.x, newSize.y);
 
     return TRUE;
 }
@@ -260,3 +274,23 @@ void wxBitmapButton::ChangeBackgroundColour()
     // Must reset the bitmaps since the colours have changed.
     DoSetBitmap();
 }
+
+wxSize wxBitmapButton::DoGetBestSize() const
+{
+    wxSize ret( 30,30 );
+
+    if (m_buttonBitmap.Ok())
+    {
+        int border = (GetWindowStyle() & wxNO_BORDER) ? 4 : 10;
+        ret.x = m_buttonBitmap.GetWidth()+border;
+        ret.y = m_buttonBitmap.GetHeight()+border;
+    }
+
+    if (!HasFlag(wxBU_EXACTFIT))
+    {
+        if (ret.x < 80) ret.x = 80;
+    }
+
+    return ret;
+}
+