diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-12-24 20:57:54 +0100 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-12-24 21:27:16 +0100 |
commit | a79bac428b7857b9db2d0641daf3b7f2e3deb91f (patch) | |
tree | 7fee3f0764147238e218b79aa1f526c36deeecb0 /Libraries/LibGUI/GWidget.cpp | |
parent | cb4e51a7a58d1c536d51484f83239d8cd9009616 (diff) | |
download | serenity-a79bac428b7857b9db2d0641daf3b7f2e3deb91f.zip |
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.
Diffstat (limited to 'Libraries/LibGUI/GWidget.cpp')
-rw-r--r-- | Libraries/LibGUI/GWidget.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
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 <AK/Assertions.h> #include <AK/JsonObject.h> #include <LibDraw/GraphicsBitmap.h> +#include <LibDraw/Palette.h> #include <LibGUI/GAction.h> #include <LibGUI/GApplication.h> -#include <LibGUI/GEvent.h> -#include <LibGUI/GLayout.h> -#include <LibGUI/GMenu.h> -#include <LibGUI/GPainter.h> -#include <LibGUI/GWidget.h> -#include <LibGUI/GWindow.h> -#include <LibGUI/GWindowServerConnection.h> -#include <unistd.h> - #include <LibGUI/GButton.h> #include <LibGUI/GCheckBox.h> +#include <LibGUI/GEvent.h> #include <LibGUI/GGroupBox.h> #include <LibGUI/GLabel.h> +#include <LibGUI/GLayout.h> +#include <LibGUI/GMenu.h> +#include <LibGUI/GPainter.h> #include <LibGUI/GRadioButton.h> #include <LibGUI/GScrollBar.h> #include <LibGUI/GSlider.h> #include <LibGUI/GSpinBox.h> #include <LibGUI/GTextBox.h> +#include <LibGUI/GWidget.h> +#include <LibGUI/GWindow.h> +#include <LibGUI/GWindowServerConnection.h> +#include <unistd.h> 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*> GWidget::child_widgets() const } return widgets; } + +void GWidget::set_palette(const Palette& palette) +{ + m_palette = palette; +} |