X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fzwindowgui.C;h=722e6c14988dc7c7186ffc9f9e2991684a18cfdc;hp=bada1625e68e7fff709ccd62edaa0ead71857325;hb=HEAD;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/zwindowgui.C b/cinelerra-5.1/cinelerra/zwindowgui.C index bada1625..94b52e1c 100644 --- a/cinelerra-5.1/cinelerra/zwindowgui.C +++ b/cinelerra-5.1/cinelerra/zwindowgui.C @@ -39,7 +39,7 @@ ZWindowGUI::ZWindowGUI(MWindow *mwindow, ZWindow *zwindow, Mixer *mixer) : BC_Window(zwindow->title, mixer->x, mixer->y, mixer->w, mixer->h, - 100, 75, 1, 1, 0) + xS(100), yS(75), 1, 1, 0) { this->mwindow = mwindow; this->zwindow = zwindow; @@ -47,6 +47,9 @@ ZWindowGUI::ZWindowGUI(MWindow *mwindow, ZWindow *zwindow, Mixer *mixer) canvas = 0; playback_engine = 0; highlighted = 0; + playable = zwindow->playable; +// *** CONTEXT_HELP *** + context_help_set_keyword("Multi-Camera"); } ZWindowGUI::~ZWindowGUI() @@ -59,7 +62,8 @@ void ZWindowGUI::create_objects() { lock_window("ZWindowGUI::create_objects"); - canvas = new ZWindowCanvas(mwindow, this, 10,10, get_w()-20,get_h()-20); + canvas = new ZWindowCanvas(mwindow, this, + xS(10),yS(10), get_w()-xS(20),get_h()-yS(20)); canvas->create_objects(mwindow->edl); playback_engine = new PlaybackEngine(mwindow, canvas); playback_engine->create_objects(); @@ -71,7 +75,8 @@ void ZWindowGUI::create_objects() int ZWindowGUI::resize_event(int w, int h) { - canvas->reposition_window(0, 10,10, w-20,h-20); + canvas->reposition_window(0, + xS(10),yS(10), w-xS(20),h-yS(20)); zwindow->reposition(get_x(), get_y(), w, h); BC_WindowBase::resize_event(w, h); return 1; @@ -83,7 +88,7 @@ int ZWindowGUI::translation_event() int ZWindowGUI::close_event() { - set_done(0); + set_done(1); return 1; } @@ -94,26 +99,26 @@ int ZWindowGUI::keypress_event() close_event(); return 1; } - unlock_window(); int result = 1; switch( key ) { - case 'f': - if( mwindow->session->zwindow_fullscreen ) - canvas->stop_fullscreen(); - else - canvas->start_fullscreen(); - break; + case 'f': { + int on = canvas->get_fullscreen() ? 0 : 1; + canvas->set_fullscreen(on, 1); + break; } case ESC: - if( mwindow->session->zwindow_fullscreen ) - canvas->stop_fullscreen(); + canvas->set_fullscreen(0, 1); break; default: + unlock_window(); mwindow->gui->lock_window("ZWindowGUI::keypress_event"); result = mwindow->gui->mbuttons->transport->do_keypress(key); mwindow->gui->unlock_window(); + lock_window("ZWindowGUI::keypress_event 1"); } - lock_window("ZWindowGUI::keypress_event 1"); + if( !result ) + result = context_help_check_and_show(); + return result; } @@ -130,7 +135,7 @@ int ZWindowGUI::button_press_event() start = mwindow->edl->tracks->total_recordable_length(); if( start < 0 ) start = end; } - if( (end-start) > 1e-4 ) { + if( (end-start) > 1e-4 && zwindow->edl ) { LocalSession *zlocal_session = zwindow->edl->local_session; zlocal_session->set_selectionstart(end); zlocal_session->set_selectionend(end); @@ -184,14 +189,64 @@ int ZWindowGUI::draw_overlays() { BC_WindowBase *cvs = canvas->get_canvas(); if( !cvs || cvs->get_video_on() ) return 0; - if( highlighted != zwindow->highlighted ) { - highlighted = zwindow->highlighted; - cvs->set_color(WHITE); - cvs->set_inverse(); - cvs->draw_rectangle(0, 0, cvs->get_w(), cvs->get_h()); - cvs->draw_rectangle(1, 1, cvs->get_w() - 2, cvs->get_h() - 2); - cvs->set_opaque(); - } + set_highlighted(zwindow->highlighted); + if( !playable ) set_playable(-1); + return 1; +} + +void ZWindowGUI::set_highlighted(int v) +{ + if( highlighted == v ) return; + highlighted = v; + BC_WindowBase *cvs = canvas->get_canvas(); + cvs->set_color(WHITE); + cvs->set_inverse(); + cvs->draw_rectangle(0, 0, cvs->get_w(), cvs->get_h()); + cvs->draw_rectangle(1, 1, cvs->get_w() - 2, cvs->get_h() - 2); + cvs->set_opaque(); +} + +void ZWindowGUI::set_playable(int v) +{ + if( playable == v ) return; + playable = v>0 ? 1 : 0; + zwindow->playable = playable; + BC_WindowBase *cvs = canvas->get_canvas(); + cvs->set_color(WHITE); + cvs->set_inverse(); + int dx = cvs->get_w()/16+1, dy = cvs->get_h()/16+1; + int x = xS(5), y = yS(5), lw = (dx + dy)/16+1; + cvs->set_line_width(lw); + cvs->draw_line(x, y, x+dx, y+dy); + cvs->draw_line(x, y+dy, x+dx, y); + cvs->set_opaque(); + cvs->set_line_width(1); +} + + +ZWindowCanvasTileMixers::ZWindowCanvasTileMixers(ZWindowCanvas *canvas) + : BC_MenuItem(_("Tile Mixers")) +{ + this->canvas = canvas; +} +int ZWindowCanvasTileMixers::handle_event() +{ + canvas->mwindow->tile_mixers(); + return 1; +} + +ZWindowCanvasPlayable::ZWindowCanvasPlayable(ZWindowCanvas *canvas) + : BC_MenuItem(_("Playable")) +{ + this->canvas = canvas; + set_checked(canvas->gui->zwindow->playable); +} +int ZWindowCanvasPlayable::handle_event() +{ + int v = !get_checked() ? 1 : 0; + set_checked(v); + canvas->gui->set_playable(v); + canvas->get_canvas()->flash(1); return 1; } @@ -203,6 +258,13 @@ ZWindowCanvas::ZWindowCanvas(MWindow *mwindow, ZWindowGUI *gui, this->gui = gui; } +void ZWindowCanvas::create_objects(EDL *edl) +{ + Canvas::create_objects(edl); + canvas_menu->add_item(new ZWindowCanvasTileMixers(this)); + canvas_menu->add_item(new ZWindowCanvasPlayable(this)); +} + void ZWindowCanvas::close_source() { gui->unlock_window(); @@ -215,7 +277,6 @@ void ZWindowCanvas::close_source() } } - void ZWindowCanvas::draw_refresh(int flush) { EDL *edl = gui->zwindow->edl; @@ -241,18 +302,52 @@ void ZWindowCanvas::draw_refresh(int flush) if( gui->draw_overlays() ) dirty = 1; - if( dirty ) cvs->flash(flush); } -int ZWindowCanvas::get_fullscreen() +float ZWindowCanvas::get_auto_zoom() { - return mwindow->session->zwindow_fullscreen; + EDL *edl = gui->zwindow->edl; + if( !edl ) edl = mwindow->edl; + float conformed_w, conformed_h; + edl->calculate_conformed_dimensions(0, conformed_w, conformed_h); + BC_WindowBase *window = get_canvas(); + int cw = window ? window->get_w() : w; + int ch = window ? window->get_h() : h; + float zoom_x = cw / conformed_w; + float zoom_y = ch / conformed_h; + return zoom_x < zoom_y ? zoom_x : zoom_y; } -void ZWindowCanvas::set_fullscreen(int value) +float ZWindowCanvas::get_zoom() { - mwindow->session->zwindow_fullscreen = value; + return gui->zwindow->zoom; +} +void ZWindowCanvas::update_zoom(int x, int y, float zoom) +{ + gui->zwindow->zoom = zoom; +} + +void ZWindowCanvas::zoom_auto() +{ + EDL *edl = gui->zwindow->edl; + if( !edl ) edl = mwindow->edl; + set_zoom(edl, 0); +} + +void ZWindowCanvas::zoom_resize_window(float zoom) +{ + if( !zoom ) zoom = get_auto_zoom(); + EDL *edl = gui->zwindow->edl; + if( !edl ) edl = mwindow->edl; + int ow = edl->session->output_w, oh = edl->session->output_h; + int canvas_w, canvas_h; + calculate_sizes(mwindow->edl->get_aspect_ratio(), ow, oh, + zoom, canvas_w, canvas_h); + int new_w = canvas_w + xS(20); + int new_h = canvas_h + yS(20); + gui->resize_window(new_w, new_h); + gui->resize_event(new_w, new_h); }