OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
ImageSwitchButton Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/ImageSwitchButton.hpp>

Inheritance diagram for ImageSwitchButton:
Collaboration diagram for ImageSwitchButton:

Public Member Functions

 ImageSwitchButton (wxWindow *parent, ScalableBitmap &img_on, ScalableBitmap &img_off, long style=0)
void SetLabels (wxString const &lbl_on, wxString const &lbl_off)
void SetImages (ScalableBitmap &img_on, ScalableBitmap &img_off)
void SetTextColor (StateColor const &color)
void SetValue (bool value)
void SetPadding (int padding)
bool GetValue ()
void Rescale ()
bool Create (wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=0)
void SetCornerRadius (double radius)
void SetBorderWidth (int width)
void SetTopMargin (int margin)
void SetBorderColor (StateColor const &color)
void SetBorderColorNormal (wxColor const &color)
void SetBorderStyle (wxPenStyle style)
void SetBackgroundColor (StateColor const &color)
void SetBackgroundColorNormal (wxColor const &color)
void SetBackgroundColor2 (StateColor const &color)
void ShowBadge (bool show)

Static Public Member Functions

static wxColor GetParentBackgroundColor (wxWindow *parent)

Protected Member Functions

void eraseEvent (wxEraseEvent &evt)
void sizeEvent (wxSizeEvent &evt)
virtual void doRender (wxDC &dc)

Protected Attributes

double radius
int border_width = 1
int top_margin = 0
wxPenStyle border_style = wxPENSTYLE_SOLID
StateHandler state_handler
StateColor border_color
StateColor background_color
StateColor background_color2
ScalableBitmap badge

Private Member Functions

void messureSize ()
void paintEvent (wxPaintEvent &evt)
void render (wxDC &dc)
void mouseDown (wxMouseEvent &event)
void mouseReleased (wxMouseEvent &event)
void mouseEnterWindow (wxMouseEvent &event)
void mouseLeaveWindow (wxMouseEvent &event)
void sendButtonEvent ()

Private Attributes

ScalableBitmap m_on
ScalableBitmap m_off
bool m_on_off
int m_padding
bool pressedDown = false
bool hover = false
wxSize textSize
wxSize minSize
wxString labels [2]
StateColor text_color

Detailed Description

Constructor & Destructor Documentation

◆ ImageSwitchButton()

ImageSwitchButton::ImageSwitchButton ( wxWindow * parent,
ScalableBitmap & img_on,
ScalableBitmap & img_off,
long style = 0 )
46 : text_color(std::make_pair(0x6B6B6B, (int) StateColor::Disabled), std::make_pair(*wxBLACK, (int) StateColor::Normal))
47{
48 radius = 0;
49 m_padding = 0;
50 m_on = img_on;
51 m_off = img_off;
52 background_color = StateColor(std::make_pair(*wxWHITE, (int) StateColor::Disabled), std::make_pair(DEFAULT_PRESS_COL, (int) StateColor::Pressed),
53 std::make_pair(*wxWHITE, (int) StateColor::Normal));
54 border_color = StateColor(std::make_pair(*wxWHITE, (int) StateColor::Disabled), std::make_pair(DEFAULT_HOVER_COL, (int) StateColor::Focused),
55 std::make_pair(DEFAULT_HOVER_COL, (int) StateColor::Hovered), std::make_pair(*wxWHITE, (int) StateColor::Normal));
56
57 StaticBox::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, style);
58
60 Refresh();
61}
static const wxColour DEFAULT_HOVER_COL
Definition ImageSwitchButton.cpp:42
static const wxColour DEFAULT_PRESS_COL
Definition ImageSwitchButton.cpp:43
#define style
Definition WipeTowerDialog.cpp:101
int m_padding
Definition ImageSwitchButton.hpp:48
void messureSize()
Definition ImageSwitchButton.cpp:104
StateColor text_color
Definition ImageSwitchButton.hpp:56
ScalableBitmap m_on
Definition ImageSwitchButton.hpp:45
ScalableBitmap m_off
Definition ImageSwitchButton.hpp:46
@ Hovered
Definition StateColor.hpp:20
@ Normal
Definition StateColor.hpp:16
@ Disabled
Definition StateColor.hpp:22
@ Pressed
Definition StateColor.hpp:21
@ Focused
Definition StateColor.hpp:19
StateColor border_color
Definition StaticBox.hpp:72
bool Create(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=0)
Definition StaticBox.cpp:51
double radius
Definition StaticBox.hpp:67
StateColor background_color
Definition StaticBox.hpp:73

