From febd929f0f264c64c15750bc477abfdb97f6ee87 Mon Sep 17 00:00:00 2001 From: Maarten Bent Date: Sun, 10 Dec 2017 18:15:41 +0100 Subject: [PATCH] Improve wxRadioBox width on wxMSW Do not use 'RADIO_SIZE 20' as the fixed width of the radio button, but use the actual width as returned by wxRendererNative. wxRendererNative has no GetRadioButtonSize, so for now use GetCheckBoxSize. It returns the same sizes. Also add a half character width to account for the space between the button and the label. There is no need to add extra width to the label of the static box. Closes #18010. --- include/wx/msw/private.h | 1 - src/msw/radiobox.cpp | 14 +++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h index 69a36d0036..6e435871d2 100644 --- a/include/wx/msw/private.h +++ b/include/wx/msw/private.h @@ -100,7 +100,6 @@ WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst); #define CHECK_IS_FAFA FALSE #define RADIO_CLASS wxT("BUTTON") #define RADIO_FLAGS (BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE) -#define RADIO_SIZE 20 #define RADIO_IS_FAFA FALSE #define PURE_WINDOWS #define GROUP_CLASS wxT("BUTTON") diff --git a/src/msw/radiobox.cpp b/src/msw/radiobox.cpp index 0bc13ada81..8c99b27b1b 100644 --- a/src/msw/radiobox.cpp +++ b/src/msw/radiobox.cpp @@ -36,6 +36,7 @@ #endif #include "wx/msw/subwin.h" +#include "wx/renderer.h" #if wxUSE_TOOLTIPS #include "wx/tooltip.h" @@ -549,6 +550,15 @@ WX_FORWARD_STD_METHODS_TO_SUBWINDOWS(wxRadioBox, wxStaticBox, m_radioButtons) wxSize wxRadioBox::GetMaxButtonSize() const { + // We use GetCheckBox() because there is no dedicated GetRadioBox() method + // in wxRendererNative, but check and radio boxes are usually of the same + // size anyhow. We also add half a character of width to account for the + // extra space after the radio box itself. + const int radioWidth = + wxRendererNative::Get().GetCheckBoxSize( + reinterpret_cast(const_cast(this))).x + + GetCharWidth() / 2; + // calculate the max button size int widthMax = 0, heightMax = 0; @@ -561,8 +571,7 @@ wxSize wxRadioBox::GetMaxButtonSize() const GetTextExtent(wxGetWindowText((*m_radioButtons)[i]), &width, &height); // adjust the size to take into account the radio box itself - // FIXME this is totally bogus! - width += RADIO_SIZE; + width += radioWidth; height *= 3; height /= 2; } @@ -599,7 +608,6 @@ wxSize wxRadioBox::GetTotalButtonSize(const wxSize& sizeBtn) const // and also wide enough for its label int widthLabel; GetTextExtent(GetLabelText(), &widthLabel, NULL); - widthLabel += RADIO_SIZE; // FIXME this is bogus too if ( widthLabel > width ) width = widthLabel;