]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bmpbuttn.cpp
extending calculation of visible region
[wxWidgets.git] / src / msw / bmpbuttn.cpp
index 9821e4a385d65103f2db36795c11a7351f2c62bd..535ac94e9cd53b0c6f34733ad1dfa176bad4ab2e 100644 (file)
@@ -136,11 +136,14 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id,
     else
         m_windowId = id;
 
-    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;
+    }
 
     long msStyle = WS_VISIBLE | WS_TABSTOP | WS_CHILD | BS_OWNERDRAW ;
 
@@ -455,4 +458,29 @@ void wxBitmapButton::SetDefault()
     wxButton::SetDefault();
 }
 
+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;
+    }
+
+    // all buttons have at least the standard size unless the user explicitly
+    // wants them to be of smaller size and used wxBU_EXACTFIT style when
+    // creating the button
+    if ( !HasFlag(wxBU_EXACTFIT) )
+    {
+        wxSize sz = GetDefaultSize();
+        if (best.x > sz.x)
+            sz.x = best.x;
+        if (best.y > sz.y)
+            sz.y = best.y;
+    }
+
+    return best;
+}
+
 #endif // wxUSE_BMPBUTTON
+