References ImageSwitchButton(), StaticBox::background_color, StaticBox::border_color, StaticBox::Create(), DEFAULT_HOVER_COL, DEFAULT_PRESS_COL, StateColor::Disabled, StateColor::Focused, StateColor::Hovered, m_off, m_on, m_padding, messureSize(), StateColor::Normal, StateColor::Pressed, StaticBox::radius, style, and text_color.

Referenced by ImageSwitchButton().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Function Documentation

◆ Create()

bool StaticBox::Create ( wxWindow * parent,
wxWindowID id = wxID_ANY,
const wxPoint & pos = wxDefaultPosition,
const wxSize & size = wxDefaultSize,
long style = 0 )
inherited
52{
53 if (style & wxBORDER_NONE)
54 border_width = 0;
55 wxWindow::Create(parent, id, pos, size, style);
57 state_handler.update_binds();
58 SetBackgroundColour(GetParentBackgroundColor(parent));
59 return true;
60}
int border_width
Definition StaticBox.hpp:68
static wxColor GetParentBackgroundColor(wxWindow *parent)
Definition StaticBox.cpp:122
StateHandler state_handler
Definition StaticBox.hpp:71
StateColor background_color2
Definition StaticBox.hpp:74

References background_color, background_color2, border_color, border_width, GetParentBackgroundColor(), state_handler, and style.

Referenced by FanSwitchButton::FanSwitchButton(), ImageSwitchButton::ImageSwitchButton(), ModeSwitchButton::ModeSwitchButton(), StaticBox(), Button::Create(), SpinInput::Create(), TabButton::Create(), TempInput::Create(), and TextInput::Create().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ doRender()

void StaticBox::doRender ( wxDC & dc)
protectedvirtualinherited

Reimplemented in FilamentStepIndicator, ModeSwitchButton, StepCtrl, StepIndicator, and TabCtrl.

215{
216 wxSize size = GetSize();
217 int states = state_handler.states();
218 if (background_color2.count() == 0) {
219 if ((border_width && border_color.count() > 0) || background_color.count() > 0) {
220 int topM = top_margin > 0 ? top_margin : 0;
221 wxRect rc(0, topM, size.x, size.y - topM);
222 if (border_width && border_color.count() > 0) {
223 const double scale = dc.GetContentScaleFactor();
224
225 // Snap rect edges to physical pixel boundaries so the 1px pen doesn't straddle a pixel boundary
226 auto snap = [&](int logical) -> int {
227 return (int)(ceil(logical * scale) / scale);
228 };
229
230 int deflate = snap(border_width / 2.0); // at 175%: snap(0.5) = snap→1/1.75 ≈ 1
231 rc.x += deflate;
232 rc.y += deflate;
233 rc.width -= deflate * 2;
234 rc.height -= deflate * 2;
235 dc.SetPen(wxPen(border_color.colorForStates(states), border_width, border_style));
236 } else {
237 dc.SetPen(wxPen(background_color.colorForStates(states)));
238 }
239 if (background_color.count() > 0)
240 dc.SetBrush(wxBrush(background_color.colorForStates(states)));
241 else
242 dc.SetBrush(wxBrush(GetBackgroundColour()));
243 if (radius == 0) {
244 dc.DrawRectangle(rc);
245 }
246 else {
247 dc.DrawRoundedRectangle(rc, radius - border_width);
248 }
249 }
250 }
251 else {
252 wxColor start = background_color.colorForStates(states);
253 wxColor stop = background_color2.colorForStates(states);
254 int r = start.Red(), g = start.Green(), b = start.Blue();
255 int dr = (int) stop.Red() - r, dg = (int) stop.Green() - g, db = (int) stop.Blue() - b;
256 int lr = 0, lg = 0, lb = 0;
257 for (int y = 0; y < size.y; ++y) {
258 dc.SetPen(wxPen(wxColor(r, g, b)));
259 dc.DrawLine(0, y, size.x, y);
260 lr += dr; while (lr >= size.y) { ++r, lr -= size.y; } while (lr <= -size.y) { --r, lr += size.y; }
261 lg += dg; while (lg >= size.y) { ++g, lg -= size.y; } while (lg <= -size.y) { --g, lg += size.y; }
262 lb += db; while (lb >= size.y) { ++b, lb -= size.y; } while (lb <= -size.y) { --b, lb += size.y; }
263 }
264 }
265
266 if (badge.bmp().IsOk()) {
267 auto s = badge.bmp().GetScaledSize();
268 dc.DrawBitmap(badge.bmp(), size.x - s.x, top_margin > 0 ? top_margin : 0);
269 }
270}
int scale(const int val)
Definition WipeTowerDialog.cpp:58
ScalableBitmap badge
Definition StaticBox.hpp:75
int top_margin
Definition StaticBox.hpp:69
wxPenStyle border_style
Definition StaticBox.hpp:70

