mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 14:42:44 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									cb4e51a7a5
								
							
						
					
					
						commit
						a79bac428b
					
				
					 62 changed files with 448 additions and 410 deletions
				
			
		|  | @ -9,6 +9,7 @@ | |||
| #include <LibDraw/Font.h> | ||||
| #include <LibDraw/Orientation.h> | ||||
| #include <LibDraw/Rect.h> | ||||
| #include <LibDraw/SystemTheme.h> | ||||
| #include <LibGUI/GEvent.h> | ||||
| #include <LibGUI/GShortcut.h> | ||||
| 
 | ||||
|  | @ -16,11 +17,12 @@ | |||
|     extern GWidgetClassRegistration registration_##class_name; \ | ||||
|     GWidgetClassRegistration registration_##class_name(#class_name, [](GWidget* parent) { return class_name::construct(parent); }); | ||||
| 
 | ||||
| class GraphicsBitmap; | ||||
| class GAction; | ||||
| class GLayout; | ||||
| class GMenu; | ||||
| class GWindow; | ||||
| class GraphicsBitmap; | ||||
| class Palette; | ||||
| 
 | ||||
| enum class SizePolicy { | ||||
|     Fixed, | ||||
|  | @ -149,6 +151,12 @@ public: | |||
|     void move_by(int x, int y) { move_by({ x, y }); } | ||||
|     void move_by(const Point& delta) { set_relative_rect({ relative_position().translated(delta), size() }); } | ||||
| 
 | ||||
|     ColorRole background_role() const { return m_background_role; } | ||||
|     void set_background_role(ColorRole role) { m_background_role = role; } | ||||
| 
 | ||||
|     ColorRole foreground_role() const { return m_foreground_role; } | ||||
|     void set_foreground_role(ColorRole role) { m_foreground_role = role; } | ||||
| 
 | ||||
|     Color background_color() const { return m_background_color; } | ||||
|     Color foreground_color() const { return m_foreground_color; } | ||||
| 
 | ||||
|  | @ -230,6 +238,9 @@ public: | |||
| 
 | ||||
|     void do_layout(); | ||||
| 
 | ||||
|     const Palette& palette() const { return *m_palette; } | ||||
|     void set_palette(const Palette&); | ||||
| 
 | ||||
| protected: | ||||
|     explicit GWidget(GWidget* parent = nullptr); | ||||
| 
 | ||||
|  | @ -271,6 +282,8 @@ private: | |||
|     OwnPtr<GLayout> m_layout; | ||||
| 
 | ||||
|     Rect m_relative_rect; | ||||
|     ColorRole m_background_role { ColorRole::Window }; | ||||
|     ColorRole m_foreground_role { ColorRole::WindowText }; | ||||
|     Color m_background_color; | ||||
|     Color m_foreground_color; | ||||
|     NonnullRefPtr<Font> m_font; | ||||
|  | @ -288,6 +301,8 @@ private: | |||
|     bool m_updates_enabled { true }; | ||||
| 
 | ||||
|     HashMap<GShortcut, GAction*> m_local_shortcut_actions; | ||||
| 
 | ||||
|     NonnullRefPtr<Palette> m_palette; | ||||
| }; | ||||
| 
 | ||||
| template<> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling