Don't make buttons with images too wide in wxMSW.
We used to increase the button size to the standard size first and then add the extra padding the buttons with images. This resulted in too much padding for the buttons with short text labels and images. Instead, add the padding for the image first and only then increase the button size to the standard one if still needed. See #12924. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66892 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -397,14 +397,19 @@ wxSize wxMSWButton::GetFittingSize(wxWindow *win,
|
||||
return sizeBtn;
|
||||
}
|
||||
|
||||
wxSize wxMSWButton::ComputeBestSize(wxControl *btn, int flags)
|
||||
wxSize wxMSWButton::ComputeBestFittingSize(wxControl *btn, int flags)
|
||||
{
|
||||
wxClientDC dc(btn);
|
||||
|
||||
wxSize sizeBtn;
|
||||
dc.GetMultiLineTextExtent(btn->GetLabelText(), &sizeBtn.x, &sizeBtn.y);
|
||||
|
||||
sizeBtn = GetFittingSize(btn, sizeBtn, flags);
|
||||
return GetFittingSize(btn, sizeBtn, flags);
|
||||
}
|
||||
|
||||
wxSize wxMSWButton::IncreaseToStdSizeAndCache(wxControl *btn, const wxSize& size)
|
||||
{
|
||||
wxSize sizeBtn(size);
|
||||
|
||||
// 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
|
||||
@@ -595,6 +600,8 @@ void wxButton::AdjustForBitmapSize(wxSize &size) const
|
||||
|
||||
wxSize wxButton::DoGetBestSize() const
|
||||
{
|
||||
wxButton * const self = const_cast<wxButton *>(this);
|
||||
|
||||
wxSize size;
|
||||
|
||||
// account for the text part if we have it or if we don't have any image at
|
||||
@@ -606,19 +613,13 @@ wxSize wxButton::DoGetBestSize() const
|
||||
if ( GetAuthNeeded() )
|
||||
flags |= wxMSWButton::Size_AuthNeeded;
|
||||
|
||||
size = wxMSWButton::ComputeBestSize(const_cast<wxButton *>(this), flags);
|
||||
size = wxMSWButton::ComputeBestFittingSize(self, flags);
|
||||
}
|
||||
|
||||
if ( m_imageData )
|
||||
{
|
||||
AdjustForBitmapSize(size);
|
||||
|
||||
// The best size has changed so even if it had been already cached by
|
||||
// ComputeBestSize() call above we still need to update it.
|
||||
CacheBestSize(size);
|
||||
}
|
||||
|
||||
return size;
|
||||
return wxMSWButton::IncreaseToStdSizeAndCache(self, size);
|
||||
}
|
||||
|
||||
/* static */
|
||||
|
Reference in New Issue
Block a user