References background_color, background_color2, badge, border_color, border_style, border_width, radius, scale(), state_handler, and top_margin.

Referenced by FilamentStepIndicator::doRender(), StepCtrl::doRender(), StepIndicator::doRender(), and render().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ eraseEvent()

void StaticBox::eraseEvent ( wxEraseEvent & evt)
protectedinherited
153{
154 // for transparent background, but not work
155#ifdef __WXMSW__
156 wxDC *dc = evt.GetDC();
157 wxSize size = GetSize();
158 wxClientDC dc2(GetParent());
159 dc->Blit({0, 0}, size, &dc2, GetPosition());
160#endif
161}

◆ GetParentBackgroundColor()

wxColor StaticBox::GetParentBackgroundColor ( wxWindow * parent)
staticinherited
123{
124 if (auto box = dynamic_cast<StaticBox*>(parent)) {
125 if (box->background_color.count() > 0) {
126 if (box->background_color2.count() == 0)
127 return box->background_color.defaultColor();
128 auto s = box->background_color.defaultColor();
129 auto e = box->background_color2.defaultColor();
130 int r = (s.Red() + e.Red()) / 2;
131 int g = (s.Green() + e.Green()) / 2;
132 int b = (s.Blue() + e.Blue()) / 2;
133 return wxColor(r, g, b);
134 }
135 }
136 if (parent)
137 return parent->GetBackgroundColour();
138 return *wxWHITE;
139}
StaticBox()
Definition StaticBox.cpp:33

References StaticBox().

Referenced by Label::Label(), ModeSwitchButton::ModeSwitchButton(), ScalableButton::ScalableButton(), SwitchButton::SwitchButton(), Create(), and SwitchButton::Rescale().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetValue()

bool ImageSwitchButton::GetValue ( )
inline
29{ return m_on_off; }
bool m_on_off
Definition ImageSwitchButton.hpp:47

References m_on_off.

Referenced by messureSize(), render(), and SetLabels().

Here is the caller graph for this function:

◆ messureSize()

void ImageSwitchButton::messureSize ( )
private
105{
106 wxClientDC dc(this);
107 dc.SetFont(GetFont());
108 textSize = dc.GetTextExtent(GetValue() ? labels[0] : labels[1]);
109}
bool GetValue()
Definition ImageSwitchButton.hpp:29
wxSize textSize
Definition ImageSwitchButton.hpp:52
wxString labels[2]
Definition ImageSwitchButton.hpp:55

References GetValue(), labels, and textSize.

Referenced by ImageSwitchButton(), Rescale(), SetImages(), SetLabels(), SetPadding(), SetTextColor(), and SetValue().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mouseDown()

void ImageSwitchButton::mouseDown ( wxMouseEvent & event)
private
163{
164 event.Skip();
165 pressedDown = true;
166 SetFocus();
167 CaptureMouse();
168}
bool pressedDown
Definition ImageSwitchButton.hpp:49

References pressedDown.

◆ mouseEnterWindow()

void ImageSwitchButton::mouseEnterWindow ( wxMouseEvent & event)
private
183{
184 if (!hover) {
185 hover = true;
186 Refresh();
187 }
188}
bool hover
Definition ImageSwitchButton.hpp:50

References hover.

◆ mouseLeaveWindow()

void ImageSwitchButton::mouseLeaveWindow ( wxMouseEvent & event)
private
191{
192 if (hover) {
193 hover = false;
194 Refresh();
195 }
196}

References hover.

◆ mouseReleased()

void ImageSwitchButton::mouseReleased ( wxMouseEvent & event)
private
171{
172 event.Skip();
173 if (pressedDown) {
174 pressedDown = false;
175 ReleaseMouse();
177 Refresh();
179 }
180}
void sendButtonEvent()
Definition ImageSwitchButton.cpp:198

References m_on_off, pressedDown, and sendButtonEvent().

Here is the call graph for this function:

