mousetrap v0.2.0
Loading...
Searching...
No Matches
style_manager.hpp
1//
2// Copyright (c) Clemens Cords (mail@clemens-cords.com), created 8/16/23
3//
4
5#pragma once
6
7#include <mousetrap/gtk_common.hpp>
8#include <mousetrap/color.hpp>
9
10#include <vector>
11#include <map>
12
13namespace mousetrap
14{
15 #ifndef DOXYGEN
16 class StyleClass;
17 namespace detail
18 {
19 struct _StyleClassInternal
20 {
21 GObject parent_instance;
22
23 GtkCssProvider* provider;
24 std::string* name;
25 std::map<std::string, std::map<std::string, std::string>>* target_to_properties;
26 };
27 using StyleClassInternal = _StyleClassInternal;
28
29 static bool validate_css_name(const std::string&);
30 }
31 #endif
32
33 /// @brief style class manager singleton, keeps the global list of style classes updated
35 {
36 public:
37 /// @brief update / add a style class
38 /// @param style class
39 static void add_style_class(const StyleClass&);
40
41 /// @brief remove style class
42 /// @param style class
43 static void remove_style_class(const StyleClass&);
44
45 /// @brief retrieve style class
46 /// @param name
47 /// @return style class
48 static StyleClass get_style_class(const std::string&);
49
50 /// @brief run arbitrary css code
51 /// @param css
52 static void add_css(const std::string&);
53
54 /// @brief define a color, can be used by prefixing the given name with `@`
55 /// @param name
56 /// @param value
57 static std::string define_color(const std::string& name, RGBA color);
58
59 /// @brief define a color, can be used by prefixing the given name with `@`
60 /// @param name
61 /// @param value
62 static std::string define_color(const std::string& name, HSVA color);
63
64 /// @brief convert mousetrap color to css
65 /// @param color RGBA
66 /// @return css string
67 static std::string color_to_css(RGBA);
68
69 /// @brief convert mousetrap color to css
70 /// @param color HSVA
71 /// @return css string
72 static std::string color_to_css(HSVA);
73
74 private:
75 static inline std::vector<std::string> _named_colors = std::vector<std::string>();
76 static inline GtkCssProvider* _named_color_provider = nullptr;
77 static inline std::map<std::string, detail::StyleClassInternal*> _style_classes = std::map<std::string, detail::StyleClassInternal*>();
78 };
79
80 using StyleClassTarget = const std::string&;
81
82 /// @brief class that collects css information
84 {
85 public:
86 /// @brief construct with name
87 /// @param unique name
88 StyleClass(const std::string& name);
89
90 /// @brief construct from internal
91 /// @param internal
92 StyleClass(detail::StyleClassInternal* internal);
93
94 /// @brief destructor
96
97 /// @brief expose as native object
98 operator NativeObject() const;
99
100 /// @brief get unique name
101 /// @return name
102 std::string get_name() const;
103
104 /// @brief export as string
105 /// @return valid css class definition
106 std::string serialize() const;
107
108 /// @brief set property of target
109 /// @param target
110 /// @param property css property name
111 /// @param value css property value
112 void set_property(StyleClassTarget target, const std::string& property, const std::string& value);
113
114 /// @brief set property of self
115 /// @param property css property name
116 /// @param value css property value
117 void set_property(const std::string& property, const std::string& value);
118
119 /// @brief get property of target
120 /// @param target
121 /// @param property css property name
122 /// @return css property value as string, or ""
123 std::string get_property(StyleClassTarget target, const std::string& property) const;
124
125 /// @brief get property of target
126 /// @param target
127 /// @param property css property name
128 /// @return css property value as string, or ""
129 std::string get_property(const std::string& property) const;
130
131 private:
132 detail::StyleClassInternal* _internal = nullptr;
133 };
134
135 // CSS PROPERTIES
136
137 #define DEFINE_CSS_PROPERTY(NAME, value) constexpr const char* STYLE_PROPERTY_##NAME = value;
138 DEFINE_CSS_PROPERTY(FOREGROUND_COLOR, "color")
139 DEFINE_CSS_PROPERTY(COLOR, "color")
140 DEFINE_CSS_PROPERTY(BACKGROUND_COLOR, "background-color")
141 DEFINE_CSS_PROPERTY(OPACITY, "opacity")
142 DEFINE_CSS_PROPERTY(FILTER, "filter")
143 DEFINE_CSS_PROPERTY(FONT, "font")
144 DEFINE_CSS_PROPERTY(FONT_FAMILY, "font-family")
145 DEFINE_CSS_PROPERTY(FONT_VARIANT, "font-variant")
146 DEFINE_CSS_PROPERTY(FONT_SIZE, "font-size")
147 DEFINE_CSS_PROPERTY(FONT_STYLE, "font-style")
148 DEFINE_CSS_PROPERTY(FONT_WEIGHT, "font-weight")
149 DEFINE_CSS_PROPERTY(FONT_TRANSFORM, "font-transform")
150 DEFINE_CSS_PROPERTY(CARET_COLOR, "caret-color")
151 DEFINE_CSS_PROPERTY(TEXT_DECORATION, "text-decoration")
152 DEFINE_CSS_PROPERTY(TEXT_DECORATION_COLOR, "text-decoration-color")
153 DEFINE_CSS_PROPERTY(TEXT_DECORATION_STYLE, "text-decoration-style")
154 DEFINE_CSS_PROPERTY(TEXT_SHADOW, "text-shadow")
155 DEFINE_CSS_PROPERTY(ICON_SIZE, "-gtk-icon-size")
156 DEFINE_CSS_PROPERTY(TRANSFORM, "transform")
157 DEFINE_CSS_PROPERTY(TRANSFORM_ORIGIN, "transform-origin")
158 DEFINE_CSS_PROPERTY(BORDER, "border")
159 DEFINE_CSS_PROPERTY(BORDER_STYLE, "border-style")
160 DEFINE_CSS_PROPERTY(BORDER_COLOR, "border-color")
161 DEFINE_CSS_PROPERTY(BORDER_WIDTH, "border-width")
162 DEFINE_CSS_PROPERTY(BORDER_RADIUS, "border-radius")
163 DEFINE_CSS_PROPERTY(BORDER_SPACING, "border-spacing")
164 DEFINE_CSS_PROPERTY(OUTLINE, "outline")
165 DEFINE_CSS_PROPERTY(OUTLINE_STYLE, "outline-style")
166 DEFINE_CSS_PROPERTY(OUTLINE_COLOR, "outline-color")
167 DEFINE_CSS_PROPERTY(OUTLINE_WIDTH, "outline-width")
168 DEFINE_CSS_PROPERTY(BOX_SHADOW, "box-shadow")
169 DEFINE_CSS_PROPERTY(BACKGROUND_CLIP, "background-clip")
170 DEFINE_CSS_PROPERTY(BACKGROUND_ORIGIN, "background-origin")
171 DEFINE_CSS_PROPERTY(BACKGROUND_SIZE, "background-size")
172 DEFINE_CSS_PROPERTY(BACKGROUND_POSITION, "background-position")
173 DEFINE_CSS_PROPERTY(BACKGROUND_REPEAT, "background-repeat")
174 DEFINE_CSS_PROPERTY(TRANSITION, "transition")
175 DEFINE_CSS_PROPERTY(TRANSITION_PROPERTY, "transition-property")
176 DEFINE_CSS_PROPERTY(TRANSITION_DURATION, "transition-duration")
177 DEFINE_CSS_PROPERTY(TRANSITION_TIMING_FUNCTION, "transition-timing-function")
178 DEFINE_CSS_PROPERTY(TRANSITION_DELAY, "transition-delay")
179 DEFINE_CSS_PROPERTY(ANIMATION, "animation")
180 DEFINE_CSS_PROPERTY(ANIMATION_NAME, "animation-name")
181 DEFINE_CSS_PROPERTY(ANIMATION_DURATION, "animation-duration")
182 DEFINE_CSS_PROPERTY(ANIMATION_TIMING_FUNCTION, "animation-timing-function")
183 DEFINE_CSS_PROPERTY(ANIMATION_ITERATION_COUNT, "animation-iteration-count")
184 DEFINE_CSS_PROPERTY(ANIMATION_DIRECTION, "animation-direction")
185 DEFINE_CSS_PROPERTY(ANIMATION_PLAY_STATE, "animation-play-state")
186 DEFINE_CSS_PROPERTY(ANIMATION_DELAY, "animation-delay")
187 DEFINE_CSS_PROPERTY(ANIMATION_FILL_MODE, "animation-fill-mode")
188
189 // PRE-MADE STYLE CLASSES
190
191 #define DEFINE_PRE_MADE_STYLE_CLASS(NAME, css_name) static inline const StyleClass STYLE_CLASS_##NAME = StyleClass(css_name);
192 DEFINE_PRE_MADE_STYLE_CLASS(SUGGESTED_ACTION, "suggested-action");
193 DEFINE_PRE_MADE_STYLE_CLASS(DESTRUCTIVE_ACTION, "destructive-action");
194 DEFINE_PRE_MADE_STYLE_CLASS(BUTTON_FLAT, "flat");
195 DEFINE_PRE_MADE_STYLE_CLASS(BUTTON_RAISED, "raised");
196 DEFINE_PRE_MADE_STYLE_CLASS(BUTTON_CIRCULAR, "circular");
197 DEFINE_PRE_MADE_STYLE_CLASS(BUTTON_PILL, "pill");
198
199 DEFINE_PRE_MADE_STYLE_CLASS(BOX_LINKED, "linked");
200 DEFINE_PRE_MADE_STYLE_CLASS(TOOLBAR, "toolbar");
201 DEFINE_PRE_MADE_STYLE_CLASS(DIMMED, "dim-label");
202
203 DEFINE_PRE_MADE_STYLE_CLASS(FONT_HEADING_1, "title-1");
204 DEFINE_PRE_MADE_STYLE_CLASS(FONT_HEADING_2, "title-2");
205 DEFINE_PRE_MADE_STYLE_CLASS(FONT_HEADING_3, "title-3");
206 DEFINE_PRE_MADE_STYLE_CLASS(FONT_HEADING_4, "title-4");
207 DEFINE_PRE_MADE_STYLE_CLASS(FONT_LARGER, "heading");
208 DEFINE_PRE_MADE_STYLE_CLASS(FONT_REGULAR, "body");
209 DEFINE_PRE_MADE_STYLE_CLASS(FONT_CAPTION_HEADING, "caption-heading");
210 DEFINE_PRE_MADE_STYLE_CLASS(FONT_CAPTION, "caption");
211 DEFINE_PRE_MADE_STYLE_CLASS(FONT_MONOSPACE, "monospace");
212 DEFINE_PRE_MADE_STYLE_CLASS(FONT_NUMERIC, "numeric");
213
214 DEFINE_PRE_MADE_STYLE_CLASS(COLOR_ACCENT, "accent");
215 DEFINE_PRE_MADE_STYLE_CLASS(COLOR_SUCCESS, "success");
216 DEFINE_PRE_MADE_STYLE_CLASS(COLOR_WARNING, "warning");
217 DEFINE_PRE_MADE_STYLE_CLASS(COLOR_ERROR, "error");
218
219 DEFINE_PRE_MADE_STYLE_CLASS(ACTIVATABLE, "activatable");
220 DEFINE_PRE_MADE_STYLE_CLASS(CARD, "card");
221
222 DEFINE_PRE_MADE_STYLE_CLASS(LIST_VIEW_SIDEBAR, "navigation-sidebar");
223 DEFINE_PRE_MADE_STYLE_CLASS(LIST_VIEW_RICH_LIST, "rich-list");
224 DEFINE_PRE_MADE_STYLE_CLASS(LIST_VIEW_DATA_TABLE, "data-table");
225 DEFINE_PRE_MADE_STYLE_CLASS(LIST_VIEW_MENUBAR, "menu");
226
227 DEFINE_PRE_MADE_STYLE_CLASS(ICON_DROPSHADOW, "icon-dropshadow");
228 DEFINE_PRE_MADE_STYLE_CLASS(ICON_SMALL, "lowres-icon");
229
230 DEFINE_PRE_MADE_STYLE_CLASS(CHECK_BUTTON_ROUND, "selection-mode");
231
232 DEFINE_PRE_MADE_STYLE_CLASS(ON_SCREEN_DISPLAY, "osd");
233 DEFINE_PRE_MADE_STYLE_CLASS(BACKGROUND, "background");
234 DEFINE_PRE_MADE_STYLE_CLASS(VIEW, "view");
235
236 // STYLE TARGETS
237
238 #define DEFINE_STYLE_CLASS_TARGET(NAME, value) constexpr const char* STYLE_TARGET_##NAME = value;
239 DEFINE_STYLE_CLASS_TARGET(SELF, "")
240
241 // ActionBar
242
243 DEFINE_STYLE_CLASS_TARGET(ACTION_BAR, "actionbar")
244 DEFINE_STYLE_CLASS_TARGET(ACTION_BAR_BOX_START, "actionbar>revealer>box>box.start") // widgets added via `push_front`
245 DEFINE_STYLE_CLASS_TARGET(ACTION_BAR_BOX_END, "actionbar>revealer>box>box.end") // widgets added via `push_back`
246
247 // AspectFrame
248
249 DEFINE_STYLE_CLASS_TARGET(ASPECT_FRAME, "aspectframe");
250
251 // Box
252
253 DEFINE_STYLE_CLASS_TARGET(BOX, "box");
254
255 // Button
256
257 DEFINE_STYLE_CLASS_TARGET(BUTTON, "button");
258 DEFINE_STYLE_CLASS_TARGET(BUTTON_PRESSED, "button:active"); // while click animation is playing
259
260 // CenterBox
261
262 DEFINE_STYLE_CLASS_TARGET(CENTER_BOX, "box");
263
264 // CheckButton
265
266 DEFINE_STYLE_CLASS_TARGET(CHECK_BUTTON, "checkbutton");
267 DEFINE_STYLE_CLASS_TARGET(CHECK_BUTTON_CHECK_MARK_ACTIVE, "check:checked") // state is `ACTIVE`
268 DEFINE_STYLE_CLASS_TARGET(CHECK_BUTTON_CHECK_MARK_INCONSISTENT, "check::indeterminate") // state is `INCONSISTENT`
269 DEFINE_STYLE_CLASS_TARGET(CHECK_BUTTON_CHECK_MARK_INACTIVE, "check:not(:checked):not(:indeterminate)") // state is `INACTIVE`
270
271 // ClampFrame
272
273 DEFINE_STYLE_CLASS_TARGET(CLAMP_FRAME, "clamp");
274
275 // ColumnView
276
277 DEFINE_STYLE_CLASS_TARGET(COLUMN_VIEW, "columnview");
278
279 // DropDown
280
281 DEFINE_STYLE_CLASS_TARGET(DROP_DOWN, "dropdown");
282
283 // Entry
284
285 DEFINE_STYLE_CLASS_TARGET(ENTRY, "entry");
286 DEFINE_STYLE_CLASS_TARGET(ENTRY_TEXT, "entry>text"); // letters of entries text
287
288 // Expander
289
290 DEFINE_STYLE_CLASS_TARGET(EXPANDER, "expander-widget");
291 DEFINE_STYLE_CLASS_TARGET(EXPANDER_TITLE, "expander-widget>box>title"); // label widget
292 DEFINE_STYLE_CLASS_TARGET(EXPANDER_TITLE_ARROW, "expander-widget>box>title>expander"); // arrow indicator next to label
293
294 // Fixed
295 // no css targets
296
297 // FlowBox
298
299 DEFINE_STYLE_CLASS_TARGET(FLOW_BOX, "flowbox");
300 DEFINE_STYLE_CLASS_TARGET(FLOW_BOX_CHILD, "flowbox>flowboxchild,flowboxchild"); // any child
301
302 // Frame
303
304 DEFINE_STYLE_CLASS_TARGET(FRAME, "frame");
305
306 // Grid
307
308 DEFINE_STYLE_CLASS_TARGET(GRID, "grid");
309
310 // GridView
311
312 DEFINE_STYLE_CLASS_TARGET(GRID_VIEW, "gridview");
313 DEFINE_STYLE_CLASS_TARGET(GRID_VIEW_CHILDREN, "gridview>child"); // any child
314 DEFINE_STYLE_CLASS_TARGET(GRID_VIEW_SELECTED, "gridview>child:selected"); // child that is currently selected
315 DEFINE_STYLE_CLASS_TARGET(GRID_VIEW_NOT_SELECTED, "gridview>child:not(:selected)"); // child that is not currently selected
316
317 // HeaderBar
318
319 DEFINE_STYLE_CLASS_TARGET(HEADER_BAR, "headerbar");
320
321 // ImageDisplay
322
323 DEFINE_STYLE_CLASS_TARGET(IMAGE_DISPLAY, "image");
324
325 // Label
326
327 DEFINE_STYLE_CLASS_TARGET(LABEL, "label");
328
329 // LevelBar
330
331 DEFINE_STYLE_CLASS_TARGET(LEVEL_BAR, "levelbar");
332 DEFINE_STYLE_CLASS_TARGET(LEVEL_BAR_TROUGH, "levelbar>trough"); // background of level bar, does not change with level bar value
333 DEFINE_STYLE_CLASS_TARGET(LEVEL_BAR_BLOCK_LOW, "levelbar>trough>block.low"); // block area with value in [0%, 25%]
334 DEFINE_STYLE_CLASS_TARGET(LEVEL_BAR_BLOCK_HIGH, "levelbar>trough>block.high"); // block area with value in [25%, 75%]
335 DEFINE_STYLE_CLASS_TARGET(LEVEL_BAR_BLOCK_FULL, "levelbar>trough>block.full"); // block area with value in [75%, 100%]
336
337 // ListView
338
339 DEFINE_STYLE_CLASS_TARGET(LIST_VIEW, "listview");
340 DEFINE_STYLE_CLASS_TARGET(LIST_VIEW_CHILDREN, "listview>row"); // any child
341 DEFINE_STYLE_CLASS_TARGET(LIST_VIEW_SELECTED, "listview>row:selected"); // child that is selected
342 DEFINE_STYLE_CLASS_TARGET(LIST_VIEW_NOT_SELECTED, "listview>row:not(:selected)"); // child that is not selected
343
344 // MenuBar
345
346 DEFINE_STYLE_CLASS_TARGET(MENU_BAR, "menubar");
347 DEFINE_STYLE_CLASS_TARGET(MENU_BAR_ITEM, "menubar>item"); // item in outermost menu model
348 DEFINE_STYLE_CLASS_TARGET(MENU_BAR_DISABLED_ITEM, "menubar>item:disabled"); // item in outermost menu mode
349 DEFINE_STYLE_CLASS_TARGET(MENU_BAR_SELECTED_ITEM, "menubar>item:selected");
350
351 // Notebook
352
353 DEFINE_STYLE_CLASS_TARGET(NOTEBOOK, "notebook");
354 DEFINE_STYLE_CLASS_TARGET(NOTEBOOK_TABS, "notebook>header>tabs>tab")
355 DEFINE_STYLE_CLASS_TARGET(NOTEBOOK_SELECTED_TAB, "notebook>header>tabs>tab:checked")
356
357 // Overlay
358
359 DEFINE_STYLE_CLASS_TARGET(OVERLAY, "overlay");
360
361 // Paned
362
363 DEFINE_STYLE_CLASS_TARGET(PANED, "paned");
364 DEFINE_STYLE_CLASS_TARGET(PANED_HANDLE, "paned>separator");
365 DEFINE_STYLE_CLASS_TARGET(PANED_START_CHILD, "paned>*:first-child");
366 DEFINE_STYLE_CLASS_TARGET(PANED_END_CHILD, "paned>*:last-child");
367
368 // Popover
369
370 DEFINE_STYLE_CLASS_TARGET(POPOVER, "popover>contents");
371 DEFINE_STYLE_CLASS_TARGET(POPOVER_ARROW, "popover>arrow");
372
373 // PopoverButton
374
375 DEFINE_STYLE_CLASS_TARGET(POPOVER_BUTTON, "menubutton");
376 DEFINE_STYLE_CLASS_TARGET(POPOVER_BUTTON_INDICATOR, "menubutton>button arrow");
377
378 // PopoverMenu
379
380 DEFINE_STYLE_CLASS_TARGET(POPOVER_MENU, "popover.menu>contents");
381 DEFINE_STYLE_CLASS_TARGET(POPOVER_MENU_ARROW, "popover.menu>arrow");
382
383 // PopupMessageOverlay
384
385 DEFINE_STYLE_CLASS_TARGET(POPUP_MESSAGE_OVERLAY, "toastoverlay");
386 DEFINE_STYLE_CLASS_TARGET(POPUP_MESSAGE_OVERLAY_POPUP_MESSAGE, "toastoverlay>toast")
387 DEFINE_STYLE_CLASS_TARGET(POPUP_MESSAGE_OVERLAY_POPUP_MESSAGE_CONTENT, "toastoverlay>toast>widget")
388 DEFINE_STYLE_CLASS_TARGET(POPUP_MESSAGE_OVERLAY_POPUP_MESSAGE_ACTION_BUTTON, "toastoverlay>toast>button")
389 DEFINE_STYLE_CLASS_TARGET(POPUP_MESSAGE_OVERLAY_POPUP_MESSAGE_CLOSE_BUTTON, "toastoverlay>toast>button.circular.float")
390
391 // ProgressBar
392
393 DEFINE_STYLE_CLASS_TARGET(PROGRESS_BAR, "progressbar>trough>progress");
394 DEFINE_STYLE_CLASS_TARGET(PROGRESS_BAR_EMPTY, "progressbar>trough.empty");
395 DEFINE_STYLE_CLASS_TARGET(PROGRESS_BAR_FULL, "progressbar>trough.full>progress");
396 DEFINE_STYLE_CLASS_TARGET(PROGRESS_BAR_TROUGH, "progressbar>trough");
397 DEFINE_STYLE_CLASS_TARGET(PROGRESS_BAR_TEXT, "progressbar>text");
398 DEFINE_STYLE_CLASS_TARGET(PROGRESS_BAR_DURING_PULSE, "progressbar>progressbar progress.pulse");
399
400 // RenderArea
401
402 // no css targets
403
404 // Revealer
405
406 DEFINE_STYLE_CLASS_TARGET(REVEALER, "revealer");
407
408 // Scale
409
410 DEFINE_STYLE_CLASS_TARGET(SCALE, "scale");
411 DEFINE_STYLE_CLASS_TARGET(SCALE_TROUGH, "scale>trough");
412 DEFINE_STYLE_CLASS_TARGET(SCALE_TROUGH_FILL, "scale>trough>highlight");
413 DEFINE_STYLE_CLASS_TARGET(SCALE_SLIDER, "scale>trough>slider");
414 DEFINE_STYLE_CLASS_TARGET(SCALE_VALUE_TEXT, "scale>value");
415
416 // ScrollBar
417
418 DEFINE_STYLE_CLASS_TARGET(SCROLLBAR, "scrollbar");
419 DEFINE_STYLE_CLASS_TARGET(SCROLLBAR_TROUGH, "scrollbar>range>trough");
420 DEFINE_STYLE_CLASS_TARGET(SCOLLBAR_SLIDER, "scrollbar>range>trough>slider");
421
422 // Separator
423
424 DEFINE_STYLE_CLASS_TARGET(SEPARATOR, "separator");
425
426 // SpinButton
427
428 DEFINE_STYLE_CLASS_TARGET(SPIN_BUTTON, "spinbutton");
429 DEFINE_STYLE_CLASS_TARGET(SPIN_BUTTON_TEXT, "spinbutton>text");
430 DEFINE_STYLE_CLASS_TARGET(SPIN_BUTTON_BUTTON_INCREASE, "spinbutton>button.up");
431 DEFINE_STYLE_CLASS_TARGET(SPIN_BUTTON_BUTTON_DECREASE, "spinbutton>button.down");
432
433 // Spinner
434
435 DEFINE_STYLE_CLASS_TARGET(SPINNER, "spinner:checked"); // only applied if set_is_spinning is true
436
437 // Stack
438
439 DEFINE_STYLE_CLASS_TARGET(STACK, "stack");
440
441 // StackSwitcher
442
443 DEFINE_STYLE_CLASS_TARGET(STACK_SWITCHER, "stackswitcher");
444
445 // StackSidebar
446
447 DEFINE_STYLE_CLASS_TARGET(STACK_SIDEBAR, "stacksidebar");
448
449 // Switch
450
451 DEFINE_STYLE_CLASS_TARGET(SWITCH, "switch");
452 DEFINE_STYLE_CLASS_TARGET(SWITCH_SLIDER, "switch>slider");
453 DEFINE_STYLE_CLASS_TARGET(SWITCH_NOT_ACTIVE, "switch:not(:checked)");
454 DEFINE_STYLE_CLASS_TARGET(SWITCH_ACTIVE, "switch:checked");
455
456 // TextView
457
458 DEFINE_STYLE_CLASS_TARGET(TEXT_VIEW, "textview");
459 DEFINE_STYLE_CLASS_TARGET(TEXT_VIEW_TEXT, "textview>text");
460 /// \bug textview subnodes don't apply css correctly
461
462 // TransformBin
463
464 DEFINE_STYLE_CLASS_TARGET(TRANSFORM_BIN, "transformbin");
465
466 // ToggleButton
467
468 DEFINE_STYLE_CLASS_TARGET(TOGGLE_BUTTON, "button.toggle");
469 DEFINE_STYLE_CLASS_TARGET(TOGGLE_BUTTON_ACTIVE, "button.toggle:checked");
470 DEFINE_STYLE_CLASS_TARGET(TOGGLE_BUTTON_NOT_ACTIVE, "button.toggle:not(:checked)");
471
472 // Viewport
473
474 DEFINE_STYLE_CLASS_TARGET(VIEWPORT, "scrolledwindow");
475 DEFINE_STYLE_CLASS_TARGET(VIEWPORT_HORIZONTAL_SCROLLBAR, "scrolledwindow>scrollbar.horizontal");
476 DEFINE_STYLE_CLASS_TARGET(VIEWPORT_HORIZONTAL_SCROLLBAR_TROUGH, "scrolledwindow>scrollbar.horizontal>range>trough");
477 DEFINE_STYLE_CLASS_TARGET(VIEWPORT_HORIZONTAL_SCROLLBAR_SLIDER, "scrolledwindow>scrollbar.horizontal>range>trough>slider");
478 DEFINE_STYLE_CLASS_TARGET(VIEWPORT_VERTICAL_SCROLLBAR, "scrolledwindow>scrollbar.vertical");
479 DEFINE_STYLE_CLASS_TARGET(VIEWPORT_VERTICAL_SCROLLBAR_TROUGH, "scrolledwindow>scrollbar.vertical>range>trough");
480 DEFINE_STYLE_CLASS_TARGET(VIEWPORT_VERTICAL_SCROLLBAR_SLIDER, "scrolledwindow>scrollbar.vertical>range>trough>slider");
481
482 // Window
483
484 DEFINE_STYLE_CLASS_TARGET(WINDOW, "window");
485
486 // Widget
487
488 DEFINE_STYLE_CLASS_TARGET(WIDGET, "widget");
489
490 // General
491 DEFINE_STYLE_CLASS_TARGET(TEXT_ENTRY, "text");
492 DEFINE_STYLE_CLASS_TARGET(TEXT_SELECTION, "selection");
493}
class that collects css information
Definition: style_manager.hpp:84
~StyleClass()
destructor
Definition: style_manager.cpp:171
std::string get_name() const
get unique name
Definition: style_manager.cpp:196
std::string serialize() const
export as string
Definition: style_manager.cpp:181
std::string get_property(StyleClassTarget target, const std::string &property) const
get property of target
Definition: style_manager.cpp:215
void set_property(StyleClassTarget target, const std::string &property, const std::string &value)
set property of target
Definition: style_manager.cpp:201
color representation in HSVA
Definition: color.hpp:76
color representation in RGBA
Definition: color.hpp:24
style class manager singleton, keeps the global list of style classes updated
Definition: style_manager.hpp:35
static StyleClass get_style_class(const std::string &)
retrieve style class
Definition: style_manager.cpp:100
static std::string color_to_css(RGBA)
convert mousetrap color to css
Definition: style_manager.cpp:126
static void remove_style_class(const StyleClass &)
remove style class
Definition: style_manager.cpp:90
static void add_style_class(const StyleClass &)
update / add a style class
Definition: style_manager.cpp:65
static void add_css(const std::string &)
run arbitrary css code
Definition: style_manager.cpp:114
static std::string define_color(const std::string &name, RGBA color)
define a color, can be used by prefixing the given name with @
Definition: style_manager.cpp:143