From a79bac428b7857b9db2d0641daf3b7f2e3deb91f Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 24 Dec 2019 20:57:54 +0100 Subject: LibGUI+LibDraw: Add "Palette" concept for scoped color theming GApplication now has a palette. This palette contains all the system theme colors by default, and is inherited by a new top-level GWidget. New child widgets inherit their parents palette. It is possible to override the GApplication palette, and the palette of any GWidget. The Palette object contains a bunch of colors, each corresponding to a ColorRole. Each role has a convenience getter as well. Each GWidget now has a background_role() and foreground_role(), which are then looked up in their current palette when painting. This means that you no longer alter the background color of a widget by setting it directly, rather you alter either its background role, or the widget's palette. --- Libraries/LibGUI/GWidget.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'Libraries/LibGUI/GWidget.cpp') diff --git a/Libraries/LibGUI/GWidget.cpp b/Libraries/LibGUI/GWidget.cpp index e55ca522af..71c472c0f2 100644 --- a/Libraries/LibGUI/GWidget.cpp +++ b/Libraries/LibGUI/GWidget.cpp @@ -1,26 +1,26 @@ #include #include #include +#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include - #include #include +#include #include #include +#include +#include +#include #include #include #include #include #include +#include +#include +#include +#include REGISTER_GWIDGET(GButton) REGISTER_GWIDGET(GCheckBox) @@ -67,9 +67,8 @@ const GWidgetClassRegistration* GWidgetClassRegistration::find(const String& cla GWidget::GWidget(GWidget* parent) : CObject(parent, true) , m_font(Font::default_font()) + , m_palette(GApplication::the().palette()) { - m_background_color = SystemColor::Window; - m_foreground_color = SystemColor::WindowText; } GWidget::~GWidget() @@ -173,7 +172,7 @@ void GWidget::handle_paint_event(GPaintEvent& event) ASSERT(is_visible()); if (fill_with_background_color()) { GPainter painter(*this); - painter.fill_rect(event.rect(), background_color()); + painter.fill_rect(event.rect(), palette().color(background_role())); } else { #ifdef DEBUG_WIDGET_UNDERDRAW // FIXME: This is a bit broken. @@ -693,3 +692,8 @@ Vector GWidget::child_widgets() const } return widgets; } + +void GWidget::set_palette(const Palette& palette) +{ + m_palette = palette; +} -- cgit v1.2.3