#include "widgets/checkboxlabel/checkboxlabel.h" CheckboxLabel::CheckboxLabel(Widget* parent) : Widget(parent) { } void CheckboxLabel::SetText(const std::string& value) { if (text != value) { text = value; Update(); } } const std::string& CheckboxLabel::GetText() const { return text; } void CheckboxLabel::SetChecked(bool value) { if (value != checked) { checked = value; Update(); } } bool CheckboxLabel::GetChecked() const { return checked; } double CheckboxLabel::GetPreferredHeight() const { return 20.0; } void CheckboxLabel::OnPaint(Canvas* canvas) { if (checked) { canvas->fillRect(Rect::xywh(0.0, GetHeight() * 0.5 - 6.0, 10.0, 10.0), Colorf::fromRgba8(100, 100, 100)); canvas->fillRect(Rect::xywh(1.0, GetHeight() * 0.5 - 5.0, 8.0, 8.0), Colorf::fromRgba8(51, 51, 51)); canvas->fillRect(Rect::xywh(2.0, GetHeight() * 0.5 - 4.0, 6.0, 6.0), Colorf::fromRgba8(226, 223, 219)); } else { canvas->fillRect(Rect::xywh(0.0, GetHeight() * 0.5 - 6.0, 10.0, 10.0), Colorf::fromRgba8(99, 99, 99)); canvas->fillRect(Rect::xywh(1.0, GetHeight() * 0.5 - 5.0, 8.0, 8.0), Colorf::fromRgba8(51, 51, 51)); } canvas->drawText(Point(14.0, GetHeight() - 5.0), Colorf::fromRgba8(255, 255, 255), text); } bool CheckboxLabel::OnMouseDown(const Point& pos, InputKey key) { mouseDownActive = true; SetFocus(); return true; } bool CheckboxLabel::OnMouseUp(const Point& pos, InputKey key) { if (mouseDownActive) { Toggle(); } mouseDownActive = false; return true; } void CheckboxLabel::OnMouseLeave() { mouseDownActive = false; } void CheckboxLabel::OnKeyUp(InputKey key) { if (key == InputKey::Space) Toggle(); } void CheckboxLabel::Toggle() { bool oldchecked = checked; checked = radiostyle? true : !checked; Update(); if (checked != oldchecked && FuncChanged) FuncChanged(checked); }