4 * Copyright (C) 1997-2011 Adam Williams <broadcast at earthling dot net>
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.
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.
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
22 #include "awindowgui.h"
23 #include "bcsignals.h"
26 #include "cwindowgui.h"
28 #include "edlsession.h"
29 #include "keyframegui.h"
31 #include "levelwindowgui.h"
33 #include "localsession.h"
35 #include "mainsession.h"
37 #include "meterpanel.h"
38 #include "mwindowgui.h"
40 #include "overlayframe.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"
50 #include "trackcanvas.h"
52 #include "vwindowgui.h"
60 new VFrame(0, -1, default_data.get_w(), default_data.get_h(), BC_RGBA8888, -1)
68 theme_title = DEFAULT_THEME;
72 mtransport_margin = 0;
75 timebar_cursor_color = RED;
77 BC_WindowBase::get_resources()->bg_color = BLOND;
78 BC_WindowBase::get_resources()->button_up = 0xffc000;
79 BC_WindowBase::get_resources()->button_highlighted = 0xffe000;
80 BC_WindowBase::get_resources()->recursive_resizing = 0;
89 clock_bg_color = BLACK;
90 assetedit_color = YELLOW;
91 const char *cp = getenv("BC_USE_COMMERCIALS");
92 use_commercials = !cp ? 0 : atoi(cp);
94 preferences_category_overlap = 0;
98 #include "data/about_png.h"
99 about_bg = new VFrame(about_png);
102 drag_pane_color = WHITE;
110 // Need to delete everything here
115 aspect_ratios.remove_all_objects();
116 frame_rates.remove_all_objects();
117 frame_sizes.remove_all_objects();
118 sample_rates.remove_all_objects();
119 zoom_values.remove_all_objects();
123 void Theme::flush_images()
125 if(data_buffer) delete [] data_buffer;
126 if(contents_buffer) delete [] contents_buffer;
129 contents.remove_all();
132 void Theme::initialize()
134 message_normal = BLACK;
137 // Force to use local data for images
138 extern unsigned char _binary_theme_data_start[];
139 set_data(_binary_theme_data_start);
141 // Set images which weren't set by subclass
142 new_image("mode_normal", "mode_normal.png");
143 new_image("mode_add", "mode_add.png");
144 new_image("mode_subtract", "mode_subtract.png");
145 new_image("mode_multiply", "mode_multiply.png");
146 new_image("mode_divide", "mode_divide.png");
147 new_image("mode_replace", "mode_replace.png");
148 new_image("mode_max", "mode_max.png");
149 new_image("mode_min", "mode_min.png");
150 new_image("mode_average", "mode_average.png");
151 new_image("mode_darken", "mode_darken.png");
152 new_image("mode_lighten", "mode_lighten.png");
153 new_image("mode_dst", "mode_dst.png");
154 new_image("mode_dstatop", "mode_dstatop.png");
155 new_image("mode_dstin", "mode_dstin.png");
156 new_image("mode_dstout", "mode_dstout.png");
157 new_image("mode_dstover", "mode_dstover.png");
158 new_image("mode_src", "mode_src.png");
159 new_image("mode_srcatop", "mode_srcatop.png");
160 new_image("mode_srcin", "mode_srcin.png");
161 new_image("mode_srcout", "mode_srcout.png");
162 new_image("mode_srcover", "mode_srcover.png");
163 new_image("mode_or", "mode_or.png");
164 new_image("mode_xor", "mode_xor.png");
166 new_image_set("mode_popup", 3, "mode_up.png", "mode_hi.png", "mode_dn.png");
168 // Images all themes have
169 new_image("mwindow_icon", "heroine_icon.png");
170 new_image("vwindow_icon", "heroine_icon.png");
171 new_image("cwindow_icon", "heroine_icon.png");
172 new_image("awindow_icon", "heroine_icon.png");
173 new_image("record_icon", "heroine_icon.png");
174 new_image("clip_icon", "clip_icon.png");
177 new_image("aeffect_icon", "aeffect_icon.png");
178 new_image("veffect_icon", "veffect_icon.png");
179 new_image("atransition_icon", "atransition_icon.png");
180 new_image("vtransition_icon", "atransition_icon.png");
188 void Theme::build_menus()
190 aspect_ratios.append(new BC_ListBoxItem("3:2"));
191 aspect_ratios.append(new BC_ListBoxItem("4:3"));
192 aspect_ratios.append(new BC_ListBoxItem("16:9"));
193 aspect_ratios.append(new BC_ListBoxItem("2.10:1"));
194 aspect_ratios.append(new BC_ListBoxItem("2.20:1"));
195 aspect_ratios.append(new BC_ListBoxItem("2.25:1"));
196 aspect_ratios.append(new BC_ListBoxItem("2.30:1"));
197 aspect_ratios.append(new BC_ListBoxItem("2.35:1"));
198 aspect_ratios.append(new BC_ListBoxItem("2.66:1"));
200 frame_sizes.append(new BC_ListBoxItem("128x96"));
201 frame_sizes.append(new BC_ListBoxItem("160x120"));
202 frame_sizes.append(new BC_ListBoxItem("176x144"));
203 frame_sizes.append(new BC_ListBoxItem("240x180"));
204 frame_sizes.append(new BC_ListBoxItem("320x200"));
205 frame_sizes.append(new BC_ListBoxItem("320x240"));
206 frame_sizes.append(new BC_ListBoxItem("352x288"));
207 frame_sizes.append(new BC_ListBoxItem("360x240"));
208 frame_sizes.append(new BC_ListBoxItem("400x300"));
209 frame_sizes.append(new BC_ListBoxItem("424x318"));
210 frame_sizes.append(new BC_ListBoxItem("512x384"));
211 frame_sizes.append(new BC_ListBoxItem("640x350"));
212 frame_sizes.append(new BC_ListBoxItem("640x480"));
213 frame_sizes.append(new BC_ListBoxItem("704x576"));
214 frame_sizes.append(new BC_ListBoxItem("720x480"));
215 frame_sizes.append(new BC_ListBoxItem("720x576"));
216 frame_sizes.append(new BC_ListBoxItem("800x600"));
217 frame_sizes.append(new BC_ListBoxItem("852x480"));
218 frame_sizes.append(new BC_ListBoxItem("852x480"));
219 frame_sizes.append(new BC_ListBoxItem("960x540"));
220 frame_sizes.append(new BC_ListBoxItem("960x1080"));
221 frame_sizes.append(new BC_ListBoxItem("1024x768"));
222 frame_sizes.append(new BC_ListBoxItem("1280x720"));
223 frame_sizes.append(new BC_ListBoxItem("1280x1024"));
224 frame_sizes.append(new BC_ListBoxItem("1366x768"));
225 frame_sizes.append(new BC_ListBoxItem("1408x1152"));
226 frame_sizes.append(new BC_ListBoxItem("1600x1024"));
227 frame_sizes.append(new BC_ListBoxItem("1600x1200"));
228 frame_sizes.append(new BC_ListBoxItem("1920x1080"));
229 frame_sizes.append(new BC_ListBoxItem("1920x1088"));
230 frame_sizes.append(new BC_ListBoxItem("1920x1200"));
231 frame_sizes.append(new BC_ListBoxItem("2048x1536"));
232 frame_sizes.append(new BC_ListBoxItem("2560x1600"));
233 frame_sizes.append(new BC_ListBoxItem("2560x2048"));
234 frame_sizes.append(new BC_ListBoxItem("3200x2048"));
235 frame_sizes.append(new BC_ListBoxItem("3840x2400"));
236 frame_sizes.append(new BC_ListBoxItem("5120x4096"));
237 frame_sizes.append(new BC_ListBoxItem("6400x4096"));
238 frame_sizes.append(new BC_ListBoxItem("7680x4800"));
240 sample_rates.append(new BC_ListBoxItem("8000"));
241 sample_rates.append(new BC_ListBoxItem("16000"));
242 sample_rates.append(new BC_ListBoxItem("22050"));
243 sample_rates.append(new BC_ListBoxItem("32000"));
244 sample_rates.append(new BC_ListBoxItem("44100"));
245 sample_rates.append(new BC_ListBoxItem("48000"));
246 sample_rates.append(new BC_ListBoxItem("96000"));
247 sample_rates.append(new BC_ListBoxItem("192000"));
249 frame_rates.append(new BC_ListBoxItem("1"));
250 frame_rates.append(new BC_ListBoxItem("5"));
251 frame_rates.append(new BC_ListBoxItem("10"));
252 frame_rates.append(new BC_ListBoxItem("12"));
253 frame_rates.append(new BC_ListBoxItem("15"));
254 frame_rates.append(new BC_ListBoxItem("23.97"));
255 frame_rates.append(new BC_ListBoxItem("24"));
256 frame_rates.append(new BC_ListBoxItem("25"));
257 frame_rates.append(new BC_ListBoxItem("29.97"));
258 frame_rates.append(new BC_ListBoxItem("30"));
259 frame_rates.append(new BC_ListBoxItem("50"));
260 frame_rates.append(new BC_ListBoxItem("59.94"));
261 frame_rates.append(new BC_ListBoxItem("60"));
263 char string[BCTEXTLEN];
264 for(int i = 1; i < 17; i++)
266 sprintf(string, "%d", (int)pow(2, i));
267 zoom_values.append(new BC_ListBoxItem(string));
272 void Theme::overlay(VFrame *dst, VFrame *src, int in_x1, int in_x2)
276 unsigned char **in_rows;
277 unsigned char **out_rows;
281 w = MIN(src->get_w(), dst->get_w());
282 h = MIN(dst->get_h(), src->get_h());
289 h = MIN(dst->get_h(), src->get_h());
291 in_rows = src->get_rows();
292 out_rows = dst->get_rows();
294 switch(src->get_color_model())
297 switch(dst->get_color_model())
300 for(int i = 0; i < h; i++)
302 unsigned char *in_row = in_rows[i] + in_x1 * 4;
303 unsigned char *out_row = out_rows[i];
304 for(int j = 0; j < w; j++)
306 int opacity = in_row[3];
307 int transparency = out_row[3] * (0xff - opacity) / 0xff;
308 out_row[0] = (in_row[0] * opacity + out_row[0] * transparency) / 0xff;
309 out_row[1] = (in_row[1] * opacity + out_row[1] * transparency) / 0xff;
310 out_row[2] = (in_row[2] * opacity + out_row[2] * transparency) / 0xff;
311 out_row[3] = MAX(in_row[3], out_row[3]);
318 for(int i = 0; i < h; i++)
320 unsigned char *in_row = in_rows[i] + in_x1 * 4;
321 unsigned char *out_row = out_rows[i];
322 for(int j = 0; j < w; j++)
324 int opacity = in_row[3];
325 int transparency = 0xff - opacity;
326 out_row[0] = (in_row[0] * opacity + out_row[0] * transparency) / 0xff;
327 out_row[1] = (in_row[1] * opacity + out_row[1] * transparency) / 0xff;
328 out_row[2] = (in_row[2] * opacity + out_row[2] * transparency) / 0xff;
339 void Theme::build_transport(char *title,
340 unsigned char *png_overlay,
344 if(!png_overlay) return;
345 VFrame default_data(png_overlay);
347 data[0] = NEW_VFRAME;
348 data[1] = NEW_VFRAME;
349 data[2] = NEW_VFRAME;
350 data[0]->clear_frame();
351 data[1]->clear_frame();
352 data[2]->clear_frame();
354 for(int i = 0; i < 3; i++)
358 if(!bg_data[i]) break;
364 in_x2 = default_data.get_w();
368 in_x1 = (int)(bg_data[i]->get_w() * 0.33);
369 in_x2 = in_x1 + default_data.get_w();
373 in_x1 = bg_data[i]->get_w() - default_data.get_w();
374 in_x2 = in_x1 + default_data.get_w();
378 overlay(data[i], bg_data[i], in_x1, in_x2);
379 overlay(data[i], &default_data);
382 new_image_set_images(title, 3, data[0], data[1], data[2]);
393 void Theme::build_patches(VFrame** &data,
394 unsigned char *png_overlay,
398 if(!png_overlay || !bg_data) return;
399 VFrame default_data(png_overlay);
400 data = new VFrame*[5];
401 data[0] = NEW_VFRAME;
402 data[1] = NEW_VFRAME;
403 data[2] = NEW_VFRAME;
404 data[3] = NEW_VFRAME;
405 data[4] = NEW_VFRAME;
407 for(int i = 0; i < 5; i++)
417 in_x2 = default_data.get_w();
421 in_x1 = (int)(bg_data[i]->get_w() * 0.33);
422 in_x2 = in_x1 + default_data.get_w();
426 in_x1 = bg_data[i]->get_w() - default_data.get_w();
427 in_x2 = in_x1 + default_data.get_w();
445 void Theme::build_button(VFrame** &data,
446 unsigned char *png_overlay,
451 if(!png_overlay) return;
452 VFrame default_data(png_overlay);
454 if(!up_vframe || !hi_vframe || !dn_vframe) return;
455 data = new VFrame*[3];
456 data[0] = NEW_VFRAME;
457 data[1] = NEW_VFRAME;
458 data[2] = NEW_VFRAME;
459 data[0]->copy_from(up_vframe);
460 data[1]->copy_from(hi_vframe);
461 data[2]->copy_from(dn_vframe);
462 for(int i = 0; i < 3; i++)
467 void Theme::build_button(VFrame** &data,
468 unsigned char *png_overlay,
474 if(!png_overlay) return;
475 VFrame default_data(png_overlay);
477 if(!up_vframe || !hi_vframe || !dn_vframe) return;
478 data = new VFrame*[4];
479 data[0] = NEW_VFRAME;
480 data[1] = NEW_VFRAME;
481 data[2] = NEW_VFRAME;
482 data[3] = NEW_VFRAME;
483 data[0]->copy_from(up_vframe);
484 data[1]->copy_from(hi_vframe);
485 data[2]->copy_from(dn_vframe);
486 data[2]->copy_from(at_vframe);
487 for(int i = 0; i < 4; i++)
492 void Theme::build_toggle(VFrame** &data,
493 unsigned char *png_overlay,
496 VFrame *checked_vframe,
498 VFrame *checkedhi_vframe)
505 !checkedhi_vframe) return;
506 VFrame default_data(png_overlay);
507 data = new VFrame*[5];
508 data[0] = NEW_VFRAME;
509 data[1] = NEW_VFRAME;
510 data[2] = NEW_VFRAME;
511 data[3] = NEW_VFRAME;
512 data[4] = NEW_VFRAME;
513 data[0]->copy_from(up_vframe);
514 data[1]->copy_from(hi_vframe);
515 data[2]->copy_from(checked_vframe);
516 data[3]->copy_from(dn_vframe);
517 data[4]->copy_from(checkedhi_vframe);
518 for(int i = 0; i < 5; i++)
523 #define TIMEBAR_HEIGHT 10
524 #define PATCHBAY_W 145
528 void Theme::get_mwindow_sizes(MWindowGUI *gui, int w, int h)
531 mbuttons_y = gui->mainmenu->get_h() + 1;
533 mbuttons_h = get_image("mbutton_bg")->get_h();
535 mclock_y = mbuttons_y - 1 + mbuttons_h + widget_border;
536 mclock_w = get_image("clock_bg")->get_w() - 40;
537 mclock_h = get_image("clock_bg")->get_h();
538 mtimebar_x = get_image("patchbay_bg")->get_w();
539 mtimebar_y = mbuttons_y - 1 + mbuttons_h;
540 mtimebar_w = w - mtimebar_x;
541 mtimebar_h = get_image("timebar_bg")->get_h();
544 mzoom_y = h - get_image("statusbar")->get_h();
547 mstatus_y = mzoom_y + mzoom_h;
549 mstatus_h = h - mstatus_y;
550 mstatus_message_x = 10;
551 mstatus_message_y = 5;
552 mstatus_progress_x = mstatus_w - statusbar_cancel_data[0]->get_w() - 240;
553 mstatus_progress_y = mstatus_h - BC_WindowBase::get_resources()->progress_images[0]->get_h() - 3;
554 mstatus_progress_w = 230;
555 mstatus_cancel_x = mstatus_w - statusbar_cancel_data[0]->get_w();
556 mstatus_cancel_y = mstatus_h - statusbar_cancel_data[0]->get_h();
558 mcanvas_y = mbuttons_y - 1 + mbuttons_h;
560 mcanvas_h = mzoom_y - mtimebar_y;
562 patchbay_y = mcanvas_y + mclock_h;
563 patchbay_w = get_image("patchbay_bg")->get_w();
564 patchbay_h = mcanvas_h - mclock_h;
565 pane_w = get_image_set("xpane")[0]->get_w();
566 pane_h = get_image_set("ypane")[0]->get_h();
567 pane_x = mcanvas_x + mcanvas_w;
568 pane_y = mcanvas_y + mcanvas_h;
570 mhscroll_y = mcanvas_y + mcanvas_h - BC_ScrollBar::get_span(SCROLL_HORIZ);
571 mhscroll_w = w - BC_ScrollBar::get_span(SCROLL_VERT);
572 mvscroll_x = mcanvas_x + mcanvas_w;
573 mvscroll_y = mcanvas_y;
574 mvscroll_h = mcanvas_h;
577 void Theme::get_pane_sizes(MWindowGUI *gui,
594 if(number == TOP_LEFT_PANE ||
595 number == BOTTOM_LEFT_PANE)
597 *view_x += patchbay_w;
598 *view_w -= patchbay_w;
602 if(number == TOP_LEFT_PANE ||
603 number == TOP_RIGHT_PANE)
605 *view_y += mtimebar_h;
606 *view_h -= mtimebar_h;
610 if(number == BOTTOM_LEFT_PANE ||
611 number == BOTTOM_RIGHT_PANE ||
612 gui->horizontal_panes() ||
613 gui->total_panes() == 1)
615 *view_h -= BC_ScrollBar::get_span(SCROLL_HORIZ);
619 if(number == TOP_RIGHT_PANE ||
620 number == BOTTOM_RIGHT_PANE ||
621 gui->vertical_panes() ||
622 gui->total_panes() == 1)
624 *view_w -= BC_ScrollBar::get_span(SCROLL_VERT);
628 void Theme::draw_mwindow_bg(MWindowGUI *gui)
633 void Theme::get_cwindow_sizes(CWindowGUI *gui, int cwindow_controls)
637 int edit_w = EditPanel::calculate_w(mwindow, 1, 14);
638 int transport_w = PlayTransport::get_transport_width(mwindow) + toggle_margin;
639 int zoom_w = ZoomPanel::calculate_w(czoom_w);
640 int status_w = get_image("cwindow_active")->get_w();
641 // Space between buttons & status icon
649 if(mwindow->edl->session->cwindow_meter)
651 cmeter_x = mwindow->session->cwindow_w -
652 MeterPanel::get_meters_width(this,
653 mwindow->edl->session->audio_channels,
654 mwindow->edl->session->cwindow_meter);
658 cmeter_x = mwindow->session->cwindow_w + widget_border;
665 transport_w + widget_border +
666 zoom_w + widget_border +
670 buttons_h = get_image("cbuttons_left")->get_h();
672 cedit_x = widget_border;
673 cedit_y = mwindow->session->cwindow_h -
678 ctransport_x = widget_border;
679 ctransport_y = mwindow->session->cwindow_h -
680 get_image_set("autokeyframe")[0]->get_h() -
683 czoom_x = ctransport_x + transport_w + widget_border;
684 czoom_y = ctransport_y + widget_border;
687 cstatus_y = mwindow->session->cwindow_h -
688 get_image("cwindow_active")->get_h() - 30;
692 buttons_h = ctimebar_h +
694 EditPanel::calculate_h(mwindow) +
696 ctransport_x = widget_border;
697 ctransport_y = mwindow->session->cwindow_h -
702 cedit_x = ctransport_x + transport_w + widget_border;
703 cedit_y = ctransport_y;
705 czoom_x = cedit_x + edit_w + widget_border;
706 czoom_y = cedit_y + widget_border;
707 //printf("Theme::get_cwindow_sizes %d %d %d\n", __LINE__, czoom_x, zoom_w);
708 cstatus_x = czoom_x + zoom_w + division_w;
709 cstatus_y = ctransport_y;
715 ccomposite_w = get_image("cpanel_bg")->get_w();
716 ccomposite_h = mwindow->session->cwindow_h - buttons_h;
724 ccanvas_x = ccomposite_x + ccomposite_w;
726 ccanvas_h = ccomposite_h;
729 ccanvas_w = cmeter_x - ccanvas_x - widget_border;
736 ccomposite_x = -get_image("cpanel_bg")->get_w();
738 ccomposite_w = get_image("cpanel_bg")->get_w();
739 ccomposite_h = mwindow->session->cwindow_h - get_image("cbuttons_left")->get_h();
742 cedit_y = mwindow->session->cwindow_h + 17;
744 ctransport_y = cedit_y + 40;
747 ccanvas_w = mwindow->session->cwindow_w;
748 ccanvas_h = mwindow->session->cwindow_h;
749 cmeter_x = mwindow->session->cwindow_w;
750 cstatus_x = mwindow->session->cwindow_w;
751 cstatus_y = mwindow->session->cwindow_h;
752 czoom_x = mwindow->session->cwindow_w;
753 czoom_y = mwindow->session->cwindow_h;
760 cmeter_y = widget_border;
761 cmeter_h = mwindow->session->cwindow_h - cmeter_y - widget_border;
763 // ctimebar_x = ccanvas_x;
764 // ctimebar_y = ccanvas_y + ccanvas_h;
765 // ctimebar_w = ccanvas_w;
767 ctimebar_y = ccanvas_y + ccanvas_h;
768 ctimebar_w = mwindow->session->cwindow_w;
769 if(mwindow->edl->session->cwindow_meter)
771 ctimebar_w = cmeter_x - widget_border;
781 void Theme::draw_awindow_bg(AWindowGUI *gui)
783 gui->clear_box(0, 0, mwindow->session->awindow_w, mwindow->session->awindow_h);
787 void Theme::draw_vwindow_bg(VWindowGUI *gui)
791 // mwindow->session->vwindow_w,
792 // mwindow->session->vwindow_h);
794 // gui->draw_3segmenth(vtimebar_x,
803 void Theme::draw_cwindow_bg(CWindowGUI *gui)
805 gui->clear_box(0, 0, mwindow->session->cwindow_w, mwindow->session->cwindow_h);
809 void Theme::draw_lwindow_bg(LevelWindowGUI *gui)
811 gui->clear_box(0, 0, mwindow->session->lwindow_w, mwindow->session->lwindow_h);
816 void Theme::draw_rmonitor_bg(RecordMonitorGUI *gui)
818 gui->clear_box(0, 0, mwindow->session->rmonitor_w, mwindow->session->rmonitor_h);
823 void Theme::draw_rwindow_bg(RecordGUI *gui)
825 gui->clear_box(0, 0, mwindow->session->rwindow_w, mwindow->session->rwindow_h);
829 void Theme::draw_resource_bg(TrackCanvas *canvas,
830 ResourcePixmap *pixmap,
841 switch(mwindow->edl->local_session->zoom_track)
843 case 1024: image = get_image("resource1024"); break;
844 case 512: image = get_image("resource512"); break;
845 case 256: image = get_image("resource256"); break;
846 case 128: image = get_image("resource128"); break;
847 case 64: image = get_image("resource64"); break;
849 case 32: image = get_image("resource32"); break;
852 canvas->draw_3segmenth(x1,
862 void Theme::get_vwindow_sizes(VWindowGUI *gui)
864 int edit_w = EditPanel::calculate_w(mwindow, 0, 10);
865 int transport_w = PlayTransport::get_transport_width(mwindow) + toggle_margin;
866 // Space between buttons & time
870 int vtime_border = 15;
872 vmeter_y = widget_border;
873 vmeter_h = mwindow->session->vwindow_h - cmeter_y - widget_border;
876 if(mwindow->edl->session->vwindow_meter)
878 vmeter_x = mwindow->session->vwindow_w -
879 MeterPanel::get_meters_width(this,
880 mwindow->edl->session->audio_channels,
881 mwindow->edl->session->vwindow_meter);
885 vmeter_x = mwindow->session->vwindow_w + widget_border;
890 vcanvas_w = vmeter_x - vcanvas_x - widget_border;
894 transport_w + widget_border +
895 vtime_w + division_w +
896 vtime_border > vmeter_x)
898 buttons_h = get_image("vbuttons_left")->get_h();
899 vedit_x = widget_border;
900 vedit_y = mwindow->session->vwindow_h -
905 vtransport_x = widget_border;
906 vtransport_y = mwindow->session->vwindow_h -
907 get_image_set("autokeyframe")[0]->get_h() -
911 vtime_x = vdivision_x;
912 vtime_y = vedit_y + 20;
916 buttons_h = vtimebar_h +
918 EditPanel::calculate_h(mwindow) +
920 vtransport_x = widget_border;
921 vtransport_y = mwindow->session->vwindow_h -
926 vedit_x = vtransport_x + transport_w + widget_border;
927 vedit_y = vtransport_y;
929 vdivision_x = vedit_x + edit_w + division_w;
930 vtime_x = vdivision_x + vtime_border;
931 vtime_y = vedit_y + widget_border;
935 // vtimebar_x = vcanvas_x;
936 // vtimebar_y = vcanvas_y + vcanvas_h;
937 // vtimebar_w = vcanvas_w;
939 vcanvas_h = mwindow->session->vwindow_h - buttons_h;
941 vtimebar_y = vcanvas_y + vcanvas_h;
942 vtimebar_w = vmeter_x - widget_border;
947 void Theme::get_awindow_sizes(AWindowGUI *gui)
952 // afolders_y = deletedisk_data[0]->get_h();
954 afolders_w = mwindow->session->afolders_w;
955 afolders_h = mwindow->session->awindow_h - afolders_y;
956 adivider_x = afolders_x + afolders_w;
959 adivider_h = afolders_h;
960 alist_x = afolders_x + afolders_w + 5;
961 alist_y = afolders_y;
962 alist_w = mwindow->session->awindow_w - alist_x;
963 alist_h = afolders_h;
966 void Theme::get_rmonitor_sizes(int do_audio,
979 rmonitor_canvas_y = 30;
985 rmonitor_canvas_y = 0;
994 rmonitor_channel_x = x;
995 rmonitor_channel_y = 5;
997 rmonitor_canvas_y = 35;
1003 rmonitor_interlace_x = x;
1004 rmonitor_interlace_y = y;
1012 rmonitor_meter_x = mwindow->session->rmonitor_w -
1013 MeterPanel::get_meters_width(this, audio_channels, 1);
1014 rmonitor_meter_w = mwindow->session->rmonitor_w;
1018 rmonitor_meter_x = widget_border;
1019 rmonitor_meter_w = mwindow->session->rmonitor_w - widget_border * 2;
1022 rmonitor_meter_y = 40;
1023 rmonitor_meter_h = mwindow->session->rmonitor_h - 10 - rmonitor_meter_y;
1027 rmonitor_meter_x = mwindow->session->rmonitor_w;
1030 rmonitor_canvas_x = 0;
1031 rmonitor_canvas_w = rmonitor_meter_x - rmonitor_canvas_x;
1032 if(do_audio) rmonitor_canvas_w -= 10;
1033 rmonitor_canvas_h = mwindow->session->rmonitor_h - rmonitor_canvas_y;
1035 if(!do_video && do_audio)
1037 rmonitor_meter_y -= 30;
1038 rmonitor_meter_h += 30;
1043 void Theme::get_recordgui_sizes(RecordGUI *gui, int w, int h)
1047 void Theme::get_batchrender_sizes(BatchRenderGUI *gui,
1051 batchrender_x1 = 10;
1052 batchrender_x2 = 300;
1053 batchrender_x3 = 400;
1056 void Theme::get_plugindialog_sizes()
1059 plugindialog_new_x = x;
1060 plugindialog_new_y = y;
1061 plugindialog_shared_x = mwindow->session->plugindialog_w / 3;
1062 plugindialog_shared_y = y;
1063 plugindialog_module_x = mwindow->session->plugindialog_w * 2 / 3;
1064 plugindialog_module_y = y;
1066 plugindialog_new_w = plugindialog_shared_x - plugindialog_new_x - 10;
1067 plugindialog_new_h = mwindow->session->plugindialog_h - 100;
1068 plugindialog_shared_w = plugindialog_module_x - plugindialog_shared_x - 10;
1069 plugindialog_shared_h = mwindow->session->plugindialog_h - 100;
1070 plugindialog_module_w = mwindow->session->plugindialog_w - plugindialog_module_x - 10;
1071 plugindialog_module_h = mwindow->session->plugindialog_h - 100;
1073 plugindialog_newattach_x = plugindialog_new_x + 20;
1074 plugindialog_newattach_y = plugindialog_new_y + plugindialog_new_h + 10;
1075 plugindialog_sharedattach_x = plugindialog_shared_x + 20;
1076 plugindialog_sharedattach_y = plugindialog_shared_y + plugindialog_shared_h + 10;
1077 plugindialog_moduleattach_x = plugindialog_module_x + 20;
1078 plugindialog_moduleattach_y = plugindialog_module_y + plugindialog_module_h + 10;
1081 // void Theme::get_presetdialog_sizes(PresetsWindow *gui)
1083 // int x = window_border;
1084 // int y = window_border + BC_Title::calculate_h(gui, "P") + widget_border;
1086 // presets_list_x = x;
1087 // presets_list_y = y;
1088 // presets_list_w = mwindow->session->presetdialog_w / 2;
1089 // presets_list_h = mwindow->session->presetdialog_h -
1090 // BC_OKButton::calculate_h() -
1094 // presets_text_x = presets_list_x + presets_list_w + widget_border;
1095 // presets_text_y = y;
1096 // presets_text_w = mwindow->session->presetdialog_w - presets_text_x - window_border;
1097 // y += BC_TextBox::calculate_h(gui,
1100 // 1) + widget_border;
1102 // presets_delete_x = presets_text_x;
1103 // presets_delete_y = y;
1104 // y += BC_GenericButton::calculate_h() + widget_border;
1106 // presets_save_x = presets_text_x;
1107 // presets_save_y = y;
1108 // y += BC_GenericButton::calculate_h() + widget_border;
1110 // presets_apply_x = presets_text_x;
1111 // presets_apply_y = y;
1112 // y += BC_GenericButton::calculate_h();
1115 void Theme::get_keyframedialog_sizes(KeyFrameWindow *gui)
1117 int x = window_border;
1118 int y = window_border +
1119 BC_Title::calculate_h(gui, "P", LARGEFONT) +
1124 #ifdef EDIT_KEYFRAME
1125 presets_list_w = mwindow->session->keyframedialog_w / 2 -
1129 presets_list_w = mwindow->session->keyframedialog_w -
1133 presets_list_h = mwindow->session->keyframedialog_h -
1134 BC_OKButton::calculate_h() -
1138 BC_Title::calculate_h(gui, "P") -
1140 BC_TextBox::calculate_h(gui,
1145 (BC_GenericButton::calculate_h() + widget_border) * 3 -
1147 y += presets_list_h + widget_border + widget_border + BC_Title::calculate_h(gui, "P");
1150 presets_text_w = presets_list_w;
1151 y += BC_TextBox::calculate_h(gui,
1156 presets_delete_x = presets_text_x;
1157 presets_delete_y = y;
1158 y += BC_GenericButton::calculate_h() + widget_border;
1160 presets_save_x = presets_text_x;
1162 y += BC_GenericButton::calculate_h() + widget_border;
1164 presets_apply_x = presets_text_x;
1165 presets_apply_y = y;
1166 y += BC_GenericButton::calculate_h();
1168 #ifdef EDIT_KEYFRAME
1169 x = mwindow->session->keyframedialog_w / 2 + widget_border;
1171 BC_Title::calculate_h(gui, "P", LARGEFONT) +
1174 keyframe_list_x = x;
1175 keyframe_list_y = y;
1176 keyframe_list_w = mwindow->session->keyframedialog_w / 2 -
1179 keyframe_list_h = mwindow->session->keyframedialog_h -
1183 BC_Title::calculate_h(gui, "P") -
1185 BC_TextBox::calculate_h(gui,
1190 BC_Title::calculate_h(gui, "P") -
1192 BC_OKButton::calculate_h() -
1194 // keyframe_text_x = keyframe_list_x + keyframe_list_w + widget_border;
1195 // keyframe_text_y = y;
1196 // keyframe_text_w = mwindow->session->keyframedialog_w - keyframe_text_x - window_border;
1197 // y += BC_TextBox::calculate_h(gui,
1200 // 1) + widget_border;
1203 y += keyframe_list_h + BC_Title::calculate_h(gui, "P") + widget_border + widget_border;
1204 keyframe_value_x = keyframe_list_x;
1205 keyframe_value_y = y;
1206 keyframe_value_w = keyframe_list_w;
1207 y += BC_TextBox::calculate_h(gui,
1212 keyframe_all_x = keyframe_value_x;
1220 void Theme::get_menueffect_sizes(int use_list)
1224 menueffect_list_x = 10;
1225 menueffect_list_y = 10;
1226 menueffect_list_w = mwindow->session->menueffect_w - 400;
1227 menueffect_list_h = mwindow->session->menueffect_h -
1229 BC_OKButton::calculate_h() - 10;
1233 menueffect_list_x = 0;
1234 menueffect_list_y = 10;
1235 menueffect_list_w = 0;
1236 menueffect_list_h = 0;
1239 menueffect_file_x = menueffect_list_x + menueffect_list_w + 10;
1240 menueffect_file_y = 10;
1242 menueffect_tools_x = menueffect_file_x;
1243 menueffect_tools_y = menueffect_file_y + 20;
1246 void Theme::get_preferences_sizes()
1250 void Theme::draw_preferences_bg(PreferencesWindow *gui)
1254 void Theme::get_new_sizes(NewWindow *gui)
1258 void Theme::draw_new_bg(NewWindow *gui)
1262 void Theme::draw_setformat_bg(SetFormatWindow *window)