◆ paintEvent()

void ImageSwitchButton::paintEvent ( wxPaintEvent & evt)
private
112{
113 wxPaintDC dc(this);
114 render(dc);
115}
void render(wxDC &dc)
Definition ImageSwitchButton.cpp:117

References render().

Here is the call graph for this function:

◆ render()

void ImageSwitchButton::render ( wxDC & dc)
private
118{
120 int states = state_handler.states();
121 wxSize size = GetSize();
122
123 wxSize szIcon;
124 wxSize szContent = textSize;
125 ScalableBitmap &icon = GetValue() ? m_on : m_off;
126
127 int content_height = icon.GetBmpHeight() + textSize.y + m_padding;
128
129 wxPoint pt = wxPoint((size.x - icon.GetBmpWidth()) / 2, (size.y - content_height) / 2);
130 if (icon.bmp().IsOk()) {
131 dc.DrawBitmap(icon.bmp(), pt);
132 pt.y += m_padding + icon.GetBmpHeight();
133 }
134 pt.x = (size.x - textSize.x) / 2;
135 dc.SetFont(GetFont());
136 if (!IsEnabled())
137 dc.SetTextForeground(text_color.colorForStates(StateColor::Disabled));
138 else
139 dc.SetTextForeground(text_color.colorForStates(states));
140
141 auto fina_txt = GetValue() ? labels[0] : labels[1];
142 if (dc.GetTextExtent(fina_txt).x > size.x) {
143 wxString forment_txt = wxEmptyString;
144 for (auto i = 0; i < fina_txt.length(); i++) {
145 forment_txt = fina_txt.SubString(0, i) + "...";
146 if (dc.GetTextExtent(forment_txt).x > size.x) {
147 pt.x = (size.x - dc.GetTextExtent(forment_txt).x) / 2;
148 dc.DrawText(forment_txt, pt);
149 break;
150 }
151 }
152 } else {
153 dc.DrawText(fina_txt, pt);
154 }
155}
int GetBmpWidth() const
Definition wxExtensions.cpp:977
const wxBitmap & bmp() const
Definition wxExtensions.hpp:189
int GetBmpHeight() const
Definition wxExtensions.cpp:988
void render(wxDC &dc)
Definition StaticBox.cpp:181
bool IsEnabled()
Definition dark_mode.cpp:32

References ScalableBitmap::bmp(), StateColor::Disabled, ScalableBitmap::GetBmpHeight(), ScalableBitmap::GetBmpWidth(), GetValue(), labels, m_off, m_on, m_padding, StaticBox::render(), StaticBox::state_handler, text_color, and textSize.

Referenced by paintEvent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Rescale()

void ImageSwitchButton::Rescale ( )
158{
159 messureSize();
160}

References messureSize().

Here is the call graph for this function:

◆ sendButtonEvent()

void ImageSwitchButton::sendButtonEvent ( )
private
199{
200 wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetId());
201 event.SetEventObject(this);
202 GetEventHandler()->ProcessEvent(event);
203}

Referenced by mouseReleased().

Here is the caller graph for this function:

◆ SetBackgroundColor()

◆ SetBackgroundColor2()

void StaticBox::SetBackgroundColor2 ( StateColor const & color)
inherited
116{
117 background_color2 = color;
118 state_handler.update_binds();
119 Refresh();
120}

References background_color2, and state_handler.

◆ SetBackgroundColorNormal()

void StaticBox::SetBackgroundColorNormal ( wxColor const & color)
inherited
110{
111 background_color.setColorForStates(color, 0);
112 Refresh();
113}

References background_color.

Referenced by Slic3r::GUI::ShortcutCaptureDialog::ShortcutCaptureDialog(), and Slic3r::GUI::HotEndTable::CreateNozzleBox().

Here is the caller graph for this function:

◆ SetBorderColor()

◆ SetBorderColorNormal()

void StaticBox::SetBorderColorNormal ( wxColor const & color)
inherited
97{
98 border_color.setColorForStates(color, 0);
99 Refresh();
100}

References border_color.

Referenced by Slic3r::GUI::ShortcutCaptureDialog::ShortcutCaptureDialog(), and Slic3r::GUI::HotEndTable::CreateNozzleBox().

Here is the caller graph for this function:

◆ SetBorderStyle()

void StaticBox::SetBorderStyle ( wxPenStyle style)
inherited
76{
78 Refresh();
79}

References border_style, and style.

◆ SetBorderWidth()

