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