From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Sat, 27 Aug 2011 14:11:28 +0000 (+0000)
Subject: Make wxBU_EXACTFIT fir the button text more exactly.
X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b18ebec9568bcfc59b3c22d45c37fd73bdf1718c?ds=inline

Make wxBU_EXACTFIT fir the button text more exactly.

Too big margins were added for the buttons with wxBU_EXACTFIT style making
them larger than strictly necessary. Reduce the margins to make them really
as small as possible.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68922 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---

diff --git a/include/wx/msw/private/button.h b/include/wx/msw/private/button.h
index 1e6336197d..2f344f2d53 100644
--- a/include/wx/msw/private/button.h
+++ b/include/wx/msw/private/button.h
@@ -44,7 +44,8 @@ void UpdateMultilineStyle(HWND hwnd, const wxString& label);
 // flags for ComputeBestSize() and GetFittingSize()
 enum
 {
-    Size_AuthNeeded = 1
+    Size_AuthNeeded = 1,
+    Size_ExactFit   = 2
 };
 
 // NB: All the functions below are implemented in src/msw/button.cpp
diff --git a/src/msw/anybutton.cpp b/src/msw/anybutton.cpp
index 2603cdfdf3..a2382422e7 100644
--- a/src/msw/anybutton.cpp
+++ b/src/msw/anybutton.cpp
@@ -387,11 +387,21 @@ wxSize wxMSWButton::GetFittingSize(wxWindow *win,
                                    const wxSize& sizeLabel,
                                    int flags)
 {
-    // FIXME: this is pure guesswork, need to retrieve the real button margins
     wxSize sizeBtn = sizeLabel;
 
-    sizeBtn.x += 3*win->GetCharWidth();
-    sizeBtn.y += win->GetCharHeight()/2;
+    // FIXME: The numbers here are pure guesswork, no idea how should the
+    //        button margins be really calculated.
+    if ( flags & Size_ExactFit )
+    {
+        // We still need some margin or the text would be overwritten, just
+        // make it as small as possible.
+        sizeBtn.x += (3*win->GetCharWidth())/2;
+    }
+    else
+    {
+        sizeBtn.x += 3*win->GetCharWidth();
+        sizeBtn.y += win->GetCharHeight()/2;
+    }
 
     // account for the shield UAC icon if we have it
     if ( flags & Size_AuthNeeded )
@@ -555,6 +565,8 @@ wxSize wxAnyButton::DoGetBestSize() const
     if ( ShowsLabel() )
     {
         int flags = 0;
+        if ( HasFlag(wxBU_EXACTFIT) )
+            flags |= wxMSWButton::Size_ExactFit;
         if ( DoGetAuthNeeded() )
             flags |= wxMSWButton::Size_AuthNeeded;