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