]> icculus.org git repositories - dana/openbox.git/blob - render2/theme.c
rendering fixes for gl
[dana/openbox.git] / render2 / theme.c
1 #include "render.h"
2 #include "theme.h"
3 #include <stdlib.h>
4
5 struct RrTheme *RrThemeLoad(struct RrInstance *inst, const char *name)
6 {
7     struct RrTheme *theme;
8     struct RrColor pri, sec, bor;
9
10     theme = malloc(sizeof(struct RrTheme));
11     theme->inst = inst;
12
13 #define MERRY
14 #ifdef MERRY
15
16     theme->bevel = 1;
17     theme->bwidth = 1;
18     theme->cbwidth = 0;
19     theme->handle_height = 4;
20
21     theme->title_layout = "NLIMC";
22
23     theme->title_font = RrFontOpen(inst,
24                                   "arial:bold:pixelsize=10:"
25                                   "shadow=true:shadowoffset=1:shadowtint=0.1");
26     theme->title_justify = RR_CENTER;
27
28     RrColorSet(&theme->b_color, 0, 0, 0, 1);
29     RrColorSet(&theme->cb_color, 0, 0, 0, 1);
30     RrColorSet(&theme->cb_color_f, 0, 0, 0, 1);
31     RrColorSet(&theme->title_color, 1, 1, 1, 1);
32     RrColorSet(&theme->title_color_f, 1, 1, 1, 1);
33     RrColorSet(&theme->button_color, 0.3, 0.3, 0.3, 1);
34     RrColorSet(&theme->button_color_f, 0.12, 0.12, 0.12, 1);
35     RrColorSet(&theme->menu_title_color, 1, 1, 1, 1);
36     RrColorSet(&theme->menu_item_color, 1, 1, 1, 1);
37     RrColorSet(&theme->menu_disabled_color, 1, 1, 1, 1);
38     RrColorSet(&theme->menu_hilite_color, 1, 1, 1, 1);
39
40     theme->max = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
41     theme->max_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
42     theme->max_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
43     theme->max_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
44     theme->iconify = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
45     theme->iconify_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
46     theme->iconify_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
47     theme->iconify_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
48     theme->close = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
49     theme->close_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
50     theme->close_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
51     theme->close_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
52     theme->desk = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
53     theme->desk_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
54     theme->desk_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
55     theme->desk_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
56     theme->shade = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
57     theme->shade_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
58     theme->shade_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
59     theme->shade_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
60
61     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
62     RrPlanarSet(theme->max, RR_PLANAR_SOLID, RR_BEVEL_NONE,
63                 &pri, NULL, 0, NULL);
64     RrPlanarSet(theme->max_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
65                 &pri, NULL, 0, NULL);
66
67     RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
68     RrPlanarSet(theme->max_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
69                 &pri, NULL, 0, NULL);
70     RrPlanarSet(theme->max_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
71                 &pri, NULL, 0, NULL);
72
73     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
74     RrPlanarSet(theme->iconify, RR_PLANAR_SOLID, RR_BEVEL_NONE,
75                 &pri, NULL, 0, NULL);
76     RrPlanarSet(theme->iconify_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
77                 &pri, NULL, 0, NULL);
78
79     RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
80     RrPlanarSet(theme->iconify_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
81                 &pri, NULL, 0, NULL);
82     RrPlanarSet(theme->iconify_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
83                 &pri, NULL, 0, NULL);
84
85     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
86     RrPlanarSet(theme->close, RR_PLANAR_SOLID, RR_BEVEL_NONE,
87                 &pri, NULL, 0, NULL);
88     RrPlanarSet(theme->close_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
89                 &pri, NULL, 0, NULL);
90
91     RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
92     RrPlanarSet(theme->close_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
93                 &pri, NULL, 0, NULL);
94     RrPlanarSet(theme->close_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
95                 &pri, NULL, 0, NULL);
96
97     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
98     RrPlanarSet(theme->desk, RR_PLANAR_SOLID, RR_BEVEL_NONE,
99                 &pri, NULL, 0, NULL);
100     RrPlanarSet(theme->desk_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
101                 &pri, NULL, 0, NULL);
102
103     RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
104     RrPlanarSet(theme->desk_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
105                 &pri, NULL, 0, NULL);
106     RrPlanarSet(theme->desk_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
107                 &pri, NULL, 0, NULL);
108
109     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
110     RrPlanarSet(theme->shade, RR_PLANAR_SOLID, RR_BEVEL_NONE,
111                 &pri, NULL, 0, NULL);
112     RrPlanarSet(theme->shade_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
113                 &pri, NULL, 0, NULL);
114
115     RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
116     RrPlanarSet(theme->shade_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
117                 &pri, NULL, 0, NULL);
118     RrPlanarSet(theme->shade_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
119                 &pri, NULL, 0, NULL);
120
121     theme->frame = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
122
123     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
124     RrColorSet(&bor, 0, 0, 0, 1);
125     RrPlanarSet(theme->frame, RR_PLANAR_SOLID, RR_BEVEL_NONE,
126                 &pri, NULL, 1, &bor);
127
128     theme->title = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
129     theme->title_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
130
131     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
132     RrColorSet(&bor, 0, 0, 0, 1);
133     RrPlanarSet(theme->title, RR_PLANAR_SOLID, RR_BEVEL_NONE,
134                 &pri, NULL, 1, &bor);
135     RrPlanarSet(theme->title_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
136                 &pri, NULL, 1, &bor);
137
138     theme->plate = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
139     theme->plate_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
140
141     RrColorSet(&pri, 0, 0, 0, 1);
142     RrPlanarSet(theme->plate, RR_PLANAR_SOLID, RR_BEVEL_NONE,
143                 &pri, NULL, 0, NULL);
144     RrPlanarSet(theme->plate_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
145                 &pri, NULL, 0, NULL);
146
147     theme->label = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
148     theme->label_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
149
150     RrColorSet(&pri, 0.70, 0.70, 0.68, 1);
151     RrColorSet(&sec, 0.75, 0.73, 0.71, 1);
152     RrColorSet(&bor, 0.42, 0.41, 0.42, 1);
153     RrPlanarSet(theme->label, RR_PLANAR_VERTICAL, RR_BEVEL_NONE,
154                 &pri, &sec, 1, &bor);
155     RrColorSet(&pri, 0.30, 0.34, 0.65, 1);
156     RrColorSet(&sec, 0.35, 0.43, 0.75, 1);
157     RrColorSet(&bor, 0, 0, 0, 1);
158     RrPlanarSet(theme->label_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
159                 &pri, &sec, 1, &bor);
160
161
162     theme->grip = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
163     theme->grip_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
164
165     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
166     RrColorSet(&bor, 0, 0, 0, 1);
167     RrPlanarSet(theme->grip, RR_PLANAR_SOLID, RR_BEVEL_NONE,
168                 &pri, NULL, 1, &bor);
169     RrPlanarSet(theme->grip_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
170                 &pri, NULL, 1, &bor);
171
172     theme->handle = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
173     theme->handle_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
174
175     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
176     RrColorSet(&bor, 0, 0, 0, 1);
177     RrPlanarSet(theme->handle, RR_PLANAR_SOLID, RR_BEVEL_NONE,
178                 &pri, NULL, 1, &bor);
179     RrPlanarSet(theme->handle_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
180                 &pri, NULL, 1, &bor);
181
182     theme->menu_title = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
183
184     RrColorSet(&pri, 0.29, 0.35, 0.65, 1);
185     RrColorSet(&bor, 0, 0, 0, 1);
186     RrPlanarSet(theme->menu_title, RR_PLANAR_SOLID, RR_BEVEL_NONE,
187                 &pri, NULL, 1, &bor);
188
189     theme->menu_item = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
190
191     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
192     RrPlanarSet(theme->menu_item, RR_PLANAR_SOLID, RR_BEVEL_NONE,
193                 &pri, NULL, 0, NULL);
194
195     theme->menu_disabled = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
196
197     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
198     RrPlanarSet(theme->menu_item, RR_PLANAR_SOLID, RR_BEVEL_NONE,
199                 &pri, NULL, 0, NULL);
200
201     theme->menu_hilite = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
202
203     /* app stuff */
204
205     RrColorSet(&theme->app_label_color, 1, 1, 1, 1);
206     RrColorSet(&theme->app_label_color_h, 1, 1, 1, 1);
207
208     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
209     RrPlanarSet(theme->menu_item, RR_PLANAR_SOLID, RR_BEVEL_NONE,
210                 &pri, NULL, 0, NULL);
211
212     theme->app_bg = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
213     theme->app_bg_h = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
214
215     RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
216     RrColorSet(&bor, 0, 0, 0, 1);
217     RrPlanarSet(theme->app_bg, RR_PLANAR_SOLID, RR_BEVEL_NONE,
218                 &pri, NULL, 1, &bor);
219     RrPlanarSet(theme->app_bg_h, RR_PLANAR_SOLID, RR_BEVEL_NONE,
220                 &pri, NULL, 1, &bor);
221
222     theme->app_label = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
223     theme->app_label_h = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
224
225     RrColorSet(&pri, 0.70, 0.70, 0.68, 1);
226     RrColorSet(&sec, 0.75, 0.73, 0.71, 1);
227     RrColorSet(&bor, 0.42, 0.41, 0.42, 1);
228     RrPlanarSet(theme->app_label, RR_PLANAR_VERTICAL, RR_BEVEL_NONE,
229                 &pri, &sec, 1, &bor); 
230     RrColorSet(&pri, 0.30, 0.34, 0.65, 1);
231     RrColorSet(&sec, 0.35, 0.43, 0.75, 1);
232     RrColorSet(&bor, 0, 0, 0, 1);
233     RrPlanarSet(theme->app_label_h, RR_PLANAR_SOLID, RR_BEVEL_NONE,
234                 &pri, &sec, 1, &bor);
235
236 #endif
237
238     RrColorSet(&pri, 0, 0, 0, 0); /* clear */
239
240     theme->icon = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
241     RrPlanarSet(theme->icon, RR_PLANAR_SOLID, RR_BEVEL_NONE,
242                 &pri, NULL, 0, NULL);
243
244     theme->app_icon = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
245     RrPlanarSet(theme->app_icon, RR_PLANAR_SOLID, RR_BEVEL_NONE,
246                 &pri, NULL, 0, NULL);
247
248     return theme;
249 }
250
251 void RrThemeDestroy(struct RrTheme *theme)
252 {
253     if (theme) {
254         RrFontClose(theme->title_font);
255
256         RrSurfaceFree(theme->max);
257         RrSurfaceFree(theme->max_f);
258         RrSurfaceFree(theme->max_p);
259         RrSurfaceFree(theme->max_p_f);
260
261         RrSurfaceFree(theme->iconify);
262         RrSurfaceFree(theme->iconify_f);
263         RrSurfaceFree(theme->iconify_p);
264         RrSurfaceFree(theme->iconify_p_f);
265
266         RrSurfaceFree(theme->close);
267         RrSurfaceFree(theme->close_f);
268         RrSurfaceFree(theme->close_p);
269         RrSurfaceFree(theme->close_p_f);
270
271         RrSurfaceFree(theme->desk);
272         RrSurfaceFree(theme->desk_f);
273         RrSurfaceFree(theme->desk_p);
274         RrSurfaceFree(theme->desk_p_f);
275
276         RrSurfaceFree(theme->shade);
277         RrSurfaceFree(theme->shade_f);
278         RrSurfaceFree(theme->shade_p);
279         RrSurfaceFree(theme->shade_p_f);
280
281         RrSurfaceFree(theme->icon);
282
283         RrSurfaceFree(theme->frame);
284
285         RrSurfaceFree(theme->title);
286         RrSurfaceFree(theme->title_f);
287
288         RrSurfaceFree(theme->label);
289         RrSurfaceFree(theme->label_f);
290
291         RrSurfaceFree(theme->grip);
292         RrSurfaceFree(theme->grip_f);
293
294         RrSurfaceFree(theme->handle);
295         RrSurfaceFree(theme->handle_f);
296
297         RrSurfaceFree(theme->menu_title);
298         RrSurfaceFree(theme->menu_item);
299         RrSurfaceFree(theme->menu_disabled);
300         RrSurfaceFree(theme->menu_hilite);
301
302         RrSurfaceFree(theme->app_bg);
303         RrSurfaceFree(theme->app_bg_h);
304         RrSurfaceFree(theme->app_label);
305         RrSurfaceFree(theme->app_label_h);
306         RrSurfaceFree(theme->app_icon);
307
308         free(theme);
309     }
310 }