172 {
173 wxPaintDC dc(this);
174 std::unique_ptr<wxGraphicsContext> gc(wxGraphicsContext::Create(dc));
175 if (gc == nullptr)
176 return;
177
178 const wxSize size = GetSize();
179 const int circle_size = FromDIP(24);
181 const wxRect body_rect(FromDIP(7), FromDIP(26), size.x - FromDIP(14), size.y - FromDIP(32));
182 const wxColour badge_color =
m_enabled ? wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT)
183 : wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT);
184 const wxColour body_border =
m_enabled ? wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW)
185 : wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT);
186
187 gc->SetPen(*wxTRANSPARENT_PEN);
188 gc->SetBrush(wxBrush((
m_hover &&
m_enabled) ? badge_color.ChangeLightness(130) : badge_color));
189 gc->DrawEllipse((size.x - circle_size) / 2.0, 0, circle_size, circle_size);
190
192 dc.SetTextForeground(*wxWHITE);
193 const wxString slot_txt = wxString::Format(
"%d",
m_slot_id);
194 const wxSize slot_size = dc.GetTextExtent(slot_txt);
195 dc.DrawText(slot_txt, (size.x - slot_size.x) / 2, (circle_size - slot_size.y) / 2);
196
197 const wxColour bg_color =
m_empty ? wxColour(
"#F6F6F6") :
m_color;
198 gc->SetPen(wxPen(body_border, outline_width));
199 gc->SetBrush(wxBrush(bg_color));
200 gc->DrawRoundedRectangle(body_rect.x, body_rect.y, body_rect.width, body_rect.height, FromDIP(8));
201
204
206 if (dc.GetTextExtent(label).x > body_rect.width - FromDIP(8))
208 if (dc.GetTextExtent(label).x > body_rect.width - FromDIP(8)) {
209 while (!label.empty() && dc.GetTextExtent(label + "...").x > body_rect.width - FromDIP(8))
210 label.RemoveLast();
211 label += "...";
212 }
213 const wxSize label_size = dc.GetTextExtent(label);
214 dc.DrawText(label, body_rect.x + (body_rect.width - label_size.x) / 2, body_rect.y + (body_rect.height - label_size.y) / 2);
215 }
#define _L(s)
Definition OBJ.cpp:34
static wxFont Body_13
Definition Label.hpp:54
static wxFont Body_12
Definition Label.hpp:55
static wxFont Body_10
Definition Label.hpp:56
wxString m_name
Definition PrintHostDialogs.cpp:220
bool m_empty
Definition PrintHostDialogs.cpp:221
wxColour contrasting_text_color(const wxColour &background)
Definition PrintHostDialogs.cpp:96