1 #include "awindowgui.h"
4 #include "cwindowgui.h"
6 #include "edlsession.h"
8 #include "levelwindowgui.h"
10 #include "localsession.h"
12 #include "mainsession.h"
14 #include "meterpanel.h"
15 #include "mwindowgui.h"
17 #include "overlayframe.h"
19 #include "playtransport.h"
20 #include "recordgui.h"
21 #include "recordmonitor.h"
22 #include "resourcepixmap.h"
23 #include "statusbar.h"
26 #include "trackcanvas.h"
28 #include "vwindowgui.h"
43 theme_title = DEFAULT_THEME;
47 mtransport_margin = 0;
50 BC_WindowBase::get_resources()->bg_color = BLOND;
51 BC_WindowBase::get_resources()->button_up = 0xffc000;
52 BC_WindowBase::get_resources()->button_highlighted = 0xffe000;
53 BC_WindowBase::get_resources()->recursive_resizing = 0;
66 #include "data/about_png.h"
67 about_bg = new VFrame(about_png);
77 // Need to delete everything here
82 aspect_ratios.remove_all_objects();
83 frame_rates.remove_all_objects();
84 frame_sizes.remove_all_objects();
85 sample_rates.remove_all_objects();
86 zoom_values.remove_all_objects();
89 void Theme::flush_images()
91 if(data_buffer) delete [] data_buffer;
92 if(contents_buffer) delete [] contents_buffer;
95 contents.remove_all();
98 void Theme::initialize()
100 message_normal = BLACK;
103 // Force to use local data for images
104 extern unsigned char _binary_theme_data_start[];
105 set_data(_binary_theme_data_start);
107 // Set images which weren't set by subclass
108 new_image("mode_add", "mode_add.png");
109 new_image("mode_divide", "mode_divide.png");
110 new_image("mode_multiply", "mode_multiply.png");
111 new_image("mode_normal", "mode_normal.png");
112 new_image("mode_replace", "mode_replace.png");
113 new_image("mode_subtract", "mode_subtract.png");
119 void Theme::build_menus()
123 aspect_ratios.append(new BC_ListBoxItem("3:2"));
124 aspect_ratios.append(new BC_ListBoxItem("4:3"));
125 aspect_ratios.append(new BC_ListBoxItem("16:9"));
126 aspect_ratios.append(new BC_ListBoxItem("2.10:1"));
127 aspect_ratios.append(new BC_ListBoxItem("2.20:1"));
128 aspect_ratios.append(new BC_ListBoxItem("2.25:1"));
129 aspect_ratios.append(new BC_ListBoxItem("2.30:1"));
130 aspect_ratios.append(new BC_ListBoxItem("2.35:1"));
131 aspect_ratios.append(new BC_ListBoxItem("2.66:1"));
132 frame_sizes.append(new BC_ListBoxItem("160x120"));
133 frame_sizes.append(new BC_ListBoxItem("240x180"));
134 frame_sizes.append(new BC_ListBoxItem("320x240"));
135 frame_sizes.append(new BC_ListBoxItem("360x240"));
136 frame_sizes.append(new BC_ListBoxItem("400x300"));
137 frame_sizes.append(new BC_ListBoxItem("512x384"));
138 frame_sizes.append(new BC_ListBoxItem("640x480"));
139 frame_sizes.append(new BC_ListBoxItem("720x480"));
140 frame_sizes.append(new BC_ListBoxItem("720x576"));
141 frame_sizes.append(new BC_ListBoxItem("1280x720"));
142 frame_sizes.append(new BC_ListBoxItem("960x1080"));
143 frame_sizes.append(new BC_ListBoxItem("1920x1080"));
144 frame_sizes.append(new BC_ListBoxItem("1920x1088"));
145 sample_rates.append(new BC_ListBoxItem("8000"));
146 sample_rates.append(new BC_ListBoxItem("16000"));
147 sample_rates.append(new BC_ListBoxItem("22050"));
148 sample_rates.append(new BC_ListBoxItem("32000"));
149 sample_rates.append(new BC_ListBoxItem("44100"));
150 sample_rates.append(new BC_ListBoxItem("48000"));
151 sample_rates.append(new BC_ListBoxItem("96000"));
152 sample_rates.append(new BC_ListBoxItem("192000"));
153 frame_rates.append(new BC_ListBoxItem("1"));
154 frame_rates.append(new BC_ListBoxItem("5"));
155 frame_rates.append(new BC_ListBoxItem("10"));
156 frame_rates.append(new BC_ListBoxItem("12"));
157 frame_rates.append(new BC_ListBoxItem("15"));
158 frame_rates.append(new BC_ListBoxItem("23.97"));
159 frame_rates.append(new BC_ListBoxItem("24"));
160 frame_rates.append(new BC_ListBoxItem("25"));
161 frame_rates.append(new BC_ListBoxItem("29.97"));
162 frame_rates.append(new BC_ListBoxItem("30"));
163 frame_rates.append(new BC_ListBoxItem("50"));
164 frame_rates.append(new BC_ListBoxItem("59.94"));
165 frame_rates.append(new BC_ListBoxItem("60"));
166 char string[BCTEXTLEN];
167 for(int i = 1; i < 17; i++)
169 sprintf(string, "%d", (int)pow(2, i));
170 zoom_values.append(new BC_ListBoxItem(string));
175 void Theme::overlay(VFrame *dst, VFrame *src, int in_x1, int in_x2)
179 unsigned char **in_rows;
180 unsigned char **out_rows;
184 w = MIN(src->get_w(), dst->get_w());
185 h = MIN(dst->get_h(), src->get_h());
192 h = MIN(dst->get_h(), src->get_h());
194 in_rows = src->get_rows();
195 out_rows = dst->get_rows();
197 switch(src->get_color_model())
200 switch(dst->get_color_model())
203 for(int i = 0; i < h; i++)
205 unsigned char *in_row = in_rows[i] + in_x1 * 4;
206 unsigned char *out_row = out_rows[i];
207 for(int j = 0; j < w; j++)
209 int opacity = in_row[3];
210 int transparency = 0xff - opacity;
211 out_row[0] = (in_row[0] * opacity + out_row[0] * transparency) / 0xff;
212 out_row[1] = (in_row[1] * opacity + out_row[1] * transparency) / 0xff;
213 out_row[2] = (in_row[2] * opacity + out_row[2] * transparency) / 0xff;
214 out_row[3] = MAX(in_row[3], out_row[3]);
221 for(int i = 0; i < h; i++)
223 unsigned char *in_row = in_rows[i] + in_x1 * 4;
224 unsigned char *out_row = out_rows[i];
225 for(int j = 0; j < w; j++)
227 int opacity = in_row[3];
228 int transparency = 0xff - opacity;
229 out_row[0] = (in_row[0] * opacity + out_row[0] * transparency) / 0xff;
230 out_row[1] = (in_row[1] * opacity + out_row[1] * transparency) / 0xff;
231 out_row[2] = (in_row[2] * opacity + out_row[2] * transparency) / 0xff;
242 void Theme::build_transport(char *title,
243 unsigned char *png_overlay,
247 if(!png_overlay) return;
248 VFrame default_data(png_overlay);
250 data[0] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
251 data[1] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
252 data[2] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
253 data[0]->clear_frame();
254 data[1]->clear_frame();
255 data[2]->clear_frame();
257 for(int i = 0; i < 3; i++)
261 if(!bg_data[i]) break;
267 in_x2 = default_data.get_w();
271 in_x1 = (int)(bg_data[i]->get_w() * 0.33);
272 in_x2 = in_x1 + default_data.get_w();
276 in_x1 = bg_data[i]->get_w() - default_data.get_w();
277 in_x2 = in_x1 + default_data.get_w();
289 new_image_set_images(title, 3, data[0], data[1], data[2]);
300 void Theme::build_patches(VFrame** &data,
301 unsigned char *png_overlay,
305 if(!png_overlay || !bg_data) return;
306 VFrame default_data(png_overlay);
307 data = new VFrame*[5];
308 data[0] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
309 data[1] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
310 data[2] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
311 data[3] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
312 data[4] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
314 for(int i = 0; i < 5; i++)
323 in_x2 = default_data.get_w();
327 in_x1 = (int)(bg_data[i]->get_w() * 0.33);
328 in_x2 = in_x1 + default_data.get_w();
332 in_x1 = bg_data[i]->get_w() - default_data.get_w();
333 in_x2 = in_x1 + default_data.get_w();
351 void Theme::build_button(VFrame** &data,
352 unsigned char *png_overlay,
357 if(!png_overlay) return;
358 VFrame default_data(png_overlay);
360 if(!up_vframe || !hi_vframe || !dn_vframe) return;
361 data = new VFrame*[3];
362 data[0] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
363 data[1] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
364 data[2] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
365 data[0]->copy_from(up_vframe);
366 data[1]->copy_from(hi_vframe);
367 data[2]->copy_from(dn_vframe);
368 for(int i = 0; i < 3; i++)
373 void Theme::build_toggle(VFrame** &data,
374 unsigned char *png_overlay,
377 VFrame *checked_vframe,
379 VFrame *checkedhi_vframe)
386 !checkedhi_vframe) return;
387 VFrame default_data(png_overlay);
388 data = new VFrame*[5];
389 data[0] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
390 data[1] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
391 data[2] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
392 data[3] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
393 data[4] = new VFrame(0, default_data.get_w(), default_data.get_h(), BC_RGBA8888);
394 data[0]->copy_from(up_vframe);
395 data[1]->copy_from(hi_vframe);
396 data[2]->copy_from(checked_vframe);
397 data[3]->copy_from(dn_vframe);
398 data[4]->copy_from(checkedhi_vframe);
399 for(int i = 0; i < 5; i++)
404 #define TIMEBAR_HEIGHT 10
405 #define PATCHBAY_W 145
409 void Theme::get_mwindow_sizes(MWindowGUI *gui, int w, int h)
413 void Theme::draw_mwindow_bg(MWindowGUI *gui)
420 void Theme::draw_awindow_bg(AWindowGUI *gui)
422 gui->clear_box(0, 0, mwindow->session->awindow_w, mwindow->session->awindow_h);
426 void Theme::draw_vwindow_bg(VWindowGUI *gui)
430 // mwindow->session->vwindow_w,
431 // mwindow->session->vwindow_h);
433 // gui->draw_3segmenth(vtimebar_x,
442 void Theme::draw_cwindow_bg(CWindowGUI *gui)
444 gui->clear_box(0, 0, mwindow->session->cwindow_w, mwindow->session->cwindow_h);
448 void Theme::draw_lwindow_bg(LevelWindowGUI *gui)
450 gui->clear_box(0, 0, mwindow->session->lwindow_w, mwindow->session->lwindow_h);
455 void Theme::draw_rmonitor_bg(RecordMonitorGUI *gui)
457 gui->clear_box(0, 0, mwindow->session->rmonitor_w, mwindow->session->rmonitor_h);
462 void Theme::draw_rwindow_bg(RecordGUI *gui)
464 gui->clear_box(0, 0, mwindow->session->rwindow_w, mwindow->session->rwindow_h);
468 void Theme::draw_resource_bg(TrackCanvas *canvas,
469 ResourcePixmap *pixmap,
480 switch(mwindow->edl->local_session->zoom_track)
482 case 1024: image = get_image("resource1024"); break;
483 case 512: image = get_image("resource512"); break;
484 case 256: image = get_image("resource256"); break;
485 case 128: image = get_image("resource128"); break;
486 case 64: image = get_image("resource64"); break;
488 case 32: image = get_image("resource32"); break;
491 canvas->draw_3segmenth(x1,
500 void Theme::get_vwindow_sizes(VWindowGUI *gui)
504 void Theme::get_cwindow_sizes(CWindowGUI *gui, int cwindow_controls)
508 void Theme::get_awindow_sizes(AWindowGUI *gui)
513 // afolders_y = deletedisk_data[0]->get_h();
515 afolders_w = mwindow->session->afolders_w;
516 afolders_h = mwindow->session->awindow_h - afolders_y;
517 adivider_x = afolders_x + afolders_w;
520 adivider_h = afolders_h;
521 alist_x = afolders_x + afolders_w + 5;
522 alist_y = afolders_y;
523 alist_w = mwindow->session->awindow_w - alist_x;
524 alist_h = afolders_h;
527 void Theme::get_rmonitor_sizes(int do_audio,
540 rmonitor_canvas_y = 30;
546 rmonitor_canvas_y = 0;
555 rmonitor_channel_x = x;
556 rmonitor_channel_y = 5;
558 rmonitor_canvas_y = 35;
564 rmonitor_interlace_x = x;
565 rmonitor_interlace_y = y;
571 rmonitor_meter_x = mwindow->session->rmonitor_w - MeterPanel::get_meters_width(audio_channels, 1);
572 rmonitor_meter_y = 40;
573 rmonitor_meter_h = mwindow->session->rmonitor_h - 10 - rmonitor_meter_y;
577 rmonitor_meter_x = mwindow->session->rmonitor_w;
580 rmonitor_canvas_x = 0;
581 rmonitor_canvas_w = rmonitor_meter_x - rmonitor_canvas_x;
582 if(do_audio) rmonitor_canvas_w -= 10;
583 rmonitor_canvas_h = mwindow->session->rmonitor_h - rmonitor_canvas_y;
586 void Theme::get_recordgui_sizes(RecordGUI *gui, int w, int h)
590 void Theme::get_batchrender_sizes(BatchRenderGUI *gui,
595 batchrender_x2 = 300;
596 batchrender_x3 = 400;
599 void Theme::get_plugindialog_sizes()
602 plugindialog_new_x = x;
603 plugindialog_new_y = y;
604 plugindialog_shared_x = mwindow->session->plugindialog_w / 3;
605 plugindialog_shared_y = y;
606 plugindialog_module_x = mwindow->session->plugindialog_w * 2 / 3;
607 plugindialog_module_y = y;
609 plugindialog_new_w = plugindialog_shared_x - plugindialog_new_x - 10;
610 plugindialog_new_h = mwindow->session->plugindialog_h - 110;
611 plugindialog_shared_w = plugindialog_module_x - plugindialog_shared_x - 10;
612 plugindialog_shared_h = mwindow->session->plugindialog_h - 110;
613 plugindialog_module_w = mwindow->session->plugindialog_w - plugindialog_module_x - 10;
614 plugindialog_module_h = mwindow->session->plugindialog_h - 110;
616 plugindialog_newattach_x = plugindialog_new_x + 20;
617 plugindialog_newattach_y = plugindialog_new_y + plugindialog_new_h + 10;
618 plugindialog_sharedattach_x = plugindialog_shared_x + 20;
619 plugindialog_sharedattach_y = plugindialog_shared_y + plugindialog_shared_h + 10;
620 plugindialog_moduleattach_x = plugindialog_module_x + 20;
621 plugindialog_moduleattach_y = plugindialog_module_y + plugindialog_module_h + 10;
624 void Theme::get_menueffect_sizes(int use_list)
628 menueffect_list_x = 10;
629 menueffect_list_y = 10;
630 menueffect_list_w = mwindow->session->menueffect_w - 400;
631 menueffect_list_h = mwindow->session->menueffect_h -
633 BC_OKButton::calculate_h() - 10;
637 menueffect_list_x = 0;
638 menueffect_list_y = 10;
639 menueffect_list_w = 0;
640 menueffect_list_h = 0;
643 menueffect_file_x = menueffect_list_x + menueffect_list_w + 10;
644 menueffect_file_y = 10;
646 menueffect_tools_x = menueffect_file_x;
647 menueffect_tools_y = menueffect_file_y + 20;
650 void Theme::get_preferences_sizes()
654 void Theme::draw_preferences_bg(PreferencesWindow *gui)
658 void Theme::get_new_sizes(NewWindow *gui)
662 void Theme::draw_new_bg(NewWindow *gui)
666 void Theme::draw_setformat_bg(SetFormatWindow *window)