Size_AuthNeeded = 1
};
-// common implementation of wxButton and wxToggleButton::DoGetBestSize()
-// (implemented in src/msw/button.cpp)
-wxSize ComputeBestSize(wxControl *btn, int flags = 0);
+// NB: All the functions below are implemented in src/msw/button.cpp
-// compute the button size (as if wxBU_EXACTFIT were specified, i.e. without
+// 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
WXDLLIMPEXP_CORE wxSize
GetFittingSize(wxWindow *win, const wxSize& sizeLabel, int flags = 0);
+// Compute the button size (as if wxBU_EXACTFIT were specified) by computing
+// its label size and then calling GetFittingSize().
+wxSize ComputeBestFittingSize(wxControl *btn, int flags = 0);
+
+// Increase the size passed as parameter to be at least the standard button
+// size if the control doesn't have wxBU_EXACTFIT style and also cache it as
+// the best size and return its value -- this is used in DoGetBestSize()
+// implementation.
+wxSize IncreaseToStdSizeAndCache(wxControl *btn, const wxSize& size);
+
+// helper of wxToggleButton::DoGetBestSize()
+inline wxSize ComputeBestSize(wxControl *btn, int flags = 0)
+{
+ return IncreaseToStdSizeAndCache(btn, ComputeBestFittingSize(btn, flags));
+}
+
} // namespace wxMSWButton
#endif // _WX_MSW_PRIVATE_BUTTON_H_
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
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
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 */