From 433aca2d0d6f056ecb1097196d1a2f9e0c3d5e64 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 5 Sep 2008 14:10:50 +0000 Subject: [PATCH] extract button size calculation from button label size to a separate function to allow reusing it elsewhere git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55474 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/private/button.h | 4 ++++ src/msw/button.cpp | 36 ++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/include/wx/msw/private/button.h b/include/wx/msw/private/button.h index c50aa5a311..f279c3e089 100644 --- a/include/wx/msw/private/button.h +++ b/include/wx/msw/private/button.h @@ -49,6 +49,10 @@ void UpdateMultilineStyle(HWND hwnd, const wxString& label); // (implemented in src/msw/button.cpp) wxSize ComputeBestSize(wxControl *btn); +// compute the button size (as if wxBU_EXACTFIT were specified, i.e. without +// adjusting it to be of default size if it's smaller) for the given label size +wxSize GetFittingSize(wxWindow *win, const wxSize& sizeLabel); + } // namespace wxMSWButton #endif // _WX_MSW_PRIVATE_BUTTON_H_ diff --git a/src/msw/button.cpp b/src/msw/button.cpp index 893dd88301..8ef37a32b2 100644 --- a/src/msw/button.cpp +++ b/src/msw/button.cpp @@ -163,33 +163,41 @@ void wxMSWButton::UpdateMultilineStyle(HWND hwnd, const wxString& label) ::SetWindowLong(hwnd, GWL_STYLE, styleNew); } +wxSize wxMSWButton::GetFittingSize(wxWindow *win, const wxSize& sizeLabel) +{ + // FIXME: this is pure guesswork, need to retrieve the real button margins + wxSize sizeBtn = sizeLabel; + + sizeBtn.x += 3*win->GetCharWidth(); + sizeBtn.y = 11*EDIT_HEIGHT_FROM_CHAR_HEIGHT(sizeLabel.y)/10; + + return sizeBtn; +} + wxSize wxMSWButton::ComputeBestSize(wxControl *btn) { wxClientDC dc(btn); - wxCoord wBtn, - hBtn; - dc.GetMultiLineTextExtent(btn->GetLabelText(), &wBtn, &hBtn); + wxSize sizeBtn; + dc.GetMultiLineTextExtent(btn->GetLabelText(), &sizeBtn.x, &sizeBtn.y); - // FIXME: this is pure guesswork, need to retrieve the real button margins - wBtn += 3*btn->GetCharWidth(); - hBtn = 11*EDIT_HEIGHT_FROM_CHAR_HEIGHT(hBtn)/10; + sizeBtn = GetFittingSize(btn, sizeBtn); // 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 ( !btn->HasFlag(wxBU_EXACTFIT) ) { - wxSize sz = wxButton::GetDefaultSize(); - if ( wBtn < sz.x ) - wBtn = sz.x; - if ( hBtn < sz.y ) - hBtn = sz.y; + wxSize sizeDef = wxButton::GetDefaultSize(); + if ( sizeBtn.x < sizeDef.x ) + sizeBtn.x = sizeDef.x; + if ( sizeBtn.y < sizeDef.y ) + sizeBtn.y = sizeDef.y; } - wxSize best(wBtn, hBtn); - btn->CacheBestSize(best); - return best; + btn->CacheBestSize(sizeBtn); + + return sizeBtn; } // ---------------------------------------------------------------------------- -- 2.45.2