add BC_SCALE env var for hi def monitors, cleanup theme data
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / theme.C
1
2 /*
3  * CINELERRA
4  * Copyright (C) 1997-2011 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #include "awindowgui.h"
23 #include "bcsignals.h"
24 #include "clip.h"
25 #include "bccolors.h"
26 #include "cwindowgui.h"
27 #include "edl.h"
28 #include "edlsession.h"
29 #include "keyframegui.h"
30 #include "language.h"
31 #include "levelwindowgui.h"
32 #include "loadmode.h"
33 #include "localsession.h"
34 #include "mainmenu.h"
35 #include "mainsession.h"
36 #include "mbuttons.h"
37 #include "meterpanel.h"
38 #include "mwindowgui.h"
39 #include "mwindow.h"
40 #include "overlayframe.h"
41 #include "patchbay.h"
42 #include "playtransport.h"
43 //#include "presetsgui.h"
44 #include "recordgui.h"
45 #include "recordmonitor.h"
46 #include "resourcepixmap.h"
47 #include "statusbar.h"
48 #include "theme.h"
49 #include "timebar.h"
50 #include "trackcanvas.h"
51 #include "vframe.h"
52 #include "vwindowgui.h"
53 #include "zoombar.h"
54
55
56 #include <errno.h>
57 #include <string.h>
58
59 #define NEW_VFRAME \
60 new VFrame(default_data.get_w(), default_data.get_h(), BC_RGBA8888)
61
62 Theme::Theme()
63  : BC_Theme()
64 {
65         window_border = xS(10);
66         widget_border = xS(5);
67         this->mwindow = 0;
68         theme_title = _(DEFAULT_THEME);
69         last_image = 0;
70         mtransport_margin = 0;
71         toggle_margin = 0;
72         control_pixels = xS(50);
73         timebar_cursor_color = RED;
74
75         BC_WindowBase::get_resources()->bg_color = BLOND;
76         BC_WindowBase::get_resources()->button_up = 0xffc000;
77         BC_WindowBase::get_resources()->button_highlighted = 0xffe000;
78         BC_WindowBase::get_resources()->recursive_resizing = 0;
79         audio_color = BLACK;
80         fade_h = yS(22);
81         inout_highlight_color = GREEN;
82         meter_h = yS(17);
83         mode_h = yS(30);
84         pan_h = yS(32);
85         pan_x = xS(50);
86         play_h = yS(22);
87         title_h = yS(23);
88         clock_bg_color = BLACK;
89         clock_fg_color = GREEN;
90         assetedit_color = YELLOW;
91         const char *cp = getenv("BC_USE_COMMERCIALS");
92         use_commercials = !cp ? 0 : atoi(cp);
93
94         preferences_category_overlap = 0;
95
96         loadmode_w = xS(350);
97         czoom_w = xS(110);
98
99 #include "data/about_bg_png.h"
100         about_bg = new VFramePng(about_bg_png);
101
102         pane_color = BLACK;
103         drag_pane_color = WHITE;
104
105         appendasset_data = 0;
106         append_data = 0;
107         asset_append_data = 0;
108         asset_disk_data = 0;
109         asset_index_data = 0;
110         asset_info_data = 0;
111         asset_project_data = 0;
112         browse_data = 0;
113         calibrate_data = 0;
114         camerakeyframe_data = 0;
115         cancel_data = 0;
116         chain_data = 0;
117         channel_bg_data = 0;
118         channel_position_data = 0;
119         delete_all_indexes_data = 0;
120         deletebin_data = 0;
121         delete_data = 0;
122         deletedisk_data = 0;
123         deleteproject_data = 0;
124         detach_data = 0;
125         dntriangle_data = 0;
126
127         edit_data = 0;
128         edithandlein_data = 0;
129         edithandleout_data = 0;
130         extract_data = 0;
131         ffmpeg_toggle = 0;
132         proxy_s_toggle = 0;
133         proxy_p_toggle = 0;
134         mask_mode_toggle = 0;
135         infoasset_data = 0;
136         in_point = 0;
137         insert_data = 0;
138         keyframe_data = 0;
139         label_toggle = 0;
140         lift_data = 0;
141         maskkeyframe_data = 0;
142         modekeyframe_data = 0;
143         hardedge_data = 0;
144         movedn_data = 0;
145         moveup_data = 0;
146         newbin_data = 0;
147         no_data = 0;
148         options_data = 0;
149         out_point = 0;
150         over_button = 0;
151         overwrite_data = 0;
152         pankeyframe_data = 0;
153         pasteasset_data = 0;
154         paused_data = 0;
155         picture_data = 0;
156         presentation_data = 0;
157         presentation_loop = 0;
158         presentation_stop = 0;
159         projectorkeyframe_data = 0;
160         redrawindex_data = 0;
161         renamebin_data = 0;
162         reset_data = 0;
163         reverse_data = 0;
164         rewind_data = 0;
165         select_data = 0;
166         shbtn_data = 0;
167         splice_data = 0;
168         start_over_data = 0;
169         statusbar_cancel_data = 0;
170         timebar_view_data = 0;
171         transition_data = 0;
172         uptriangle_data = 0;
173         viewasset_data = 0;
174         vtimebar_bg_data = 0;
175 }
176
177
178 // Need to delete everything here
179 Theme::~Theme()
180 {
181         flush_images();
182
183         aspect_ratios.remove_all_objects();
184         frame_rates.remove_all_objects();
185         frame_sizes.remove_all_objects();
186         sample_rates.remove_all_objects();
187         zoom_values.remove_all_objects();
188
189         delete about_bg;
190 }
191
192 void Theme::flush_images()
193 {
194 }
195
196 void Theme::initialize()
197 {
198         message_normal = BLACK;
199         message_error = RED;
200
201 // Force to use local data for images
202         extern unsigned char _binary_theme_data_start[];
203         set_data(_binary_theme_data_start);
204
205 // Set images which weren't set by subclass
206         new_image("mode_normal", "mode_normal.png");
207         new_image("mode_add", "mode_add.png");
208         new_image("mode_subtract", "mode_subtract.png");
209         new_image("mode_multiply", "mode_multiply.png");
210         new_image("mode_divide", "mode_divide.png");
211         new_image("mode_replace", "mode_replace.png");
212         new_image("mode_max", "mode_max.png");
213         new_image("mode_min", "mode_min.png");
214         new_image("mode_darken", "mode_darken.png");
215         new_image("mode_lighten", "mode_lighten.png");
216         new_image("mode_dst", "mode_dst.png");
217         new_image("mode_dstatop", "mode_dstatop.png");
218         new_image("mode_dstin", "mode_dstin.png");
219         new_image("mode_dstout", "mode_dstout.png");
220         new_image("mode_dstover", "mode_dstover.png");
221         new_image("mode_src", "mode_src.png");
222         new_image("mode_srcatop", "mode_srcatop.png");
223         new_image("mode_srcin", "mode_srcin.png");
224         new_image("mode_srcout", "mode_srcout.png");
225         new_image("mode_srcover", "mode_srcover.png");
226         new_image("mode_and", "mode_and.png");
227         new_image("mode_or", "mode_or.png");
228         new_image("mode_xor", "mode_xor.png");
229         new_image("mode_overlay", "mode_overlay.png");
230         new_image("mode_screen", "mode_screen.png");
231         new_image("mode_burn", "mode_burn.png");
232         new_image("mode_dodge", "mode_dodge.png");
233         new_image("mode_hardlight", "mode_hardlight.png");
234         new_image("mode_softlight", "mode_softlight.png");
235         new_image("mode_difference", "mode_difference.png");
236
237         new_image_set("mode_popup", 3, "mode_up.png", "mode_hi.png", "mode_dn.png");
238
239 // Images all themes have
240         new_image("mwindow_icon", "heroine_icon.png");
241         new_image("vwindow_icon", "heroine_icon.png");
242         new_image("cwindow_icon", "heroine_icon.png");
243         new_image("awindow_icon", "heroine_icon.png");
244         new_image("record_icon", "heroine_icon.png");
245         new_image("clip_icon", "clip_icon.png");
246         new_image_set("mixpatch_data", 5, "mixpatch_up.png", "mixpatch_hi.png",
247                 "mixpatch_checked.png", "mixpatch_dn.png", "mixpatch_checkedhi.png");
248
249
250         new_image("aeffect_icon", "aeffect_icon.png");
251         new_image("veffect_icon", "veffect_icon.png");
252         new_image("atransition_icon", "atransition_icon.png");
253         new_image("vtransition_icon", "atransition_icon.png");
254 }
255
256
257
258
259
260
261 void Theme::build_menus()
262 {
263         aspect_ratios.append(new BC_ListBoxItem("3:2"));
264         aspect_ratios.append(new BC_ListBoxItem("4:3"));
265         aspect_ratios.append(new BC_ListBoxItem("16:9"));
266         aspect_ratios.append(new BC_ListBoxItem("2.10:1"));
267         aspect_ratios.append(new BC_ListBoxItem("2.20:1"));
268         aspect_ratios.append(new BC_ListBoxItem("2.25:1"));
269         aspect_ratios.append(new BC_ListBoxItem("2.30:1"));
270         aspect_ratios.append(new BC_ListBoxItem("2.35:1"));
271         aspect_ratios.append(new BC_ListBoxItem("2.66:1"));
272
273         frame_sizes.append(new BC_ListBoxItem("128x96     "));
274         frame_sizes.append(new BC_ListBoxItem("160x120    "));
275         frame_sizes.append(new BC_ListBoxItem("320x240    "));
276         frame_sizes.append(new BC_ListBoxItem("360x240    "));
277         frame_sizes.append(new BC_ListBoxItem("400x300    "));
278         frame_sizes.append(new BC_ListBoxItem("640x360    nHD"));
279         frame_sizes.append(new BC_ListBoxItem("640x400    "));
280         frame_sizes.append(new BC_ListBoxItem("640x480    VGA"));
281         frame_sizes.append(new BC_ListBoxItem("720x480    NTSC"));
282         frame_sizes.append(new BC_ListBoxItem("720x576    PAL"));
283         frame_sizes.append(new BC_ListBoxItem("768x432    "));
284         frame_sizes.append(new BC_ListBoxItem("800x450    "));
285         frame_sizes.append(new BC_ListBoxItem("800x600    SVGA"));
286         frame_sizes.append(new BC_ListBoxItem("896x504    "));
287         frame_sizes.append(new BC_ListBoxItem("960x540    qHD"));
288         frame_sizes.append(new BC_ListBoxItem("1024x576   "));
289         frame_sizes.append(new BC_ListBoxItem("1024x768   XGA"));
290         frame_sizes.append(new BC_ListBoxItem("1152x648   "));
291         frame_sizes.append(new BC_ListBoxItem("1280x720   HD"));
292         frame_sizes.append(new BC_ListBoxItem("1280x1024  SXGA"));
293         frame_sizes.append(new BC_ListBoxItem("1366x768   WXGA"));
294         frame_sizes.append(new BC_ListBoxItem("1600x900   HD+"));
295         frame_sizes.append(new BC_ListBoxItem("1600x1200  UXGA"));
296         frame_sizes.append(new BC_ListBoxItem("1920x1080  Full HD"));
297         frame_sizes.append(new BC_ListBoxItem("2048x1152  "));
298         frame_sizes.append(new BC_ListBoxItem("2304x1296  "));
299         frame_sizes.append(new BC_ListBoxItem("2560x1440  QHD"));
300         frame_sizes.append(new BC_ListBoxItem("2880x1620  "));
301         frame_sizes.append(new BC_ListBoxItem("3200x1800  QHD+"));
302         frame_sizes.append(new BC_ListBoxItem("3520x1980  "));
303         frame_sizes.append(new BC_ListBoxItem("3840x2160  4K UHD"));
304         frame_sizes.append(new BC_ListBoxItem("4096x2304  Full 4K UHD"));
305         frame_sizes.append(new BC_ListBoxItem("4480x2520  "));
306         frame_sizes.append(new BC_ListBoxItem("5120x2880  5K UHD"));
307         frame_sizes.append(new BC_ListBoxItem("5760x3240  "));
308         frame_sizes.append(new BC_ListBoxItem("6400x3600  "));
309         frame_sizes.append(new BC_ListBoxItem("7040x3960  "));
310         frame_sizes.append(new BC_ListBoxItem("7680x4320  8K UHD"));
311
312         sample_rates.append(new BC_ListBoxItem("8000"));
313         sample_rates.append(new BC_ListBoxItem("16000"));
314         sample_rates.append(new BC_ListBoxItem("22050"));
315         sample_rates.append(new BC_ListBoxItem("32000"));
316         sample_rates.append(new BC_ListBoxItem("44100"));
317         sample_rates.append(new BC_ListBoxItem("48000"));
318         sample_rates.append(new BC_ListBoxItem("96000"));
319         sample_rates.append(new BC_ListBoxItem("192000"));
320
321         frame_rates.append(new BC_ListBoxItem("0.25"));
322         frame_rates.append(new BC_ListBoxItem("1"));
323         frame_rates.append(new BC_ListBoxItem("5"));
324         frame_rates.append(new BC_ListBoxItem("10"));
325         frame_rates.append(new BC_ListBoxItem("12"));
326         frame_rates.append(new BC_ListBoxItem("15"));
327         frame_rates.append(new BC_ListBoxItem("23.976"));
328         frame_rates.append(new BC_ListBoxItem("24"));
329         frame_rates.append(new BC_ListBoxItem("25"));
330         frame_rates.append(new BC_ListBoxItem("29.97"));
331         frame_rates.append(new BC_ListBoxItem("30"));
332         frame_rates.append(new BC_ListBoxItem("50"));
333         frame_rates.append(new BC_ListBoxItem("59.94"));
334         frame_rates.append(new BC_ListBoxItem("60"));
335         frame_rates.append(new BC_ListBoxItem("100"));
336         frame_rates.append(new BC_ListBoxItem("120"));
337         frame_rates.append(new BC_ListBoxItem("1000"));
338
339         char string[BCTEXTLEN];
340         for(int i = 1; i < 17; i++)
341         {
342                 sprintf(string, "%d", (int)pow(2, i));
343                 zoom_values.append(new BC_ListBoxItem(string));
344         }
345 }
346
347
348 void Theme::overlay(VFrame *dst, VFrame *src, int in_x1, int in_x2)
349 {
350         int w;
351         int h;
352         unsigned char **in_rows;
353         unsigned char **out_rows;
354
355         if(in_x1 < 0)
356         {
357                 w = MIN(src->get_w(), dst->get_w());
358                 h = MIN(dst->get_h(), src->get_h());
359                 in_x1 = 0;
360                 in_x2 = w;
361         }
362         else
363         {
364                 w = in_x2 - in_x1;
365                 h = MIN(dst->get_h(), src->get_h());
366         }
367         in_rows = src->get_rows();
368         out_rows = dst->get_rows();
369
370         switch(src->get_color_model())
371         {
372                 case BC_RGBA8888:
373                         switch(dst->get_color_model())
374                         {
375                                 case BC_RGBA8888:
376                                         for(int i = 0; i < h; i++)
377                                         {
378                                                 unsigned char *in_row = in_rows[i] + in_x1 * 4;
379                                                 unsigned char *out_row = out_rows[i];
380                                                 for(int j = 0; j < w; j++)
381                                                 {
382                                                         int opacity = in_row[3];
383                                                         int transparency = out_row[3] * (0xff - opacity) / 0xff;
384                                                         out_row[0] = (in_row[0] * opacity + out_row[0] * transparency) / 0xff;
385                                                         out_row[1] = (in_row[1] * opacity + out_row[1] * transparency) / 0xff;
386                                                         out_row[2] = (in_row[2] * opacity + out_row[2] * transparency) / 0xff;
387                                                         out_row[3] = MAX(in_row[3], out_row[3]);
388                                                         out_row += 4;
389                                                         in_row += 4;
390                                                 }
391                                         }
392                                         break;
393                                 case BC_RGB888:
394                                         for(int i = 0; i < h; i++)
395                                         {
396                                                 unsigned char *in_row = in_rows[i] + in_x1 * 4;
397                                                 unsigned char *out_row = out_rows[i];
398                                                 for(int j = 0; j < w; j++)
399                                                 {
400                                                         int opacity = in_row[3];
401                                                         int transparency = 0xff - opacity;
402                                                         out_row[0] = (in_row[0] * opacity + out_row[0] * transparency) / 0xff;
403                                                         out_row[1] = (in_row[1] * opacity + out_row[1] * transparency) / 0xff;
404                                                         out_row[2] = (in_row[2] * opacity + out_row[2] * transparency) / 0xff;
405                                                         out_row += 3;
406                                                         in_row += 4;
407                                                 }
408                                         }
409                                         break;
410                         }
411                         break;
412         }
413 }
414
415 void Theme::build_transport(char *title,
416         unsigned char *png_overlay,
417         VFrame **bg_data,
418         int third)
419 {
420         if(!png_overlay) return;
421         VFramePng default_data(png_overlay);
422         VFrame *data[3];
423         data[0] = NEW_VFRAME;
424         data[1] = NEW_VFRAME;
425         data[2] = NEW_VFRAME;
426         data[0]->clear_frame();
427         data[1]->clear_frame();
428         data[2]->clear_frame();
429
430         for(int i = 0; i < 3; i++)
431         {
432                 int in_x1 = 0;
433                 int in_x2 = 0;
434                 if(!bg_data[i]) break;
435
436                 switch(third)
437                 {
438                         case 0:
439                                 in_x1 = 0;
440                                 in_x2 = default_data.get_w();
441                                 break;
442
443                         case 1:
444                                 in_x1 = (int)(bg_data[i]->get_w() * 0.33);
445                                 in_x2 = in_x1 + default_data.get_w();
446                                 break;
447
448                         case 2:
449                                 in_x1 = bg_data[i]->get_w() - default_data.get_w();
450                                 in_x2 = in_x1 + default_data.get_w();
451                                 break;
452                 }
453
454                 overlay(data[i], bg_data[i], in_x1, in_x2);
455                 overlay(data[i], &default_data);
456         }
457
458         new_image_set_images(title, 3, data[0], data[1], data[2]);
459 }
460
461
462
463
464
465
466
467
468
469 void Theme::build_patches(VFrame** &data,
470         unsigned char *png_overlay,
471         VFrame **bg_data,
472         int region)
473 {
474         if(!png_overlay || !bg_data) return;
475         VFramePng default_data(png_overlay);
476         data = new VFrame*[5];
477         data[0] = NEW_VFRAME;
478         data[1] = NEW_VFRAME;
479         data[2] = NEW_VFRAME;
480         data[3] = NEW_VFRAME;
481         data[4] = NEW_VFRAME;
482
483         for(int i = 0; i < 5; i++)
484         {
485 #if 0
486                 int in_x1;
487                 int in_x2;
488
489                 switch(region)
490                 {
491                         case 0:
492                                 in_x1 = 0;
493                                 in_x2 = default_data.get_w();
494                                 break;
495
496                         case 1:
497                                 in_x1 = (int)(bg_data[i]->get_w() * 0.33);
498                                 in_x2 = in_x1 + default_data.get_w();
499                                 break;
500
501                         case 2:
502                                 in_x1 = bg_data[i]->get_w() - default_data.get_w();
503                                 in_x2 = in_x1 + default_data.get_w();
504                                 break;
505                 }
506 #endif
507                 overlay(data[i],
508                         bg_data[i]);
509                 overlay(data[i],
510                         &default_data);
511         }
512 }
513
514
515
516
517
518
519
520
521 void Theme::build_button(VFrame** &data,
522         unsigned char *png_overlay,
523         VFrame *up_vframe,
524         VFrame *hi_vframe,
525         VFrame *dn_vframe)
526 {
527         if(!png_overlay) return;
528         VFramePng default_data(png_overlay);
529
530         if(!up_vframe || !hi_vframe || !dn_vframe) return;
531         data = new VFrame*[3];
532         data[0] = NEW_VFRAME;
533         data[1] = NEW_VFRAME;
534         data[2] = NEW_VFRAME;
535         data[0]->copy_from(up_vframe);
536         data[1]->copy_from(hi_vframe);
537         data[2]->copy_from(dn_vframe);
538         for(int i = 0; i < 3; i++)
539                 overlay(data[i],
540                         &default_data);
541 }
542
543 void Theme::build_button(VFrame** &data,
544         unsigned char *png_overlay,
545         VFrame *up_vframe,
546         VFrame *hi_vframe,
547         VFrame *dn_vframe,
548         VFrame *at_vframe)
549 {
550         if(!png_overlay) return;
551         VFramePng default_data(png_overlay);
552
553         if(!up_vframe || !hi_vframe || !dn_vframe) return;
554         data = new VFrame*[4];
555         data[0] = NEW_VFRAME;
556         data[1] = NEW_VFRAME;
557         data[2] = NEW_VFRAME;
558         data[3] = NEW_VFRAME;
559         data[0]->copy_from(up_vframe);
560         data[1]->copy_from(hi_vframe);
561         data[2]->copy_from(dn_vframe);
562         data[2]->copy_from(at_vframe);
563         for(int i = 0; i < 4; i++)
564                 overlay(data[i],
565                         &default_data);
566 }
567
568 void Theme::build_toggle(VFrame** &data,
569         unsigned char *png_overlay,
570         VFrame *up_vframe,
571         VFrame *hi_vframe,
572         VFrame *checked_vframe,
573         VFrame *dn_vframe,
574         VFrame *checkedhi_vframe)
575 {
576         if(!png_overlay ||
577                 !up_vframe ||
578                 !hi_vframe ||
579                 !checked_vframe ||
580                 !dn_vframe ||
581                 !checkedhi_vframe) return;
582         VFramePng default_data(png_overlay);
583         data = new VFrame*[5];
584         data[0] = NEW_VFRAME;
585         data[1] = NEW_VFRAME;
586         data[2] = NEW_VFRAME;
587         data[3] = NEW_VFRAME;
588         data[4] = NEW_VFRAME;
589         data[0]->copy_from(up_vframe);
590         data[1]->copy_from(hi_vframe);
591         data[2]->copy_from(checked_vframe);
592         data[3]->copy_from(dn_vframe);
593         data[4]->copy_from(checkedhi_vframe);
594         for(int i = 0; i < 5; i++)
595                 overlay(data[i],
596                         &default_data);
597 }
598
599
600 void Theme::get_mwindow_sizes(MWindowGUI *gui, int w, int h)
601 {
602         mbuttons_x = 0;
603         mbuttons_y = gui->menu_h() + yS(1);
604         mbuttons_w = w - (ffmpeg_toggle[0]->get_w()+2 + proxy_p_toggle[0]->get_w()+xS(2));
605         mbuttons_h = get_image("mbutton_bg")->get_h();
606         mclock_x = window_border - xS(5);
607         mclock_y = mbuttons_y-1 + mbuttons_h;
608         mclock_w = get_image("clock_bg")->get_w() - xS(20);
609         mclock_h = get_image("clock_bg")->get_h();
610         mtimebar_x = get_image("patchbay_bg")->get_w();
611         mtimebar_y = mbuttons_y - 1 + mbuttons_h;
612         mtimebar_w = w - mtimebar_x;
613         mtimebar_h = get_image("timebar_bg")->get_h();
614         mzoom_h = yS(25);
615         mzoom_x = 0;
616         mzoom_y = h - get_image("statusbar")->get_h();
617         mzoom_w = w;
618         mstatus_x = 0;
619         mstatus_y = mzoom_y + mzoom_h;
620         mstatus_w = w;
621         mstatus_h = h - mstatus_y;
622         mstatus_message_x = xS(10);
623         mstatus_message_y = yS(5);
624         mstatus_progress_x = mstatus_w - statusbar_cancel_data[0]->get_w() - xS(240);
625         mstatus_progress_y = mstatus_h - BC_WindowBase::get_resources()->progress_images[0]->get_h() - yS(3);
626         mstatus_progress_w = xS(230);
627         mstatus_cancel_x = mstatus_w - statusbar_cancel_data[0]->get_w();
628         mstatus_cancel_y = mstatus_h - statusbar_cancel_data[0]->get_h();
629         mcanvas_x = 0;
630         mcanvas_y = mbuttons_y-1 + mbuttons_h;
631         mcanvas_w = w;
632         mcanvas_h = mzoom_y - mtimebar_y;
633         control_pixels = (mcanvas_w * control_pixels) / 1000;
634         patchbay_x = 0;
635         patchbay_y = mcanvas_y + mclock_h;
636         patchbay_w = get_image("patchbay_bg")->get_w();
637         patchbay_h = mcanvas_h - mclock_h;
638         pane_w = get_image_set("xpane")[0]->get_w();
639         pane_h = get_image_set("ypane")[0]->get_h();
640         pane_x = mcanvas_x + mcanvas_w;
641         pane_y = mcanvas_y + mcanvas_h;
642         mhscroll_x = 0;
643         mhscroll_y = mcanvas_y + mcanvas_h - BC_ScrollBar::get_span(SCROLL_HORIZ);
644         mhscroll_w = w - BC_ScrollBar::get_span(SCROLL_VERT);
645         mvscroll_x = mcanvas_x + mcanvas_w;
646         mvscroll_y = mcanvas_y;
647         mvscroll_h = mcanvas_h;
648 }
649
650 void Theme::get_pane_sizes(MWindowGUI *gui,
651         int *view_x, int *view_y, int *view_w, int *view_h,
652         int number, int x, int y, int w, int h)
653 {
654         *view_x = x;
655         *view_y = y;
656         *view_w = w;
657         *view_h = h;
658
659 // patchbay
660         if(number == TOP_LEFT_PANE ||
661                 number == BOTTOM_LEFT_PANE)
662         {
663                 *view_x += patchbay_w;
664                 *view_w -= patchbay_w;
665         }
666
667 // timebar
668         if(number == TOP_LEFT_PANE ||
669                 number == TOP_RIGHT_PANE)
670         {
671                 *view_y += mtimebar_h;
672                 *view_h -= mtimebar_h;
673         }
674
675 // samplescroll
676         if(number == BOTTOM_LEFT_PANE ||
677                 number == BOTTOM_RIGHT_PANE ||
678                 gui->horizontal_panes() ||
679                 gui->total_panes() == 1)
680         {
681                 *view_h -= BC_ScrollBar::get_span(SCROLL_HORIZ);
682         }
683
684 // trackscroll
685         if(number == TOP_RIGHT_PANE ||
686                 number == BOTTOM_RIGHT_PANE ||
687                 gui->vertical_panes() ||
688                 gui->total_panes() == 1)
689         {
690                 *view_w -= BC_ScrollBar::get_span(SCROLL_VERT);
691         }
692 }
693
694 void Theme::draw_mwindow_bg(MWindowGUI *gui)
695 {
696 }
697
698
699 void Theme::get_cwindow_sizes(CWindowGUI *gui, int cwindow_controls)
700 {
701         int total_buttons = !use_commercials ? 15 : 16;
702         int edit_w = EditPanel::calculate_w(mwindow, 1, total_buttons);
703         int transport_w = PlayTransport::get_transport_width(mwindow) + toggle_margin;
704         int zoom_w = ZoomPanel::calculate_w(czoom_w);
705         int status_w = get_image("cwindow_active")->get_w();
706 // Space between buttons & status icon
707         int division_w = xS(24);
708
709         ctimebar_h = yS(16);
710
711         if(cwindow_controls)
712         {
713 SET_TRACE
714                 if(mwindow->edl->session->cwindow_meter)
715                 {
716                         cmeter_x = mwindow->session->cwindow_w -
717                                 MeterPanel::get_meters_width(this,
718                                         mwindow->edl->session->audio_channels,
719                                         mwindow->edl->session->cwindow_meter);
720                 }
721                 else
722                 {
723                         cmeter_x = mwindow->session->cwindow_w + widget_border;
724                 }
725
726                 int buttons_h;
727
728                 if(edit_w +
729                         widget_border * 2 +
730                         transport_w + widget_border +
731                         zoom_w + widget_border +
732                         division_w +
733                         status_w > cmeter_x)
734                 {
735                         buttons_h = get_image("cbuttons_left")->get_h();
736
737                         cedit_x = widget_border;
738                         cedit_y = mwindow->session->cwindow_h -
739                                 buttons_h +
740                                 ctimebar_h +
741                                 widget_border;
742
743                         ctransport_x = widget_border;
744                         ctransport_y = mwindow->session->cwindow_h -
745                                 get_image_set("autokeyframe")[0]->get_h() -
746                                 widget_border;
747
748                         czoom_x = ctransport_x + transport_w + widget_border;
749                         czoom_y = ctransport_y + widget_border;
750
751                         cstatus_x = xS(426);
752                         cstatus_y = mwindow->session->cwindow_h -
753                                 get_image("cwindow_active")->get_h() - yS(30);
754                 }
755                 else
756                 {
757                         buttons_h = ctimebar_h +
758                                 widget_border +
759                                 EditPanel::calculate_h(mwindow) +
760                                 widget_border;
761                         ctransport_x = widget_border;
762                         ctransport_y = mwindow->session->cwindow_h -
763                                 buttons_h +
764                                 ctimebar_h +
765                                 widget_border;
766
767                         cedit_x = ctransport_x + transport_w + widget_border;
768                         cedit_y = ctransport_y;
769
770                         czoom_x = cedit_x + edit_w + widget_border;
771                         czoom_y = cedit_y + widget_border;
772 //printf("Theme::get_cwindow_sizes %d %d %d\n", __LINE__, czoom_x, zoom_w);
773                         cstatus_x = czoom_x + zoom_w + division_w;
774                         cstatus_y = ctransport_y;
775                 }
776
777
778                 ccomposite_x = xS(0);
779                 ccomposite_y = yS(5);
780                 ccomposite_w = get_image("cpanel_bg")->get_w();
781                 ccomposite_h = mwindow->session->cwindow_h - buttons_h;
782
783                 ccanvas_x = ccomposite_x + ccomposite_w;
784                 ccanvas_y = 0;
785                 ccanvas_h = ccomposite_h;
786
787                 ccanvas_w = cmeter_x - ccanvas_x - widget_border;
788 SET_TRACE
789         }
790         else
791 // no controls
792         {
793 SET_TRACE
794                 ccomposite_x = -get_image("cpanel_bg")->get_w();
795                 ccomposite_y = 0;
796                 ccomposite_w = get_image("cpanel_bg")->get_w();
797                 ccomposite_h = mwindow->session->cwindow_h - get_image("cbuttons_left")->get_h();
798
799                 cedit_x = xS(10);
800                 cedit_y = mwindow->session->cwindow_h + yS(17);
801                 ctransport_x = xS(10);
802                 ctransport_y = cedit_y + yS(40);
803                 ccanvas_x = 0;
804                 ccanvas_y = 0;
805                 ccanvas_w = mwindow->session->cwindow_w;
806                 ccanvas_h = mwindow->session->cwindow_h;
807                 cmeter_x = mwindow->session->cwindow_w;
808                 cstatus_x = mwindow->session->cwindow_w;
809                 cstatus_y = mwindow->session->cwindow_h;
810                 czoom_x = mwindow->session->cwindow_w;
811                 czoom_y = mwindow->session->cwindow_h;
812 SET_TRACE
813         }
814
815 SET_TRACE
816
817
818         cmeter_y = widget_border;
819         cmeter_h = mwindow->session->cwindow_h - cmeter_y - widget_border;
820
821 //      ctimebar_x = ccanvas_x;
822 //      ctimebar_y = ccanvas_y + ccanvas_h;
823 //      ctimebar_w = ccanvas_w;
824         ctimebar_x = 0;
825         ctimebar_y = ccanvas_y + ccanvas_h;
826         ctimebar_w = mwindow->session->cwindow_w;
827         if(mwindow->edl->session->cwindow_meter)
828         {
829                 ctimebar_w = cmeter_x - widget_border;
830         }
831
832 SET_TRACE
833 }
834
835
836
837
838
839 void Theme::draw_awindow_bg(AWindowGUI *gui)
840 {
841         gui->clear_box(0, 0, mwindow->session->awindow_w, mwindow->session->awindow_h);
842         gui->flash();
843 }
844
845 void Theme::draw_vwindow_bg(VWindowGUI *gui)
846 {
847 //      gui->clear_box(0,
848 //              0,
849 //              mwindow->session->vwindow_w,
850 //              mwindow->session->vwindow_h);
851 // // Timebar
852 //      gui->draw_3segmenth(vtimebar_x,
853 //              vtimebar_y,
854 //              vtimebar_w,
855 //              vtimebar_bg_data,
856 //              0);
857 //      gui->flash();
858 }
859
860
861 void Theme::draw_cwindow_bg(CWindowGUI *gui)
862 {
863         gui->clear_box(0, 0, mwindow->session->cwindow_w, mwindow->session->cwindow_h);
864         gui->flash();
865 }
866
867 void Theme::draw_lwindow_bg(LevelWindowGUI *gui)
868 {
869         gui->clear_box(0, 0, mwindow->session->lwindow_w, mwindow->session->lwindow_h);
870         gui->flash();
871 }
872
873
874 void Theme::draw_rmonitor_bg(RecordMonitorGUI *gui)
875 {
876         gui->clear_box(0, 0, mwindow->session->rmonitor_w, mwindow->session->rmonitor_h);
877         gui->flash();
878 }
879
880
881 void Theme::draw_rwindow_bg(RecordGUI *gui)
882 {
883         gui->clear_box(0, 0, mwindow->session->rwindow_w, mwindow->session->rwindow_h);
884 }
885
886
887 void Theme::draw_resource_bg(TrackCanvas *canvas, ResourcePixmap *pixmap, int color,
888         int edit_x, int edit_w, int pixmap_x, int x1, int y1, int x2, int y2)
889 {
890         VFrame *image = 0;
891
892         switch(mwindow->edl->local_session->zoom_track) {
893                 case 1024: image = get_image("resource1024");  break;
894                 case 512: image = get_image("resource512");  break;
895                 case 256: image = get_image("resource256");  break;
896                 case 128: image = get_image("resource128");  break;
897                 case 64:  image = get_image("resource64");   break;
898         }
899         if( !image )
900                 image = get_image("resource32");
901
902         VFrame *frame = image;
903         int bg_color = canvas->get_bg_color();
904         if( color ) {
905                 int alpha = (~color >> 24) & 0xff;
906                 frame = pixmap->change_picon_alpha(image, alpha);
907                 canvas->set_bg_color(color & 0xffffff);
908         }
909         canvas->draw_3segmenth(x1, y1, x2 - x1,
910                 edit_x - pixmap_x, edit_w, frame, pixmap);
911         if( frame != image ) {
912                 delete frame;
913                 canvas->set_bg_color(bg_color);
914         }
915 }
916
917
918 void Theme::get_vwindow_sizes(VWindowGUI *gui)
919 {
920         int edit_w = EditPanel::calculate_w(mwindow, 0, 10);
921         int transport_w = PlayTransport::get_transport_width(mwindow) + toggle_margin;
922 // Space between buttons & time
923         int division_w = xS(30);
924         vtime_w = xS(150);
925         vtimebar_h = yS(16);
926         int vtime_border = xS(15);
927
928         vmeter_y = widget_border;
929         vmeter_h = mwindow->session->vwindow_h - cmeter_y - widget_border;
930
931         int buttons_h;
932         if(mwindow->edl->session->vwindow_meter)
933         {
934                 vmeter_x = mwindow->session->vwindow_w -
935                         MeterPanel::get_meters_width(this,
936                                 mwindow->edl->session->audio_channels,
937                                 mwindow->edl->session->vwindow_meter);
938         }
939         else
940         {
941                 vmeter_x = mwindow->session->vwindow_w + widget_border;
942         }
943
944         vcanvas_x = 0;
945         vcanvas_y = 0;
946         vcanvas_w = vmeter_x - vcanvas_x - widget_border;
947
948         if(edit_w +
949                 widget_border * 2 +
950                 transport_w + widget_border +
951                 vtime_w + division_w +
952                 vtime_border > vmeter_x)
953         {
954                 buttons_h = get_image("vbuttons_left")->get_h();
955                 vedit_x = widget_border;
956                 vedit_y = mwindow->session->vwindow_h -
957                         buttons_h +
958                         vtimebar_h +
959                         widget_border;
960
961                 vtransport_x = widget_border;
962                 vtransport_y = mwindow->session->vwindow_h -
963                         get_image_set("autokeyframe")[0]->get_h() -
964                         widget_border;
965
966                 vdivision_x = xS(280);
967                 vtime_x = vedit_x + xS(20); //vdivision_x;
968                 vtime_y = vedit_y + yS(30); //+ yS(20);
969         }
970         else
971         {
972                 buttons_h = vtimebar_h +
973                         widget_border +
974                         EditPanel::calculate_h(mwindow) +
975                         widget_border;
976                 vtransport_x = widget_border;
977                 vtransport_y = mwindow->session->vwindow_h -
978                         buttons_h +
979                         vtimebar_h +
980                         widget_border;
981
982                 vedit_x = vtransport_x + transport_w + widget_border;
983                 vedit_y = vtransport_y;
984
985                 vdivision_x = vedit_x + edit_w + division_w;
986                 vtime_x = vdivision_x + vtime_border;
987                 vtime_y = vedit_y + widget_border;
988         }
989
990
991 //      vtimebar_x = vcanvas_x;
992 //      vtimebar_y = vcanvas_y + vcanvas_h;
993 //      vtimebar_w = vcanvas_w;
994
995         vcanvas_h = mwindow->session->vwindow_h - buttons_h;
996         vtimebar_x = 0;
997         vtimebar_y = vcanvas_y + vcanvas_h;
998         vtimebar_w = vmeter_x - widget_border;
999
1000 }
1001
1002
1003 void Theme::get_awindow_sizes(AWindowGUI *gui)
1004 {
1005         abuttons_x = 0;
1006         abuttons_y = 0;
1007         afolders_x = 0;
1008 //      afolders_y = deletedisk_data[0]->get_h();
1009         afolders_y = 0;
1010         afolders_w = mwindow->session->afolders_w;
1011         afolders_h = mwindow->session->awindow_h - afolders_y;
1012         adivider_x = afolders_x + afolders_w;
1013         adivider_y = xS(0);
1014         adivider_w = yS(5);
1015         adivider_h = afolders_h;
1016         alist_x = afolders_x + afolders_w + xS(5);
1017         alist_y = afolders_y;
1018         alist_w = mwindow->session->awindow_w - alist_x;
1019         alist_h = afolders_h;
1020 }
1021
1022 void Theme::get_rmonitor_sizes(int do_audio,
1023         int do_video,
1024         int do_channel,
1025         int do_interlace,
1026         int do_avc,
1027         int audio_channels)
1028 {
1029         int x = xS(10);
1030         int y = yS(3);
1031
1032
1033         if(do_avc)
1034         {
1035                 rmonitor_canvas_y = yS(30);
1036                 rmonitor_tx_x = xS(10);
1037                 rmonitor_tx_y = 0;
1038         }
1039         else
1040         {
1041                 rmonitor_canvas_y = 0;
1042                 rmonitor_tx_x = 0;
1043                 rmonitor_tx_y = 0;
1044         }
1045
1046
1047         if(do_channel)
1048         {
1049                 y = yS(5);
1050                 rmonitor_channel_x = x;
1051                 rmonitor_channel_y = yS(5);
1052                 x += xS(280);
1053                 rmonitor_canvas_y = yS(35);
1054         }
1055
1056         if(do_interlace)
1057         {
1058                 y = yS(4);
1059                 rmonitor_interlace_x = x;
1060                 rmonitor_interlace_y = y;
1061         }
1062
1063
1064         if(do_audio)
1065         {
1066                 if(do_video)
1067                 {
1068                         rmonitor_meter_x = mwindow->session->rmonitor_w -
1069                                 MeterPanel::get_meters_width(this, audio_channels, 1);
1070                         rmonitor_meter_w = mwindow->session->rmonitor_w;
1071                 }
1072                 else
1073                 {
1074                         rmonitor_meter_x = widget_border;
1075                         rmonitor_meter_w = mwindow->session->rmonitor_w - widget_border * 2;
1076                 }
1077
1078                 rmonitor_meter_y = yS(40);
1079                 rmonitor_meter_h = mwindow->session->rmonitor_h - yS(10) - rmonitor_meter_y;
1080         }
1081         else
1082         {
1083                 rmonitor_meter_x = mwindow->session->rmonitor_w;
1084         }
1085
1086         rmonitor_canvas_x = 0;
1087         rmonitor_canvas_w = rmonitor_meter_x - rmonitor_canvas_x;
1088         if(do_audio) rmonitor_canvas_w -= xS(10);
1089         rmonitor_canvas_h = mwindow->session->rmonitor_h - rmonitor_canvas_y;
1090
1091         if(!do_video && do_audio)
1092         {
1093                 rmonitor_meter_y -= yS(30);
1094                 rmonitor_meter_h += yS(30);
1095         }
1096
1097 }
1098
1099 void Theme::get_recordgui_sizes(RecordGUI *gui, int w, int h)
1100 {
1101 }
1102
1103 void Theme::get_batchrender_sizes(BatchRenderGUI *gui,
1104         int w,
1105         int h)
1106 {
1107         batchrender_x1 = xS(10);
1108         batchrender_x2 = xS(300);
1109         batchrender_x3 = xS(400);
1110 }
1111
1112 void Theme::get_plugindialog_sizes()
1113 {
1114         int xs10 = xS(10), ys10 = yS(10);
1115         int xs20 = xS(20), ys100 = yS(100);
1116         int x = xs10, y = yS(30);
1117         plugindialog_new_x = x;
1118         plugindialog_new_y = y;
1119         plugindialog_shared_x = mwindow->session->plugindialog_w / 3;
1120         plugindialog_shared_y = y;
1121         plugindialog_module_x = mwindow->session->plugindialog_w * 2 / 3;
1122         plugindialog_module_y = y;
1123
1124         plugindialog_new_w = plugindialog_shared_x - plugindialog_new_x - xs10;
1125         plugindialog_new_h = mwindow->session->plugindialog_h - ys100;
1126         plugindialog_shared_w = plugindialog_module_x - plugindialog_shared_x - xs10;
1127         plugindialog_shared_h = mwindow->session->plugindialog_h - ys100;
1128         plugindialog_module_w = mwindow->session->plugindialog_w - plugindialog_module_x - xs10;
1129         plugindialog_module_h = mwindow->session->plugindialog_h - ys100;
1130
1131         plugindialog_newattach_x = plugindialog_new_x + xs20;
1132         plugindialog_newattach_y = plugindialog_new_y + plugindialog_new_h + ys10;
1133         plugindialog_sharedattach_x = plugindialog_shared_x + xs20;
1134         plugindialog_sharedattach_y = plugindialog_shared_y + plugindialog_shared_h + ys10;
1135         plugindialog_moduleattach_x = plugindialog_module_x + xs20;
1136         plugindialog_moduleattach_y = plugindialog_module_y + plugindialog_module_h + ys10;
1137 }
1138
1139 // void Theme::get_presetdialog_sizes(PresetsWindow *gui)
1140 // {
1141 //      int x = window_border;
1142 //      int y = window_border + BC_Title::calculate_h(gui, "P") + widget_border;
1143 //
1144 //      presets_list_x = x;
1145 //      presets_list_y = y;
1146 //      presets_list_w = mwindow->session->presetdialog_w / 2;
1147 //      presets_list_h = mwindow->session->presetdialog_h -
1148 //              BC_OKButton::calculate_h() -
1149 //              presets_list_y -
1150 //              widget_border -
1151 //              window_border;
1152 //      presets_text_x = presets_list_x + presets_list_w + widget_border;
1153 //      presets_text_y = y;
1154 //      presets_text_w = mwindow->session->presetdialog_w - presets_text_x - window_border;
1155 //      y += BC_TextBox::calculate_h(gui,
1156 //              MEDIUMFONT,
1157 //              1,
1158 //              1) + widget_border;
1159 //
1160 //      presets_delete_x = presets_text_x;
1161 //      presets_delete_y = y;
1162 //      y += BC_GenericButton::calculate_h() + widget_border;
1163 //
1164 //      presets_save_x = presets_text_x;
1165 //      presets_save_y = y;
1166 //      y += BC_GenericButton::calculate_h() + widget_border;
1167 //
1168 //      presets_apply_x = presets_text_x;
1169 //      presets_apply_y = y;
1170 //      y += BC_GenericButton::calculate_h();
1171 // }
1172
1173 void Theme::get_keyframedialog_sizes(KeyFrameWindow *gui)
1174 {
1175         int x = window_border;
1176         int y = window_border + 
1177                 BC_Title::calculate_h(gui, "P", LARGEFONT) + 
1178                 widget_border;
1179
1180         presets_list_x = x;
1181         presets_list_y = y;
1182 #ifdef EDIT_KEYFRAME
1183         presets_list_w = mwindow->session->keyframedialog_w / 2 - 
1184                 widget_border - 
1185                 window_border;
1186 #else
1187         presets_list_w = mwindow->session->keyframedialog_w - 
1188                 presets_list_x -
1189                 window_border;
1190 #endif
1191         presets_list_h = mwindow->session->keyframedialog_h - 
1192                 BC_OKButton::calculate_h() - 
1193                 presets_list_y -
1194                 widget_border -
1195                 widget_border -
1196                 BC_Title::calculate_h(gui, "P") - 
1197                 widget_border -
1198                 BC_TextBox::calculate_h(gui, 
1199                         MEDIUMFONT, 
1200                         1, 
1201                         1) -
1202                 widget_border -
1203                 (BC_GenericButton::calculate_h() + widget_border) * 3 - 
1204                 window_border;
1205         y += presets_list_h + widget_border + widget_border + BC_Title::calculate_h(gui, "P");
1206         presets_text_x = x;
1207         presets_text_y = y;
1208         presets_text_w = presets_list_w;
1209         y += BC_TextBox::calculate_h(gui, 
1210                 MEDIUMFONT, 
1211                 1, 
1212                 1) + widget_border;
1213
1214         presets_delete_x = presets_text_x;
1215         presets_delete_y = y;
1216         y += BC_GenericButton::calculate_h() + widget_border;
1217
1218         presets_save_x = presets_text_x;
1219         presets_save_y = y;
1220         y += BC_GenericButton::calculate_h() + widget_border;
1221
1222         presets_apply_x = presets_text_x;
1223         presets_apply_y = y;
1224         y += BC_GenericButton::calculate_h();
1225
1226 #ifdef EDIT_KEYFRAME
1227         x = mwindow->session->keyframedialog_w / 2 + widget_border;
1228         y = window_border + 
1229                 BC_Title::calculate_h(gui, "P", LARGEFONT) + 
1230                 widget_border;
1231
1232         keyframe_list_x = x;
1233         keyframe_list_y = y;
1234         keyframe_list_w = mwindow->session->keyframedialog_w / 2 - 
1235                 widget_border - 
1236                 window_border;
1237         keyframe_list_h = mwindow->session->keyframedialog_h - 
1238                 keyframe_list_y -
1239                 widget_border -
1240                 widget_border -
1241                 BC_Title::calculate_h(gui, "P") -
1242                 widget_border - 
1243                 BC_TextBox::calculate_h(gui,
1244                         MEDIUMFONT,
1245                         1,
1246                         1) -
1247                 widget_border - 
1248                 BC_Title::calculate_h(gui, "P") -
1249                 widget_border -
1250                 BC_OKButton::calculate_h() - 
1251                 window_border;
1252 //      keyframe_text_x = keyframe_list_x + keyframe_list_w + widget_border;
1253 //      keyframe_text_y = y;
1254 //      keyframe_text_w = mwindow->session->keyframedialog_w - keyframe_text_x - window_border;
1255 //      y += BC_TextBox::calculate_h(gui, 
1256 //              MEDIUMFONT, 
1257 //              1, 
1258 //              1) + widget_border;
1259 // 
1260
1261         y += keyframe_list_h + BC_Title::calculate_h(gui, "P") + widget_border + widget_border;
1262         keyframe_value_x = keyframe_list_x;
1263         keyframe_value_y = y;
1264         keyframe_value_w = keyframe_list_w;
1265         y += BC_TextBox::calculate_h(gui, 
1266                 MEDIUMFONT, 
1267                 1, 
1268                 1) + widget_border;
1269
1270         keyframe_all_x = keyframe_value_x;
1271         keyframe_all_y = y;
1272
1273 #endif
1274
1275 }
1276
1277
1278 void Theme::get_menueffect_sizes(int use_list)
1279 {
1280         if(use_list)
1281         {
1282                 menueffect_list_x = xS(10);
1283                 menueffect_list_y = yS(10);
1284                 menueffect_list_w = mwindow->session->menueffect_w - xS(400);
1285                 menueffect_list_h = mwindow->session->menueffect_h -
1286                         menueffect_list_y -
1287                         BC_OKButton::calculate_h() - yS(10);
1288         }
1289         else
1290         {
1291                 menueffect_list_x = 0;
1292                 menueffect_list_y = yS(10);
1293                 menueffect_list_w = 0;
1294                 menueffect_list_h = 0;
1295         }
1296
1297         menueffect_file_x = menueffect_list_x + menueffect_list_w + xS(10);
1298         menueffect_file_y = yS(10);
1299
1300         menueffect_tools_x = menueffect_file_x;
1301         menueffect_tools_y = menueffect_file_y + yS(20);
1302 }
1303
1304 void Theme::get_preferences_sizes()
1305 {
1306 }
1307
1308 void Theme::draw_preferences_bg(PreferencesWindow *gui)
1309 {
1310 }
1311
1312 void Theme::get_new_sizes(NewWindow *gui)
1313 {
1314 }
1315
1316 void Theme::draw_new_bg(NewWindow *gui)
1317 {
1318 }
1319
1320 void Theme::draw_setformat_bg(SetFormatWindow *window)
1321 {
1322 }
1323
1324
1325 int Theme::get_color_title_bg()
1326 {
1327         VFrame *title_bg = get_image("title_bg_data");
1328         int tw = title_bg->get_w(), th = title_bg->get_h();
1329         int colormodel = title_bg->get_color_model();
1330         int bpp = BC_CModels::calculate_pixelsize(colormodel);
1331         uint8_t **rows = title_bg->get_rows();
1332         int cx = tw / 2, cy = th / 2;
1333         uint8_t *bp = rows[cy] + cx * bpp;
1334         int br = bp[0], bg = bp[1], bb = bp[2];
1335         int color = (br<<16) | (bg<<8) | (bb<<0);
1336         return color;
1337 }
1338
1339