1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 15:07:45 +00:00

LibGUI: Make it possible for GButton to be checkable.

This commit is contained in:
Andreas Kling 2019-04-04 13:18:27 +02:00
parent 5ec121e194
commit 19eb814850
4 changed files with 28 additions and 11 deletions

View file

@ -21,12 +21,20 @@ void GButton::set_caption(const String& caption)
update();
}
void GButton::set_checked(bool checked)
{
if (m_checked == checked)
return;
m_checked = checked;
update();
}
void GButton::paint_event(GPaintEvent& event)
{
GPainter painter(*this);
painter.add_clip_rect(event.rect());
StylePainter::paint_button(painter, rect(), m_button_style, m_being_pressed, m_hovered);
StylePainter::paint_button(painter, rect(), m_button_style, m_being_pressed, m_hovered, m_checkable && m_checked);
if (!caption().is_empty() || m_icon) {
auto content_rect = rect();
@ -35,12 +43,10 @@ void GButton::paint_event(GPaintEvent& event)
content_rect.move_by(1, 1);
icon_location.move_by(1, 1);
}
if (m_icon) {
if (m_icon)
painter.blit(icon_location, *m_icon, m_icon->rect());
painter.draw_text(content_rect, caption(), TextAlignment::Center, Color::Black);
} else {
painter.draw_text(content_rect, caption(), TextAlignment::Center, Color::Black);
}
auto& font = (m_checkable && m_checked) ? Font::default_bold_font() : this->font();
painter.draw_text(content_rect, caption(), font, TextAlignment::Center, Color::Black);
}
}

View file

@ -18,6 +18,12 @@ public:
const GraphicsBitmap* icon() const { return m_icon.ptr(); }
GraphicsBitmap* icon() { return m_icon.ptr(); }
bool is_checkable() const { return m_checkable; }
void set_checkable(bool checkable) { m_checkable = checkable; }
bool is_checked() const { return m_checked; }
void set_checked(bool);
Function<void(GButton&)> on_click;
void set_button_style(ButtonStyle style) { m_button_style = style; }
@ -40,5 +46,7 @@ private:
ButtonStyle m_button_style { ButtonStyle::Normal };
bool m_being_pressed { false };
bool m_hovered { false };
bool m_checkable { false };
bool m_checked { false };
};