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