From 1a2b62674665e1832d979fea65307226ea120ef6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 11 Sep 2020 17:21:53 +0200 Subject: [PATCH] LibGUI+LibGfx: Move check box painting to Gfx::StylePainter This will allow us to render check boxes from other places. :^) --- Libraries/LibGUI/CheckBox.cpp | 26 +----------------- Libraries/LibGfx/ClassicStylePainter.cpp | 35 ++++++++++++++++++++++++ Libraries/LibGfx/ClassicStylePainter.h | 1 + Libraries/LibGfx/StylePainter.cpp | 5 ++++ Libraries/LibGfx/StylePainter.h | 2 ++ 5 files changed, 44 insertions(+), 25 deletions(-) diff --git a/Libraries/LibGUI/CheckBox.cpp b/Libraries/LibGUI/CheckBox.cpp index 3e0794adf2..3ff28097ec 100644 --- a/Libraries/LibGUI/CheckBox.cpp +++ b/Libraries/LibGUI/CheckBox.cpp @@ -33,21 +33,6 @@ namespace GUI { -static const char* s_checked_bitmap_data = { - " " - " # " - " ## " - " ### " - " ## ### " - " ##### " - " ### " - " # " - " " -}; - -static Gfx::CharacterBitmap* s_checked_bitmap; -static const int s_checked_bitmap_width = 9; -static const int s_checked_bitmap_height = 9; static const int s_box_width = 13; static const int s_box_height = 13; @@ -81,17 +66,8 @@ void CheckBox::paint_event(PaintEvent& event) 0, height() / 2 - s_box_height / 2 - 1, s_box_width, s_box_height }; - painter.fill_rect(box_rect, is_enabled() ? palette().base() : palette().window()); - Gfx::StylePainter::paint_frame(painter, box_rect, palette(), Gfx::FrameShape::Container, Gfx::FrameShadow::Sunken, 2); - if (is_being_pressed()) - painter.draw_rect(box_rect.shrunken(4, 4), Color::MidGray); - - if (is_checked()) { - if (!s_checked_bitmap) - s_checked_bitmap = &Gfx::CharacterBitmap::create_from_ascii(s_checked_bitmap_data, s_checked_bitmap_width, s_checked_bitmap_height).leak_ref(); - painter.draw_bitmap(box_rect.shrunken(4, 4).location(), *s_checked_bitmap, palette().base_text()); - } + Gfx::StylePainter::paint_check_box(painter, box_rect, palette(), is_enabled(), is_checked(), is_being_pressed()); paint_text(painter, text_rect, font(), Gfx::TextAlignment::TopLeft); } diff --git a/Libraries/LibGfx/ClassicStylePainter.cpp b/Libraries/LibGfx/ClassicStylePainter.cpp index da62b59358..0615f67bff 100644 --- a/Libraries/LibGfx/ClassicStylePainter.cpp +++ b/Libraries/LibGfx/ClassicStylePainter.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -345,4 +346,38 @@ void ClassicStylePainter::paint_radio_button(Painter& painter, const IntRect& re auto& bitmap = circle_bitmap(is_checked, is_being_pressed); painter.blit(rect.location(), bitmap, bitmap.rect()); } + +static const char* s_checked_bitmap_data = { + " " + " # " + " ## " + " ### " + " ## ### " + " ##### " + " ### " + " # " + " " +}; + +static Gfx::CharacterBitmap* s_checked_bitmap; +static const int s_checked_bitmap_width = 9; +static const int s_checked_bitmap_height = 9; + +void ClassicStylePainter::paint_check_box(Painter& painter, const IntRect& rect, const Palette& palette, bool is_enabled, bool is_checked, bool is_being_pressed) +{ + painter.fill_rect(rect, is_enabled ? palette.base() : palette.window()); + paint_frame(painter, rect, palette, Gfx::FrameShape::Container, Gfx::FrameShadow::Sunken, 2); + + if (is_being_pressed) { + // FIXME: This color should not be hard-coded. + painter.draw_rect(rect.shrunken(4, 4), Color::MidGray); + } + + if (is_checked) { + if (!s_checked_bitmap) + s_checked_bitmap = &Gfx::CharacterBitmap::create_from_ascii(s_checked_bitmap_data, s_checked_bitmap_width, s_checked_bitmap_height).leak_ref(); + painter.draw_bitmap(rect.shrunken(4, 4).location(), *s_checked_bitmap, palette.base_text()); + } +} + } diff --git a/Libraries/LibGfx/ClassicStylePainter.h b/Libraries/LibGfx/ClassicStylePainter.h index 6eea5f9a90..04910c19a5 100644 --- a/Libraries/LibGfx/ClassicStylePainter.h +++ b/Libraries/LibGfx/ClassicStylePainter.h @@ -42,6 +42,7 @@ public: void paint_window_frame(Painter&, const IntRect&, const Palette&) override; void paint_progress_bar(Painter&, const IntRect&, const Palette&, int min, int max, int value, const StringView& text) override; void paint_radio_button(Painter&, const IntRect&, const Palette&, bool is_checked, bool is_being_pressed) override; + void paint_check_box(Painter&, const IntRect&, const Palette&, bool is_enabled, bool is_checked, bool is_being_pressed) override; }; } diff --git a/Libraries/LibGfx/StylePainter.cpp b/Libraries/LibGfx/StylePainter.cpp index 9625e6f47d..17021a2ec9 100644 --- a/Libraries/LibGfx/StylePainter.cpp +++ b/Libraries/LibGfx/StylePainter.cpp @@ -73,4 +73,9 @@ void StylePainter::paint_radio_button(Painter& painter, const IntRect& rect, con current().paint_radio_button(painter, rect, palette, is_checked, is_being_pressed); } +void StylePainter::paint_check_box(Painter& painter, const IntRect& rect, const Palette& palette, bool is_enabled, bool is_checked, bool is_being_pressed) +{ + current().paint_check_box(painter, rect, palette, is_enabled, is_checked, is_being_pressed); +} + } diff --git a/Libraries/LibGfx/StylePainter.h b/Libraries/LibGfx/StylePainter.h index d143f4dd76..4b398e8004 100644 --- a/Libraries/LibGfx/StylePainter.h +++ b/Libraries/LibGfx/StylePainter.h @@ -61,6 +61,7 @@ public: virtual void paint_window_frame(Painter&, const IntRect&, const Palette&) = 0; virtual void paint_progress_bar(Painter&, const IntRect&, const Palette&, int min, int max, int value, const StringView& text) = 0; virtual void paint_radio_button(Painter&, const IntRect&, const Palette&, bool is_checked, bool is_being_pressed) = 0; + virtual void paint_check_box(Painter&, const IntRect&, const Palette&, bool is_enabled, bool is_checked, bool is_being_pressed) = 0; protected: BaseStylePainter() { } @@ -78,6 +79,7 @@ public: static void paint_window_frame(Painter&, const IntRect&, const Palette&); static void paint_progress_bar(Painter&, const IntRect&, const Palette&, int min, int max, int value, const StringView& text); static void paint_radio_button(Painter&, const IntRect&, const Palette&, bool is_checked, bool is_being_pressed); + static void paint_check_box(Painter&, const IntRect&, const Palette&, bool is_enabled, bool is_checked, bool is_being_pressed); }; }