diff --git a/Libraries/LibDraw/StylePainter.cpp b/Libraries/LibDraw/StylePainter.cpp index c244555a631..6f556c46d2e 100644 --- a/Libraries/LibDraw/StylePainter.cpp +++ b/Libraries/LibDraw/StylePainter.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -257,3 +258,28 @@ void StylePainter::paint_progress_bar(Painter& painter, const Rect& rect, const if (!text.is_null()) painter.draw_text(rect.translated(0, 0), text, TextAlignment::Center, palette.base_text()); } + +static RefPtr s_unfilled_circle_bitmap; +static RefPtr s_filled_circle_bitmap; +static RefPtr s_changing_filled_circle_bitmap; +static RefPtr s_changing_unfilled_circle_bitmap; + +static const GraphicsBitmap& circle_bitmap(bool checked, bool changing) +{ + if (changing) + return checked ? *s_changing_filled_circle_bitmap : *s_changing_unfilled_circle_bitmap; + return checked ? *s_filled_circle_bitmap : *s_unfilled_circle_bitmap; +} + +void StylePainter::paint_radio_button(Painter& painter, const Rect& rect, const Palette&, bool is_checked, bool is_being_pressed) +{ + if (!s_unfilled_circle_bitmap) { + s_unfilled_circle_bitmap = GraphicsBitmap::load_from_file("/res/icons/unfilled-radio-circle.png"); + s_filled_circle_bitmap = GraphicsBitmap::load_from_file("/res/icons/filled-radio-circle.png"); + s_changing_filled_circle_bitmap = GraphicsBitmap::load_from_file("/res/icons/changing-filled-radio-circle.png"); + s_changing_unfilled_circle_bitmap = GraphicsBitmap::load_from_file("/res/icons/changing-unfilled-radio-circle.png"); + } + + auto& bitmap = circle_bitmap(is_checked, is_being_pressed); + painter.blit(rect.location(), bitmap, bitmap.rect()); +} diff --git a/Libraries/LibDraw/StylePainter.h b/Libraries/LibDraw/StylePainter.h index 89baa7e4d4f..ac1a409e30f 100644 --- a/Libraries/LibDraw/StylePainter.h +++ b/Libraries/LibDraw/StylePainter.h @@ -32,4 +32,5 @@ public: static void paint_frame(Painter&, const Rect&, const Palette&, FrameShape, FrameShadow, int thickness, bool skip_vertical_lines = false); static void paint_window_frame(Painter&, const Rect&, const Palette&); static void paint_progress_bar(Painter&, const Rect&, const Palette&, int min, int max, int value, const StringView& text = {}); + static void paint_radio_button(Painter&, const Rect&, const Palette&, bool is_checked, bool is_being_pressed); }; diff --git a/Libraries/LibGUI/GRadioButton.cpp b/Libraries/LibGUI/GRadioButton.cpp index 48eac5720a8..c39e7e6de30 100644 --- a/Libraries/LibGUI/GRadioButton.cpp +++ b/Libraries/LibGUI/GRadioButton.cpp @@ -1,12 +1,8 @@ #include +#include #include #include -static RefPtr s_unfilled_circle_bitmap; -static RefPtr s_filled_circle_bitmap; -static RefPtr s_changing_filled_circle_bitmap; -static RefPtr s_changing_unfilled_circle_bitmap; - GRadioButton::GRadioButton(GWidget* parent) : GRadioButton({}, parent) { @@ -15,12 +11,6 @@ GRadioButton::GRadioButton(GWidget* parent) GRadioButton::GRadioButton(const StringView& text, GWidget* parent) : GAbstractButton(text, parent) { - if (!s_unfilled_circle_bitmap) { - s_unfilled_circle_bitmap = GraphicsBitmap::load_from_file("/res/icons/unfilled-radio-circle.png"); - s_filled_circle_bitmap = GraphicsBitmap::load_from_file("/res/icons/filled-radio-circle.png"); - s_changing_filled_circle_bitmap = GraphicsBitmap::load_from_file("/res/icons/changing-filled-radio-circle.png"); - s_changing_unfilled_circle_bitmap = GraphicsBitmap::load_from_file("/res/icons/changing-unfilled-radio-circle.png"); - } } GRadioButton::~GRadioButton() @@ -29,14 +19,7 @@ GRadioButton::~GRadioButton() Size GRadioButton::circle_size() { - return s_unfilled_circle_bitmap->size(); -} - -static const GraphicsBitmap& circle_bitmap(bool checked, bool changing) -{ - if (changing) - return checked ? *s_changing_filled_circle_bitmap : *s_changing_unfilled_circle_bitmap; - return checked ? *s_filled_circle_bitmap : *s_unfilled_circle_bitmap; + return { 12, 12 }; } void GRadioButton::paint_event(GPaintEvent& event) @@ -47,8 +30,7 @@ void GRadioButton::paint_event(GPaintEvent& event) Rect circle_rect { { 2, 0 }, circle_size() }; circle_rect.center_vertically_within(rect()); - auto& bitmap = circle_bitmap(is_checked(), is_being_pressed()); - painter.blit(circle_rect.location(), bitmap, bitmap.rect()); + StylePainter::paint_radio_button(painter, circle_rect, palette(), is_checked(), is_being_pressed()); Rect text_rect { circle_rect.right() + 4, 0, font().width(text()), font().glyph_height() }; text_rect.center_vertically_within(rect());