On Linux/GTK, CheckBox, RadioBox, and SwitchButton set their size to exactly the bitmap size (18x18 or 16x16), but GTK's internal CSS padding requires additional space, resulting in negative content width warnings. Use GetBestSize() on GTK to account for theme padding.
70 lines
1.4 KiB
C++
70 lines
1.4 KiB
C++
#include "RadioBox.hpp"
|
|
|
|
#include "../wxExtensions.hpp"
|
|
|
|
namespace Slic3r {
|
|
namespace GUI {
|
|
RadioBox::RadioBox(wxWindow *parent)
|
|
: wxBitmapToggleButton(parent, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE)
|
|
, m_on(this, "radio_on", 18)
|
|
, m_off(this, "radio_off", 18)
|
|
, m_ban(this, "radio_ban", 18)
|
|
{
|
|
// SetBackgroundStyle(wxBG_STYLE_TRANSPARENT);
|
|
if (parent) SetBackgroundColour(parent->GetBackgroundColour());
|
|
// Bind(wxEVT_TOGGLEBUTTON, [this](auto& e) { update(); e.Skip(); });
|
|
update();
|
|
#ifdef __WXGTK__
|
|
wxSize bestSize = GetBestSize();
|
|
bestSize.IncTo(m_on.GetBmpSize());
|
|
SetSize(bestSize);
|
|
SetMinSize(bestSize);
|
|
#else
|
|
SetSize(m_on.GetBmpSize());
|
|
SetMinSize(m_on.GetBmpSize());
|
|
#endif
|
|
}
|
|
|
|
void RadioBox::SetValue(bool value)
|
|
{
|
|
wxBitmapToggleButton::SetValue(value);
|
|
update();
|
|
}
|
|
|
|
bool RadioBox::GetValue()
|
|
{
|
|
return wxBitmapToggleButton::GetValue();
|
|
}
|
|
|
|
|
|
void RadioBox::Rescale()
|
|
{
|
|
m_on.msw_rescale();
|
|
m_off.msw_rescale();
|
|
update();
|
|
#ifdef __WXGTK__
|
|
wxSize bestSize = GetBestSize();
|
|
bestSize.IncTo(m_on.GetBmpSize());
|
|
SetSize(bestSize);
|
|
SetMinSize(bestSize);
|
|
#else
|
|
SetSize(m_on.GetBmpSize());
|
|
SetMinSize(m_on.GetBmpSize());
|
|
#endif
|
|
}
|
|
|
|
void RadioBox::update() {
|
|
if (IsEnabled())
|
|
{
|
|
SetBitmap((GetValue() ? m_on : m_off).bmp());
|
|
} else
|
|
{
|
|
SetBitmap(m_ban.bmp());
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|