]> Dogcows Code - chaz/openbox/blob - obrender/button.c
Adding RrButton to libobrender, ref counted appearances.
[chaz/openbox] / obrender / button.c
1 #include "render.h"
2 #include "button.h"
3 #include "instance.h"
4
5 #include <X11/Xlib.h>
6 #include <X11/Xutil.h>
7 #include <string.h>
8
9 static void RrButtonFreeReal(RrButton* b);
10
11 RrButton *RrButtonNew (const RrInstance *inst)
12 {
13 RrButton *out = NULL;
14
15 out = g_new(RrButton, 1);
16 out->inst = inst;
17 out->ref = 1;
18
19 /* no need to alloc colors, set them null (for freeing later) */
20 out->focused_unpressed_color = NULL;
21 out->unfocused_unpressed_color = NULL;
22 out->focused_pressed_color = NULL;
23 out->unfocused_pressed_color = NULL;
24 out->disabled_focused_color = NULL;
25 out->disabled_unfocused_color = NULL;
26 out->hover_focused_color = NULL;
27 out->hover_unfocused_color = NULL;
28 out->toggled_hover_focused_color = NULL;
29 out->toggled_hover_unfocused_color = NULL;
30 out->toggled_focused_pressed_color = NULL;
31 out->toggled_unfocused_pressed_color = NULL;
32 out->toggled_focused_unpressed_color = NULL;
33 out->toggled_unfocused_unpressed_color = NULL;
34
35 /* same with masks */
36 out->mask = NULL;
37 out->pressed_mask = NULL;
38 out->disabled_mask = NULL;
39 out->hover_mask = NULL;
40 out->toggled_mask = NULL;
41 out->toggled_hover_mask = NULL;
42 out->toggled_pressed_mask = NULL;
43
44 /* allocate appearances */
45 out->a_focused_unpressed = RrAppearanceNew(inst, 1);
46 out->a_unfocused_unpressed = RrAppearanceNew(inst, 1);
47 out->a_focused_pressed = RrAppearanceNew(inst, 1);
48 out->a_unfocused_pressed = RrAppearanceNew(inst, 1);
49 out->a_disabled_focused = RrAppearanceNew(inst, 1);
50 out->a_disabled_unfocused = RrAppearanceNew(inst, 1);
51 out->a_hover_focused = RrAppearanceNew(inst, 1);
52 out->a_hover_unfocused = RrAppearanceNew(inst, 1);
53 out->a_toggled_focused_unpressed = RrAppearanceNew(inst, 1);
54 out->a_toggled_unfocused_unpressed = RrAppearanceNew(inst, 1);
55 out->a_toggled_focused_pressed = RrAppearanceNew(inst, 1);
56 out->a_toggled_unfocused_pressed = RrAppearanceNew(inst, 1);
57 out->a_toggled_hover_focused = RrAppearanceNew(inst, 1);
58 out->a_toggled_hover_unfocused = RrAppearanceNew(inst, 1);
59
60 return out;
61 }
62
63 void RrButtonFree(RrButton *b)
64 {
65 b->ref--;
66 if (b->ref <= 0)
67 RrButtonFreeReal(b);
68 }
69
70 void RrButtonFreeReal(RrButton* b)
71 {
72 /* colors */
73 if (b->focused_unpressed_color)
74 RrColorFree(b->focused_unpressed_color);
75 if (b->unfocused_unpressed_color)
76 RrColorFree(b->unfocused_unpressed_color);
77 if (b->focused_pressed_color)
78 RrColorFree(b->focused_pressed_color);
79 if (b->unfocused_pressed_color)
80 RrColorFree(b->unfocused_pressed_color);
81 if (b->disabled_focused_color)
82 RrColorFree(b->disabled_focused_color);
83 if (b->disabled_unfocused_color)
84 RrColorFree(b->disabled_unfocused_color);
85 if (b->hover_focused_color)
86 RrColorFree(b->hover_focused_color);
87 if (b->hover_unfocused_color)
88 RrColorFree(b->hover_unfocused_color);
89 if (b->toggled_hover_focused_color)
90 RrColorFree(b->toggled_hover_focused_color);
91 if (b->toggled_hover_unfocused_color)
92 RrColorFree(b->toggled_hover_unfocused_color);
93 if (b->toggled_focused_pressed_color)
94 RrColorFree(b->toggled_focused_pressed_color);
95 if (b->toggled_unfocused_pressed_color)
96 RrColorFree(b->toggled_unfocused_pressed_color);
97 if (b->toggled_focused_unpressed_color)
98 RrColorFree(b->toggled_focused_unpressed_color);
99 if (b->toggled_unfocused_unpressed_color)
100 RrColorFree(b->toggled_unfocused_unpressed_color);
101
102 /* masks */
103 }
This page took 0.043775 seconds and 5 git commands to generate.