]> icculus.org git repositories - dana/openbox.git/blob - otk/renderstyle.cc
add RenderControl::drawMask
[dana/openbox.git] / otk / renderstyle.cc
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2
3 #include "config.h"
4
5 #include "renderstyle.hh"
6 #include "display.hh"
7 #include "screeninfo.hh"
8
9 #include <cassert>
10
11 namespace otk {
12
13 RenderStyle **RenderStyle::_styles = 0;
14 std::list<StyleNotify*> *RenderStyle::_notifies = 0;
15
16 void RenderStyle::initialize()
17 {
18   int screens = ScreenCount(**display);
19   _styles = new RenderStyle*[screens];
20   for (int i = 0; i < screens; ++i)
21     _styles[i] = new RenderStyle(i, ""); // XXX get a path
22   _notifies = new std::list<StyleNotify*>[screens];
23 }
24
25 void RenderStyle::destroy()
26 {
27   int screens = ScreenCount(**display);
28   for (int i = 0; i < screens; ++i)
29     delete _styles[i];
30   delete [] _styles;
31   delete [] _notifies;
32 }
33
34 void RenderStyle::registerNotify(int screen, StyleNotify *n)
35 {
36   assert(screen >= 0 && screen < ScreenCount(**display));
37   _notifies[screen].push_back(n);
38 }
39
40 void RenderStyle::unregisterNotify(int screen, StyleNotify *n)
41 {
42   assert(screen >= 0 && screen < ScreenCount(**display));
43   _notifies[screen].remove(n);
44 }
45
46 RenderStyle *RenderStyle::style(int screen)
47 {
48   assert(screen >= 0 && screen < ScreenCount(**display));
49   return _styles[screen];
50 }
51
52 RenderStyle::RenderStyle(int screen, const std::string &stylefile)
53   : _screen(screen),
54     _file(stylefile)
55 {
56 // pick one..
57 #define FIERON
58 //#define MERRY
59
60 #ifdef FIERON
61   _root_color = new RenderColor(_screen, 0x272a2f);
62   
63   _text_color_focus = new RenderColor(_screen, 0x272a2f);
64   _text_color_unfocus = new RenderColor(_screen, 0x676869);
65
66   _button_color_focus = new RenderColor(_screen, 0x96ba86);
67   _button_color_unfocus = new RenderColor(_screen, 0x676869);
68
69   _frame_border_color = new RenderColor(_screen, 0x181f24);
70   _frame_border_width = 1;
71
72   _client_border_color_focus = new RenderColor(_screen, 0x858687);
73   _client_border_color_unfocus = new RenderColor(_screen, 0x555657);
74   _client_border_width = 1;
75
76   _titlebar_focus = new RenderTexture(_screen,
77                                       false,
78                                       RenderTexture::Flat,
79                                       RenderTexture::Bevel1,
80                                       false,
81                                       RenderTexture::Vertical,
82                                       false,
83                                       0x858687,
84                                       0x373a3f,
85                                       0x0,
86                                       0x0);
87   _titlebar_unfocus = new RenderTexture(_screen,
88                                         false,
89                                         RenderTexture::Flat,
90                                         RenderTexture::Bevel1,
91                                         false,
92                                         RenderTexture::Vertical,
93                                         false,
94                                         0x555657,
95                                         0x171a1f,
96                                         0x0,
97                                         0x0);
98
99   _label_focus = new RenderTexture(_screen,
100                                    false,
101                                    RenderTexture::Flat,
102                                    RenderTexture::Bevel1,
103                                    true,
104                                    RenderTexture::Vertical,
105                                    false,
106                                    0x96ba86,
107                                    0x5a724c,
108                                    0x181f24,
109                                    0x0);
110   _label_unfocus = new RenderTexture(_screen,
111                                      false,
112                                      RenderTexture::Sunken,
113                                      RenderTexture::Bevel1,
114                                      false,
115                                      RenderTexture::CrossDiagonal,
116                                      false,
117                                      0x555657,
118                                      0x272a2f,
119                                      0x0,
120                                      0x0);
121
122
123   _handle_focus = new RenderTexture(_screen,
124                                     false,
125                                     RenderTexture::Flat,
126                                     RenderTexture::Bevel1,
127                                     false,
128                                     RenderTexture::Vertical,
129                                     false,
130                                     0x858687,
131                                     0x373a3f,
132                                     0x0,
133                                     0x0);
134   _handle_unfocus = new RenderTexture(_screen,
135                                       false,
136                                       RenderTexture::Flat,
137                                       RenderTexture::Bevel1,
138                                       false,
139                                       RenderTexture::Vertical,
140                                       false,
141                                       0x555657,
142                                       0x171a1f,
143                                       0x0,
144                                       0x0);
145
146   
147   _button_unpress_focus = new RenderTexture(_screen,
148                                             false,
149                                             RenderTexture::Raised,
150                                             RenderTexture::Bevel2,
151                                             false,
152                                             RenderTexture::CrossDiagonal,
153                                             false,
154                                             0x858687,
155                                             0x272a2f,
156                                             0x0,
157                                             0x0);
158   _button_unpress_unfocus = new RenderTexture(_screen,
159                                               false,
160                                               RenderTexture::Raised,
161                                               RenderTexture::Bevel2,
162                                               false,
163                                               RenderTexture::CrossDiagonal,
164                                               false,
165                                               0x555657,
166                                               0x171a1f,
167                                               0x0,
168                                               0x0);
169
170   _button_press_focus = new RenderTexture(_screen,
171                                           false,
172                                           RenderTexture::Sunken,
173                                           RenderTexture::Bevel2,
174                                           false,
175                                           RenderTexture::CrossDiagonal,
176                                           false,
177                                           0x96ba86,
178                                           0x5a724c,
179                                           0x0,
180                                           0x0);
181   _button_press_unfocus = new RenderTexture(_screen,
182                                             false,
183                                             RenderTexture::Sunken,
184                                             RenderTexture::Bevel2,
185                                             false,
186                                             RenderTexture::CrossDiagonal,
187                                             false,
188                                             0x555657,
189                                             0x171a1f,
190                                             0x0,
191                                             0x0);
192
193   _grip_focus = new RenderTexture(_screen,
194                                   false,
195                                   RenderTexture::Flat,
196                                   RenderTexture::Bevel1,
197                                   false,
198                                   RenderTexture::Vertical,
199                                   false,
200                                   0x96ba86,
201                                   0x5a724c,
202                                   0x0,
203                                   0x0);
204   _grip_unfocus = new RenderTexture(_screen,
205                                     false,
206                                     RenderTexture::Flat,
207                                     RenderTexture::Bevel1,
208                                     false,
209                                     RenderTexture::Vertical,
210                                     false,
211                                     0x555657,
212                                     0x171a1f,
213                                     0x0,
214                                     0x0);
215
216   _label_font = new Font(_screen, "Arial,Sans-9:bold", true, 1, 0x40);
217   _label_justify = RightBottomJustify;
218
219   _max_mask = new PixmapMask();
220   _max_mask->w = _max_mask->h = 8;
221   {
222     //char data[] = { 0x7e, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0x7e };
223     char data []  = {0x00, 0x00, 0x18, 0x3c, 0x66, 0x42, 0x00, 0x00 };
224     _max_mask->mask =
225       XCreateBitmapFromData(**display,
226                             display->screenInfo(_screen)->rootWindow(),
227                             data, 8, 8);
228   }
229
230   _icon_mask = new PixmapMask();
231   _icon_mask->w = _icon_mask->h = 8;
232   {
233     //char data[] = { 0x00, 0x00, 0xc3, 0xe7, 0x7e, 0x3c, 0x18, 0x00 };
234     char data[] = { 0x00, 0x00, 0x42, 0x66, 0x3c, 0x18, 0x00, 0x00 };
235     _icon_mask->mask =
236       XCreateBitmapFromData(**display,
237                             display->screenInfo(_screen)->rootWindow(),
238                             data, 8, 8);
239   }
240   
241   _alldesk_mask = new PixmapMask();
242   _alldesk_mask->w = _alldesk_mask->h = 8;
243   {
244     //char data[] = { 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00 };
245     char data[] = { 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00 };
246     _alldesk_mask->mask =
247       XCreateBitmapFromData(**display,
248                             display->screenInfo(_screen)->rootWindow(),
249                             data, 8, 8);
250   }
251   
252   _close_mask = new PixmapMask();
253   _close_mask->w = _close_mask->h = 8;
254   {
255     //char data[] = { 0xc3, 0xe7, 0x7e, 0x3c, 0x3c, 0x7e, 0xe7, 0xc3 };
256     char data[] = { 0x00, 0xc3, 0x66, 0x3c, 0x3c, 0x66, 0xc3, 0x00 };
257     _close_mask->mask =
258       XCreateBitmapFromData(**display,
259                             display->screenInfo(_screen)->rootWindow(),
260                             data, 8, 8);
261   }
262
263   _bevel_width = 1;
264   _handle_width = 4;
265 #else
266 #  ifdef MERRY
267   _root_color = new RenderColor(_screen, 0x7b756a);
268   
269   _text_color_focus = new RenderColor(_screen, 0xffffff);
270   _text_color_unfocus = new RenderColor(_screen, 0xffffff);
271
272   _button_color_focus = new RenderColor(_screen, 0x222222);
273   _button_color_unfocus = new RenderColor(_screen, 0x333333);
274
275   _frame_border_color = new RenderColor(_screen, 0x222222);
276   _frame_border_width = 1;
277
278   _client_border_color_focus = new RenderColor(_screen, 0x858687);
279   _client_border_color_unfocus = new RenderColor(_screen, 0x555657);
280   _client_border_width = 0;
281
282   _titlebar_focus = new RenderTexture(_screen,
283                                       false,
284                                       RenderTexture::Flat,
285                                       RenderTexture::Bevel1,
286                                       false,
287                                       RenderTexture::Solid,
288                                       false,
289                                       0xe6e6e6,
290                                       0xe6e6e6,  
291                                       0x0,
292                                       0x0);
293   _titlebar_unfocus = new RenderTexture(_screen,
294                                         false,
295                                         RenderTexture::Flat,
296                                         RenderTexture::Bevel1,
297                                         false,
298                                         RenderTexture::Vertical,
299                                         false,
300                                         0xe6e6e6,
301                                         0xd9d9d9,
302                                         0x0,
303                                         0x0);
304
305   _label_focus = new RenderTexture(_screen,
306                                    false,
307                                    RenderTexture::Flat,
308                                    RenderTexture::Bevel1,
309                                    true,
310                                    RenderTexture::Vertical,
311                                    false,
312                                    //0x6a6973,
313                                    //0x6a6973,
314                                    0x4c59a6,
315                                    0x5a6dbd,
316                                    0x222222,
317                                    0x0);
318   //urg this ain't so hot
319 _label_unfocus = new RenderTexture(_screen,
320                                         false,
321                                    RenderTexture::Flat,
322                                    RenderTexture::Bevel1,
323                                    true,
324                                    RenderTexture::Vertical,
325                                    false,
326                                    0xb4b2ad,
327                                    0xc3c1bc,
328                                 0x6a696a,
329                                    0x0);
330
331
332   _handle_focus = new RenderTexture(_screen,
333                                     false,
334                                     RenderTexture::Flat,
335                                     RenderTexture::Bevel1,
336                                     false,
337                                     RenderTexture::Vertical,
338                                     false,
339                                     0xe6e6e6,
340                                         0xd9d9d9,
341                                     0x0,
342                                     0x0);
343   _handle_unfocus = new RenderTexture(_screen,
344                                       false,
345                                       RenderTexture::Flat,
346                                       RenderTexture::Bevel1,
347                                       false,
348                                       RenderTexture::Solid,
349                                       false,
350                                      0xe6e6e6,
351                                         0xe6e6e6,
352                                       0x0,
353                                       0x0);
354
355   
356   _button_unpress_focus = new RenderTexture(_screen,
357                                             false,
358                                             RenderTexture::Flat,
359                                             RenderTexture::Bevel1,
360                                             false,
361                                             RenderTexture::Solid,
362                                             false,
363                                             0xe6e6e6,
364                                         0xe6e6e6,
365                                             0x0,
366                                             0x0);
367   _button_unpress_unfocus = new RenderTexture(_screen,
368                                               false,
369                                               RenderTexture::Flat,
370                                               RenderTexture::Bevel1,
371                                               false,
372                                               RenderTexture::Solid,
373                                               false,
374                                              0xe6e6e6,
375                                         0xe6e6e6,
376                                               0x0,
377                                               0x0);
378
379   _button_press_focus = new RenderTexture(_screen,
380                                           false,
381                                             RenderTexture::Sunken,
382                                             RenderTexture::Bevel2,
383                                           false,
384                                           RenderTexture::Vertical,
385                                           false,
386                                           0xe6e6e6,
387                                           0xe6e6e6,
388                                           0x0,
389                                           0x0);
390   _button_press_unfocus = new RenderTexture(_screen,
391                                             false,
392                                               RenderTexture::Sunken,
393                                             RenderTexture::Bevel2,
394                                             false,
395                                             RenderTexture::Vertical,
396                                             false,
397                                               0xe6e6e6,
398                                         0xe6e6e6,
399                                             0x0,
400                                             0x0);
401
402   _grip_focus = new RenderTexture(_screen,
403                                   false,
404                                   RenderTexture::Flat,
405                                   RenderTexture::Bevel1,
406                                   false,
407                                   RenderTexture::Vertical,
408                                   false,
409                                     0xe6e6e6,
410                                         0xd9d9d9,
411                                   0x0,
412                                   0x0);
413   _grip_unfocus = new RenderTexture(_screen,
414                                     false,
415                                     RenderTexture::Flat,
416                                     RenderTexture::Bevel1,
417                                     false,
418                                     RenderTexture::Solid,
419                                     false,
420                                       0xe6e6e6,
421                                         0xe6e6e6,
422                                     0x0,
423                                     0x0);
424
425   _label_font = new Font(_screen, "Arial,Sans-8", true, 1, 0x3e);
426   _label_justify = CenterJustify;
427
428   _max_mask = new PixmapMask();
429   _max_mask->w = _max_mask->h = 7;
430   {
431     char data []  = {0x7c, 0x44, 0x47, 0x47, 0x7f, 0x1f, 0x1f  };
432     _max_mask->mask =
433       XCreateBitmapFromData(**display,
434                             display->screenInfo(_screen)->rootWindow(),
435                             data, 7, 7);
436   }
437
438   _icon_mask = new PixmapMask();
439   _icon_mask->w = _icon_mask->h = 7;
440   {
441     char data[] = {0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x3e };
442     _icon_mask->mask =
443       XCreateBitmapFromData(**display,
444                             display->screenInfo(_screen)->rootWindow(),
445                             data, 7, 7);
446   }
447   
448   _alldesk_mask = new PixmapMask();
449   _alldesk_mask->w = _alldesk_mask->h = 7;
450   {
451     char data[] = {0x00, 0x36, 0x36, 0x00, 0x36, 0x36, 0x00 };
452     _alldesk_mask->mask =
453       XCreateBitmapFromData(**display,
454                             display->screenInfo(_screen)->rootWindow(),
455                             data, 7, 7);
456   }
457   
458   _close_mask = new PixmapMask();
459   _close_mask->w = _close_mask->h = 7;
460   {
461     char data[] = {  0x22, 0x77, 0x3e, 0x1c, 0x3e, 0x77, 0x22 };
462     _close_mask->mask =
463       XCreateBitmapFromData(**display,
464                             display->screenInfo(_screen)->rootWindow(),
465                             data, 7, 7);
466   }
467
468   _bevel_width = 1;
469   _handle_width = 3;
470 #  else
471 #    error 1
472 #  endif
473 #endif
474 }
475
476 RenderStyle::~RenderStyle()
477 {
478   delete _root_color;
479   
480   delete _text_color_focus;
481   delete _text_color_unfocus;
482
483   delete _button_color_focus;
484   delete _button_color_unfocus;
485
486   delete _frame_border_color;
487
488   delete _client_border_color_focus; 
489   delete _client_border_color_unfocus;
490  
491   delete _titlebar_focus;
492   delete _titlebar_unfocus;
493
494   delete _label_focus;
495   delete _label_unfocus;
496
497   delete _handle_focus;
498   delete _handle_unfocus;
499
500   delete _button_unpress_focus;
501   delete _button_unpress_unfocus;
502   delete _button_press_focus;
503   delete _button_press_unfocus;
504
505   delete _grip_focus;
506   delete _grip_unfocus;
507
508   delete _label_font;
509
510   delete _max_mask;
511   delete _icon_mask;
512   delete _alldesk_mask;
513   delete _close_mask;
514 }
515
516 }