void StaticBox::SetBorderWidth ( int width)
inherited
82{
84 Refresh();
85}
coord_t width(const BoundingBox &box)
Definition Arrange.cpp:1184

References border_width.

Referenced by MultiSwitchButton::MultiSwitchButton(), Slic3r::GUI::KBShortcutsDialog::create_page(), and Button::SetStyle().

Here is the caller graph for this function:

◆ SetCornerRadius()

◆ SetImages()

void ImageSwitchButton::SetImages ( ScalableBitmap & img_on,
ScalableBitmap & img_off )
75{
76 m_on = img_on;
77 m_off = img_off;
79 Refresh();
80}

References m_off, m_on, and messureSize().

Here is the call graph for this function:

◆ SetLabels()

void ImageSwitchButton::SetLabels ( wxString const & lbl_on,
wxString const & lbl_off )
64{
65 labels[0] = lbl_on;
66 labels[1] = lbl_off;
67 auto fina_txt = GetValue() ? labels[0] : labels[1];
68 if (GetToolTipText() != fina_txt)
69 SetToolTip(fina_txt);
71 Refresh();
72}

References GetValue(), labels, and messureSize().

Here is the call graph for this function:

◆ SetPadding()

void ImageSwitchButton::SetPadding ( int padding)
98{
99 m_padding = padding;
100 messureSize();
101 Refresh();
102}

References m_padding, and messureSize().

Here is the call graph for this function:

◆ SetTextColor()

void ImageSwitchButton::SetTextColor ( StateColor const & color)
83{
84 text_color = color;
85 state_handler.update_binds();
87 Refresh();
88}

References messureSize(), StaticBox::state_handler, and text_color.

Here is the call graph for this function:

◆ SetTopMargin()

void StaticBox::SetTopMargin ( int margin)
inherited
70{
71 this->top_margin = margin;
72 Refresh();
73}

References top_margin.

Referenced by Slic3r::GUI::ExtruderGroup::ExtruderGroup().

Here is the caller graph for this function:

◆ SetValue()

void ImageSwitchButton::SetValue ( bool value)
91{
92 m_on_off = value;
94 Refresh();
95}

References m_on_off, and messureSize().

Here is the call graph for this function:

◆ ShowBadge()

void StaticBox::ShowBadge ( bool show)
inherited
142{
143 if (show && badge.name() != "badge") {
144 badge = ScalableBitmap(this, "badge", 18);
145 Refresh();
146 } else if (!show && !badge.name().empty()) {
147 badge = ScalableBitmap {};
148 Refresh();
149 }
150}

References badge.

Referenced by Slic3r::GUI::ExtruderGroup::ExtruderGroup().

Here is the caller graph for this function:

◆ sizeEvent()

void StaticBox::sizeEvent ( wxSizeEvent & evt)
protectedinherited
164{
165 Refresh();
166 evt.Skip();
167}

Member Data Documentation

◆ background_color

◆ background_color2

StateColor StaticBox::background_color2
protectedinherited

◆ badge

ScalableBitmap StaticBox::badge
protectedinherited

Referenced by doRender(), and ShowBadge().

◆ border_color

◆ border_style

wxPenStyle StaticBox::border_style = wxPENSTYLE_SOLID
protectedinherited

Referenced by doRender(), and SetBorderStyle().

◆ border_width

◆ hover

bool ImageSwitchButton::hover = false
private

◆ labels

wxString ImageSwitchButton::labels[2]
private

Referenced by messureSize(), render(), and SetLabels().

◆ m_off

ScalableBitmap ImageSwitchButton::m_off
private

◆ m_on

ScalableBitmap ImageSwitchButton::m_on
private

◆ m_on_off

bool ImageSwitchButton::m_on_off
private

Referenced by GetValue(), mouseReleased(), and SetValue().

◆ m_padding

int ImageSwitchButton::m_padding
private

◆ minSize

wxSize ImageSwitchButton::minSize
private

◆ pressedDown

bool ImageSwitchButton::pressedDown = false
private

Referenced by mouseDown(), and mouseReleased().

◆ radius

◆ state_handler

◆ text_color

StateColor ImageSwitchButton::text_color
private

◆ textSize

wxSize ImageSwitchButton::textSize
private

Referenced by messureSize(), and render().

◆ top_margin

int StaticBox::top_margin = 0
protectedinherited

Referenced by doRender(), and SetTopMargin().


The documentation for this class was generated from the following files: