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