r851: Merge 2.1:
[cinelerra_cv/ct.git] / guicast / bcresources.C
blobbca3b280e799a2c87eb7dc8a563f7d8ee0eddbb1
1 #include "bcdisplayinfo.h"
2 #include "bcipc.h"
3 #include "bclistbox.inc"
4 #include "bcresources.h"
5 #include "bcsignals.h"
6 #include "bcwindowbase.h"
7 #include "colors.h"
8 #include "colormodels.h"
9 #include "fonts.h"
10 #include "language.h"
11 #include "vframe.h"
13 #include <string.h>
14 #include <sys/ipc.h>
15 #include <sys/shm.h>
16 #include <X11/extensions/XShm.h>
17 #include <unistd.h>
23 int BC_Resources::error = 0;
25 VFrame* BC_Resources::bg_image = 0;
26 VFrame* BC_Resources::menu_bg = 0;
28 #include "images/file_film_png.h"
29 #include "images/file_folder_png.h"
30 #include "images/file_sound_png.h"
31 #include "images/file_unknown_png.h"
32 #include "images/file_column_png.h"
33 VFrame* BC_Resources::type_to_icon[] = 
35         new VFrame(file_folder_png),
36         new VFrame(file_unknown_png),
37         new VFrame(file_film_png),
38         new VFrame(file_sound_png),
39         new VFrame(file_column_png)
42 char* BC_Resources::small_font = N_("-*-helvetica-medium-r-normal-*-10-*");
43 char* BC_Resources::small_font2 = N_("-*-helvetica-medium-r-normal-*-11-*");
44 char* BC_Resources::medium_font = N_("-*-helvetica-bold-r-normal-*-14-*");
45 char* BC_Resources::medium_font2 = N_("-*-helvetica-bold-r-normal-*-14-*");
46 char* BC_Resources::large_font = N_("-*-helvetica-bold-r-normal-*-18-*");
47 char* BC_Resources::large_font2 = N_("-*-helvetica-bold-r-normal-*-20-*");
49 char* BC_Resources::small_fontset = "6x12,*";
50 char* BC_Resources::medium_fontset = "7x14,*";
51 char* BC_Resources::large_fontset = "8x16,*";
53 char* BC_Resources::small_font_xft = N_("-microsoft-verdana-*-*-*-*-*-*-*-*-*-*-*-*");
54 char* BC_Resources::medium_font_xft = N_("-microsoft-verdana-*-*-*-*-*-*-*-*-*-*-*-*");
55 char* BC_Resources::large_font_xft = N_("-microsoft-verdana-*-*-*-*-*-*-*-*-*-*-*-*");
57 suffix_to_type_t BC_Resources::suffix_to_type[] = 
59         { "m2v", ICON_FILM },
60         { "mov", ICON_FILM },
61         { "mp2", ICON_SOUND },
62         { "mp3", ICON_SOUND },
63         { "mpg", ICON_FILM },
64         { "vob", ICON_FILM },
65         { "wav", ICON_SOUND }
68 BC_Signals* BC_Resources::signal_handler = 0;
71 int BC_Resources::x_error_handler(Display *display, XErrorEvent *event)
73         char string[1024];
74         XGetErrorText(event->display, event->error_code, string, 1024);
75 //      printf("BC_Resources::x_error_handler: %s\n", string);
76         BC_Resources::error = 1;
77         return 0;
82 BC_Resources::BC_Resources()
84         display_info = new BC_DisplayInfo("", 0);
85         id_lock = new Mutex("BC_Resources::id_lock");
87         for(int i = 0; i < FILEBOX_HISTORY_SIZE; i++)
88                 filebox_history[i][0] = 0;
90 #ifdef HAVE_XFT
91         XftInitFtLibrary();
92 #endif
94         use_xvideo = 1;
97 #include "images/bar_png.h"
98         static VFrame* default_bar = new VFrame(bar_png);
99         bar_data = default_bar;
103 #include "images/cancel_up_png.h"
104 #include "images/cancel_hi_png.h"
105 #include "images/cancel_dn_png.h"
106         static VFrame* default_cancel_images[] = 
107         {
108                 new VFrame(cancel_up_png),
109                 new VFrame(cancel_hi_png),
110                 new VFrame(cancel_dn_png)
111         };
113 #include "images/ok_up_png.h"
114 #include "images/ok_hi_png.h"
115 #include "images/ok_dn_png.h"
116         static VFrame* default_ok_images[] = 
117         {
118                 new VFrame(ok_up_png),
119                 new VFrame(ok_hi_png),
120                 new VFrame(ok_dn_png)
121         };
123 #include "images/usethis_up_png.h"
124 #include "images/usethis_uphi_png.h"
125 #include "images/usethis_dn_png.h"
126         static VFrame* default_usethis_images[] = 
127         {
128                 new VFrame(usethis_up_png),
129                 new VFrame(usethis_uphi_png),
130                 new VFrame(usethis_dn_png)
131         };
134 #include "images/checkbox_checked_png.h"
135 #include "images/checkbox_dn_png.h"
136 #include "images/checkbox_checkedhi_png.h"
137 #include "images/checkbox_up_png.h"
138 #include "images/checkbox_hi_png.h"
139         static VFrame* default_checkbox_images[] =  
140         {
141                 new VFrame(checkbox_up_png),
142                 new VFrame(checkbox_hi_png),
143                 new VFrame(checkbox_checked_png),
144                 new VFrame(checkbox_dn_png),
145                 new VFrame(checkbox_checkedhi_png)
146         };
148 #include "images/radial_checked_png.h"
149 #include "images/radial_dn_png.h"
150 #include "images/radial_checkedhi_png.h"
151 #include "images/radial_up_png.h"
152 #include "images/radial_hi_png.h"
153         static VFrame* default_radial_images[] =  
154         {
155                 new VFrame(radial_up_png),
156                 new VFrame(radial_hi_png),
157                 new VFrame(radial_checked_png),
158                 new VFrame(radial_dn_png),
159                 new VFrame(radial_checkedhi_png)
160         };
162         static VFrame* default_label_images[] =  
163         {
164                 new VFrame(radial_up_png),
165                 new VFrame(radial_hi_png),
166                 new VFrame(radial_checked_png),
167                 new VFrame(radial_dn_png),
168                 new VFrame(radial_checkedhi_png)
169         };
172 #include "images/file_text_up_png.h"
173 #include "images/file_text_hi_png.h"
174 #include "images/file_text_dn_png.h"
175 #include "images/file_icons_up_png.h"
176 #include "images/file_icons_hi_png.h"
177 #include "images/file_icons_dn_png.h"
178 #include "images/file_newfolder_up_png.h"
179 #include "images/file_newfolder_hi_png.h"
180 #include "images/file_newfolder_dn_png.h"
181 #include "images/file_updir_up_png.h"
182 #include "images/file_updir_hi_png.h"
183 #include "images/file_updir_dn_png.h"
184 #include "images/file_delete_up_png.h"
185 #include "images/file_delete_hi_png.h"
186 #include "images/file_delete_dn_png.h"
187 #include "images/file_reload_up_png.h"
188 #include "images/file_reload_hi_png.h"
189 #include "images/file_reload_dn_png.h"
190         static VFrame* default_filebox_text_images[] = 
191         {
192                 new VFrame(file_text_up_png),
193                 new VFrame(file_text_hi_png),
194                 new VFrame(file_text_dn_png)
195         };
197         static VFrame* default_filebox_icons_images[] = 
198         {
199                 new VFrame(file_icons_up_png),
200                 new VFrame(file_icons_hi_png),
201                 new VFrame(file_icons_dn_png)
202         };
204         static VFrame* default_filebox_updir_images[] =  
205         {
206                 new VFrame(file_updir_up_png),
207                 new VFrame(file_updir_hi_png),
208                 new VFrame(file_updir_dn_png)
209         };
211         static VFrame* default_filebox_newfolder_images[] = 
212         {
213                 new VFrame(file_newfolder_up_png),
214                 new VFrame(file_newfolder_hi_png),
215                 new VFrame(file_newfolder_dn_png)
216         };
218         static VFrame* default_filebox_delete_images[] = 
219         {
220                 new VFrame(file_delete_up_png),
221                 new VFrame(file_delete_hi_png),
222                 new VFrame(file_delete_dn_png)
223         };
225         static VFrame* default_filebox_reload_images[] =
226         {
227                 new VFrame(file_reload_up_png),
228                 new VFrame(file_reload_hi_png),
229                 new VFrame(file_reload_dn_png)
230         };
232 #include "images/listbox_button_dn_png.h"
233 #include "images/listbox_button_hi_png.h"
234 #include "images/listbox_button_up_png.h"
235 #include "images/listbox_button_disabled_png.h"\r
236         static VFrame* default_listbox_button[] = 
237         {
238                 new VFrame(listbox_button_up_png),
239                 new VFrame(listbox_button_hi_png),
240                 new VFrame(listbox_button_dn_png),
241                 new VFrame(listbox_button_disabled_png)
242         };
243         listbox_button = default_listbox_button;
245 #include "images/list_bg_png.h"
246         static VFrame* default_listbox_bg = new VFrame(list_bg_png);
247         listbox_bg = default_listbox_bg;
249 #include "images/listbox_expandchecked_png.h"
250 #include "images/listbox_expandcheckedhi_png.h"
251 #include "images/listbox_expanddn_png.h"
252 #include "images/listbox_expandup_png.h"
253 #include "images/listbox_expanduphi_png.h"
254         static VFrame* default_listbox_expand[] = 
255         {
256                 new VFrame(listbox_expandup_png),
257                 new VFrame(listbox_expanduphi_png),
258                 new VFrame(listbox_expandchecked_png),
259                 new VFrame(listbox_expanddn_png),
260                 new VFrame(listbox_expandcheckedhi_png),
261         };
262         listbox_expand = default_listbox_expand;
264 #include "images/listbox_columnup_png.h"
265 #include "images/listbox_columnhi_png.h"
266 #include "images/listbox_columndn_png.h"
267         static VFrame* default_listbox_column[] = 
268         {
269                 new VFrame(listbox_columnup_png),
270                 new VFrame(listbox_columnhi_png),
271                 new VFrame(listbox_columndn_png)
272         };
273         listbox_column = default_listbox_column;
276 #include "images/listbox_up_png.h"
277 #include "images/listbox_dn_png.h"
278         listbox_up = new VFrame(listbox_up_png);
279         listbox_dn = new VFrame(listbox_dn_png);
280         listbox_title_margin = 0;
281         listbox_title_color = BLACK;
282         listbox_title_hotspot = 5;
283         
284         listbox_border1 = DKGREY;
285         listbox_border2_hi = RED;
286         listbox_border2 = BLACK;
287         listbox_border3_hi = RED;
288         listbox_border3 = MEGREY;
289         listbox_border4 = WHITE;
290         listbox_selected = BLUE;
291         listbox_highlighted = LTGREY;
292         listbox_inactive = WHITE;
293         listbox_text = BLACK;
295 #include "images/pot_hi_png.h"
296 #include "images/pot_up_png.h"
297 #include "images/pot_dn_png.h"
298         static VFrame *default_pot_images[] = 
299         {
300                 new VFrame(pot_up_png),
301                 new VFrame(pot_hi_png),
302                 new VFrame(pot_dn_png)
303         };
305  #include "images/progress_up_png.h"
306  #include "images/progress_hi_png.h"
307         static VFrame* default_progress_images[] = 
308         {
309                 new VFrame(progress_up_png),
310                 new VFrame(progress_hi_png)
311         };
313         pan_data = 0;
314         pan_text_color = YELLOW;
316 #include "images/7seg_small/0_png.h"
317 #include "images/7seg_small/1_png.h"
318 #include "images/7seg_small/2_png.h"
319 #include "images/7seg_small/3_png.h"
320 #include "images/7seg_small/4_png.h"
321 #include "images/7seg_small/5_png.h"
322 #include "images/7seg_small/6_png.h"
323 #include "images/7seg_small/7_png.h"
324 #include "images/7seg_small/8_png.h"
325 #include "images/7seg_small/9_png.h"
326 #include "images/7seg_small/colon_png.h"
327 #include "images/7seg_small/period_png.h"
328 #include "images/7seg_small/a_png.h"
329 #include "images/7seg_small/b_png.h"
330 #include "images/7seg_small/c_png.h"
331 #include "images/7seg_small/d_png.h"
332 #include "images/7seg_small/e_png.h"
333 #include "images/7seg_small/f_png.h"
334 #include "images/7seg_small/space_png.h"
335 #include "images/7seg_small/dash_png.h"
336         static VFrame* default_medium_7segment[] = 
337         {
338                 new VFrame(_0_png),
339                 new VFrame(_1_png),
340                 new VFrame(_2_png),
341                 new VFrame(_3_png),
342                 new VFrame(_4_png),
343                 new VFrame(_5_png),
344                 new VFrame(_6_png),
345                 new VFrame(_7_png),
346                 new VFrame(_8_png),
347                 new VFrame(_9_png),
348                 new VFrame(colon_png),
349                 new VFrame(period_png),
350                 new VFrame(a_png),
351                 new VFrame(b_png),
352                 new VFrame(c_png),
353                 new VFrame(d_png),
354                 new VFrame(e_png),
355                 new VFrame(f_png),
356                 new VFrame(space_png),
357                 new VFrame(dash_png)
358         };
360         generic_button_margin = 15;
361         draw_clock_background=1;
363         use_shm = -1;
365 // Initialize
366         bg_color = ORANGE;
367         bg_shadow1 = DKGREY;
368         bg_shadow2 = BLACK;
369         bg_light1 = WHITE;
370         bg_light2 = bg_color;
372         default_text_color = BLACK;
373         disabled_text_color = MEGREY;
375         button_light = WHITE;           // bright corner
376         button_highlighted = 0xffe000;  // face when highlighted
377         button_down = MDGREY;         // face when down
378         button_up = 0xffc000;           // face when up
379         button_shadow = DKGREY;       // dark corner
380         button_uphighlighted = RED;   // upper side when highlighted
382         tumble_data = 0;
383         tumble_duration = 150;
385         ok_images = default_ok_images;
386         cancel_images = default_cancel_images;
387         usethis_button_images = default_usethis_images;
388         filebox_descend_images = default_ok_images;
390         menu_light = LTCYAN;
391         menu_highlighted = LTBLUE;
392         menu_down = MDCYAN;
393         menu_up = MECYAN;
394         menu_shadow = DKCYAN;
395         menu_popup_bg = 0;
396         menu_title_bg = 0;
397         menu_item_bg = 0;
398         menu_bar_bg = 0;
399         menu_title_bg = 0;
400         popupmenu_images = 0;
401         popupmenu_margin = 10;
402         popupmenu_triangle_margin = 10;
404         min_menu_w = 0;
405         menu_title_text = BLACK;
406         popup_title_text = BLACK;
407         menu_item_text = BLACK;
408         menu_highlighted_fontcolor = BLACK;
409         progress_text = BLACK;
413         text_default = BLACK;
414         highlight_inverse = WHITE ^ BLUE;
415         text_background = WHITE;
416         text_background_hi = LTYELLOW;
417         text_background_noborder_hi = LTGREY;
418         text_background_noborder = -1;
419         text_border1 = DKGREY;
420         text_border2 = BLACK;
421         text_border2_hi = RED;
422         text_border3 = MEGREY;
423         text_border3_hi = LTPINK;
424         text_border4 = WHITE;
425         text_highlight = BLUE;
426         text_inactive_highlight = MEGREY;
428         toggle_highlight_bg = 0;
429         toggle_text_margin = 0;
431 // Delays must all be different for repeaters
432         double_click = 300;
433         blink_rate = 250;
434         scroll_repeat = 150;
435         tooltip_delay = 1000;
436         tooltip_bg_color = YELLOW;
437         tooltips_enabled = 1;
439         filebox_margin = 110;
440         dirbox_margin = 90;
441         filebox_mode = LISTBOX_TEXT;
442         sprintf(filebox_filter, "*");
443         filebox_w = 640;
444         filebox_h = 480;
445         filebox_columntype[0] = FILEBOX_NAME;
446         filebox_columntype[1] = FILEBOX_SIZE;
447         filebox_columntype[2] = FILEBOX_DATE;
448         filebox_columntype[3] = FILEBOX_EXTENSION;
449         filebox_columnwidth[0] = 200;
450         filebox_columnwidth[1] = 100;
451         filebox_columnwidth[2] = 100;
452         filebox_columnwidth[3] = 100;
453         dirbox_columntype[0] = FILEBOX_NAME;
454         dirbox_columntype[1] = FILEBOX_DATE;
455         dirbox_columnwidth[0] = 200;
456         dirbox_columnwidth[1] = 100;
458         filebox_text_images = default_filebox_text_images;
459         filebox_icons_images = default_filebox_icons_images;
460         filebox_updir_images = default_filebox_updir_images;
461         filebox_newfolder_images = default_filebox_newfolder_images;
462         filebox_delete_images = default_filebox_delete_images;
463         filebox_reload_images = default_filebox_reload_images;
464         directory_color = BLUE;
465         file_color = BLACK;
467         filebox_sortcolumn = 0;
468         filebox_sortorder = BC_ListBox::SORT_ASCENDING;
469         dirbox_sortcolumn = 0;
470         dirbox_sortorder = BC_ListBox::SORT_ASCENDING;
472         pot_images = default_pot_images;
473         pot_offset = 2;
474         pot_x1 = pot_images[0]->get_w() / 2 - pot_offset;
475         pot_y1 = pot_images[0]->get_h() / 2 - pot_offset;
476         pot_r = pot_x1;
477         pot_needle_color = BLACK;
479         progress_images = default_progress_images;
481         xmeter_images = 0;
482         ymeter_images = 0;
483         meter_font = SMALLFONT_3D;
484         meter_font_color = RED;
485         meter_title_w = 20;
486         meter_3d = 1;
487         medium_7segment = default_medium_7segment;
489         audiovideo_color = RED;
491         use_fontset = 0;
493 // Xft has priority over font set
494 #ifdef HAVE_XFT
495         use_xft = 1;
496 #else
497         use_xft = 0;
498 #endif
501         drag_radius = 10;
502         recursive_resizing = 1;
504         
507 BC_Resources::~BC_Resources()
511 int BC_Resources::initialize_display(BC_WindowBase *window)
513 // Set up IPC cleanup handlers
514         bc_init_ipc();
516 // Test for shm.  Must come before yuv test
517         init_shm(window);
518         return 0;
522 int BC_Resources::init_shm(BC_WindowBase *window)
524         use_shm = 1;
525         XSetErrorHandler(BC_Resources::x_error_handler);
527         if(!XShmQueryExtension(window->display)) use_shm = 0;
528         else
529         {
530                 XShmSegmentInfo test_shm;
531                 XImage *test_image;
532                 unsigned char *data;
533                 test_image = XShmCreateImage(window->display, window->vis, window->default_depth,
534                 ZPixmap, (char*)NULL, &test_shm, 5, 5);
536                 test_shm.shmid = shmget(IPC_PRIVATE, 5 * test_image->bytes_per_line, (IPC_CREAT | 0777 ));
537                 data = (unsigned char *)shmat(test_shm.shmid, NULL, 0);
538         shmctl(test_shm.shmid, IPC_RMID, 0);
539                 BC_Resources::error = 0;
540                 XShmAttach(window->display, &test_shm);
541         XSync(window->display, False);
542                 if(BC_Resources::error) use_shm = 0;
543                 XDestroyImage(test_image);
544                 shmdt(test_shm.shmaddr);
545         }
546 //      XSetErrorHandler(0);
547         return 0;
550 int BC_Resources::get_top_border()
552         return display_info->get_top_border();
555 int BC_Resources::get_left_border()
557         return display_info->get_left_border();
560 int BC_Resources::get_right_border()
562         return display_info->get_right_border();
565 int BC_Resources::get_bottom_border()
567         return display_info->get_bottom_border();
571 int BC_Resources::get_bg_color() { return bg_color; }
573 int BC_Resources::get_bg_shadow1() { return bg_shadow1; }
575 int BC_Resources::get_bg_shadow2() { return bg_shadow2; }
577 int BC_Resources::get_bg_light1() { return bg_light1; }
579 int BC_Resources::get_bg_light2() { return bg_light2; }