6 struct RrTheme *RrThemeLoad(struct RrInstance *inst, const char *name)
9 struct RrColor pri, sec, bor;
11 theme = malloc(sizeof(struct RrTheme));
20 theme->handle_height = 4;
22 theme->title_layout = "NLIMC";
24 theme->title_font = RrFontOpen(inst,
25 "arial:bold:pixelsize=10:"
26 "shadow=true:shadowoffset=1:shadowtint=0.1");
27 theme->title_justify = RR_CENTER;
29 RrColorSet(&theme->b_color, 0, 0, 0, 1);
30 RrColorSet(&theme->cb_color, 0, 0, 0, 1);
31 RrColorSet(&theme->cb_color_f, 0, 0, 0, 1);
32 RrColorSet(&theme->title_color, 1, 1, 1, 1);
33 RrColorSet(&theme->title_color_f, 1, 1, 1, 1);
34 RrColorSet(&theme->button_color, 0.3, 0.3, 0.3, 1);
35 RrColorSet(&theme->button_color_f, 0.12, 0.12, 0.12, 1);
36 RrColorSet(&theme->menu_title_color, 1, 1, 1, 1);
37 RrColorSet(&theme->menu_item_color, 1, 1, 1, 1);
38 RrColorSet(&theme->menu_disabled_color, 1, 1, 1, 1);
39 RrColorSet(&theme->menu_hilite_color, 1, 1, 1, 1);
41 theme->max = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
42 theme->max_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
43 theme->max_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
44 theme->max_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
45 theme->iconify = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
46 theme->iconify_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
47 theme->iconify_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
48 theme->iconify_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
49 theme->close = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
50 theme->close_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
51 theme->close_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
52 theme->close_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
53 theme->desk = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
54 theme->desk_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
55 theme->desk_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
56 theme->desk_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
57 theme->shade = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
58 theme->shade_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
59 theme->shade_p = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
60 theme->shade_p_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
62 RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
63 RrPlanarSet(theme->max, RR_PLANAR_SOLID, RR_BEVEL_NONE,
65 RrPlanarSet(theme->max_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
68 RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
69 RrPlanarSet(theme->max_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
71 RrPlanarSet(theme->max_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
74 RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
75 RrPlanarSet(theme->iconify, RR_PLANAR_SOLID, RR_BEVEL_NONE,
77 RrPlanarSet(theme->iconify_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
80 RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
81 RrPlanarSet(theme->iconify_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
83 RrPlanarSet(theme->iconify_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
86 RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
87 RrPlanarSet(theme->close, RR_PLANAR_SOLID, RR_BEVEL_NONE,
89 RrPlanarSet(theme->close_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
92 RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
93 RrPlanarSet(theme->close_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
95 RrPlanarSet(theme->close_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
98 RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
99 RrPlanarSet(theme->desk, RR_PLANAR_SOLID, RR_BEVEL_NONE,
100 &pri, NULL, 0, NULL);
101 RrPlanarSet(theme->desk_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
102 &pri, NULL, 0, NULL);
104 RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
105 RrPlanarSet(theme->desk_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
106 &pri, NULL, 0, NULL);
107 RrPlanarSet(theme->desk_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
108 &pri, NULL, 0, NULL);
110 RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
111 RrPlanarSet(theme->shade, RR_PLANAR_SOLID, RR_BEVEL_NONE,
112 &pri, NULL, 0, NULL);
113 RrPlanarSet(theme->shade_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
114 &pri, NULL, 0, NULL);
116 RrColorSet(&pri, 0.71, 0.7, 0.68, 1);
117 RrPlanarSet(theme->shade_p, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
118 &pri, NULL, 0, NULL);
119 RrPlanarSet(theme->shade_p_f, RR_PLANAR_SOLID, RR_SUNKEN_OUTER,
120 &pri, NULL, 0, NULL);
122 theme->frame = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
124 RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
125 RrColorSet(&bor, 0, 0, 0, 1);
126 RrPlanarSet(theme->frame, RR_PLANAR_NONE, RR_BEVEL_NONE,
127 NULL, NULL, 1, &bor);
129 theme->title = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
130 theme->title_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
132 RrColorSet(&pri, 0.9, 0.91, 0.9, 1);
133 RrColorSet(&bor, 0, 0, 0, 1);
134 RrPlanarSet(theme->title, RR_PLANAR_SOLID, RR_BEVEL_NONE,
135 &pri, NULL, 1, &bor);
136 RrPlanarSet(theme->title_f, RR_PLANAR_SOLID, RR_BEVEL_NONE,
137 &pri, NULL, 1, &bor);
139 theme->plate = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
140 theme->plate_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
142 RrPlanarSet(theme->plate, RR_PLANAR_NONE, RR_BEVEL_NONE,
143 NULL, NULL, 0, NULL);
144 RrPlanarSet(theme->plate_f, RR_PLANAR_NONE, RR_BEVEL_NONE,
145 NULL, NULL, 0, NULL);
147 theme->label = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
148 theme->label_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
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);
162 theme->grip = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
163 theme->grip_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
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);
172 theme->handle = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
173 theme->handle_f = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
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);
182 theme->menu_title = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
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);
189 theme->menu_item = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
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);
195 theme->menu_disabled = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
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);
201 theme->menu_hilite = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
205 RrColorSet(&theme->app_label_color, 1, 1, 1, 1);
206 RrColorSet(&theme->app_label_color_h, 1, 1, 1, 1);
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);
212 theme->app_bg = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
213 theme->app_bg_h = RrSurfaceNewProto(RR_SURFACE_PLANAR, 0);
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);
222 theme->app_label = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
223 theme->app_label_h = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
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);
238 RrColorSet(&pri, 0, 0, 0, 0); /* clear */
240 theme->icon = RrSurfaceNewProto(RR_SURFACE_PLANAR, 1);
241 RrPlanarSet(theme->icon, RR_PLANAR_SOLID, RR_BEVEL_NONE,
242 &pri, NULL, 0, NULL);
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);
251 void RrThemeDestroy(struct RrTheme *theme)
254 RrFontClose(theme->title_font);
256 RrSurfaceFree(theme->max);
257 RrSurfaceFree(theme->max_f);
258 RrSurfaceFree(theme->max_p);
259 RrSurfaceFree(theme->max_p_f);
261 RrSurfaceFree(theme->iconify);
262 RrSurfaceFree(theme->iconify_f);
263 RrSurfaceFree(theme->iconify_p);
264 RrSurfaceFree(theme->iconify_p_f);
266 RrSurfaceFree(theme->close);
267 RrSurfaceFree(theme->close_f);
268 RrSurfaceFree(theme->close_p);
269 RrSurfaceFree(theme->close_p_f);
271 RrSurfaceFree(theme->desk);
272 RrSurfaceFree(theme->desk_f);
273 RrSurfaceFree(theme->desk_p);
274 RrSurfaceFree(theme->desk_p_f);
276 RrSurfaceFree(theme->shade);
277 RrSurfaceFree(theme->shade_f);
278 RrSurfaceFree(theme->shade_p);
279 RrSurfaceFree(theme->shade_p_f);
281 RrSurfaceFree(theme->icon);
283 RrSurfaceFree(theme->frame);
285 RrSurfaceFree(theme->title);
286 RrSurfaceFree(theme->title_f);
288 RrSurfaceFree(theme->label);
289 RrSurfaceFree(theme->label_f);
291 RrSurfaceFree(theme->grip);
292 RrSurfaceFree(theme->grip_f);
294 RrSurfaceFree(theme->handle);
295 RrSurfaceFree(theme->handle_f);
297 RrSurfaceFree(theme->menu_title);
298 RrSurfaceFree(theme->menu_item);
299 RrSurfaceFree(theme->menu_disabled);
300 RrSurfaceFree(theme->menu_hilite);
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);
312 int RrThemeLabelHeight(struct RrTheme *t)
315 h = RrFontHeight(t->title_font);
316 h += 2 * MAX(RrPlanarEdgeWidth(t->label),
317 RrPlanarEdgeWidth(t->label_f));