X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcanvas.C;h=0779224e6f7057b4d8840ba7868333e0ef56aef6;hp=850177b43bbb8af90ce847e0a2921743614f9d79;hb=HEAD;hpb=0e16112661802284c0d2c9eb8d1df84141125e91 diff --git a/cinelerra-5.1/cinelerra/canvas.C b/cinelerra-5.1/cinelerra/canvas.C index 850177b4..0779224e 100644 --- a/cinelerra-5.1/cinelerra/canvas.C +++ b/cinelerra-5.1/cinelerra/canvas.C @@ -114,32 +114,11 @@ void Canvas::use_auxwindow(BC_WindowBase *aux) canvas_auxwindow = aux; } -void Canvas::use_cwindow() -{ - canvas_menu->use_cwindow(); - fullscreen_menu->use_cwindow(); -} - -void Canvas::use_rwindow() -{ - canvas_menu->use_rwindow(); -} - -void Canvas::use_vwindow() -{ - canvas_menu->use_vwindow(); -} - int Canvas::get_fullscreen() { return is_fullscreen; } -void Canvas::set_fullscreen(int value) -{ - is_fullscreen = value; -} - // Get dimensions given a zoom void Canvas::calculate_sizes(float aspect_ratio, int output_w, int output_h, float zoom, @@ -165,7 +144,7 @@ float Canvas::get_x_offset(EDL *edl, int single_channel, int canvas_h = get_canvas()->get_h(), out_h = canvas_h; float conformed_ratio = conformed_w/conformed_h; if( (float)out_w/out_h > conformed_ratio ) - out_w = out_h * conformed_ratio + 0.5; + out_w = out_h * conformed_ratio + 0.5f; float ret = out_w >= canvas_w ? 0 : -0.5f*(canvas_w - out_w) / zoom_x; return ret; } @@ -576,29 +555,34 @@ void Canvas::stop_video() } } - -int Canvas::use_fullscreen(int on) +int Canvas::set_fullscreen(int on, int unlock) { + int ret = 0; + BC_WindowBase *window = get_canvas(); + if( unlock ) + window->unlock_window(); if( on && !get_fullscreen() ) { start_fullscreen(); - return 1; + ret = 1; } if( !on && get_fullscreen() ) { stop_fullscreen(); - return 1; + ret = 1; } - return 0; + if( unlock ) + window->lock_window("Canvas::set_fullscreen"); + return ret; } void Canvas::start_fullscreen() { - set_fullscreen(1); + is_fullscreen = 1; create_canvas(); } void Canvas::stop_fullscreen() { - set_fullscreen(0); + is_fullscreen = 0; create_canvas(); } @@ -661,7 +645,6 @@ void Canvas::create_canvas() } - int Canvas::cursor_leave_event_base(BC_WindowBase *caller) { int result = 0; @@ -694,22 +677,20 @@ int Canvas::keypress_event(BC_WindowBase *caller) { int key = caller->get_keypress(); switch( key ) { - case 'f': - caller->unlock_window(); - use_fullscreen(get_fullscreen() ? 0 : 1); - caller->lock_window("Canvas::keypress_event 1"); - break; + case 'f': { + int on = get_fullscreen() ? 0 : 1; + set_fullscreen(on, 1); + break; } case ESC: - caller->unlock_window(); - use_fullscreen(0); - caller->lock_window("Canvas::keypress_event 2"); + set_fullscreen(0, 1); break; default: - return 0; + return caller->context_help_check_and_show(); } return 1; } +// process_scope uses the refresh frame for opengl void Canvas::update_refresh(VideoDevice *device, VFrame *output_frame) { int best_color_model = output_frame->get_color_model(); @@ -752,6 +733,21 @@ void Canvas::update_refresh(VideoDevice *device, VFrame *output_frame) } else refresh_frame->transfer_from(output_frame, -1); + draw_scope(refresh_frame, 1); +} + +void Canvas::process_scope(VideoDevice *video, VFrame *frame) +{ + if( !scope_on() ) return; + int use_opengl = + video->out_config->driver == PLAYBACK_X11_GL && + frame->get_opengl_state() != VFrame::RAM; + if( use_opengl ) { + update_refresh(video, frame); + frame = refresh_frame; + } + if( frame ) + draw_scope(frame, 0); } void Canvas::clear(int flash) @@ -767,16 +763,22 @@ void Canvas::clear_borders(EDL *edl) { BC_WindowBase *window = get_canvas(); if( !window ) return; - int window_w = window->get_w(); int window_h = window->get_h(); + int color = get_clear_color(); + window->set_color(color); + + if( !edl ) { + window->draw_box(0, 0, window_w, window_h); + window->flash(0); + return; + } + float output_x1,output_y1, output_x2,output_y2; float canvas_x1,canvas_y1, canvas_x2,canvas_y2; get_transfers(edl, output_x1, output_y1, output_x2, output_y2, canvas_x1, canvas_y1, canvas_x2, canvas_y2); - int color = get_clear_color(); - window->set_color(color); if( canvas_y1 > 0 ) { window->draw_box(0, 0, window_w, canvas_y1); @@ -912,11 +914,6 @@ void CanvasFullScreenPopup::create_objects() add_item(new CanvasSubWindowItem(canvas)); } -void CanvasFullScreenPopup::use_cwindow() -{ - add_item(new CanvasPopupAuto(canvas)); -} - CanvasSubWindowItem::CanvasSubWindowItem(Canvas *canvas) : BC_MenuItem(_("Windowed"), "f", 'f') { @@ -927,9 +924,7 @@ int CanvasSubWindowItem::handle_event() { // It isn't a problem to delete the canvas from in here because the event // dispatcher is the canvas subwindow. - canvas->subwindow->unlock_window(); - canvas->use_fullscreen(0); - canvas->subwindow->lock_window("CanvasSubWindowItem::handle_event"); + canvas->set_fullscreen(0, 1); return 1; } @@ -945,7 +940,7 @@ CanvasPopup::~CanvasPopup() } CanvasZoomSize::CanvasZoomSize(Canvas *canvas) - : BC_MenuItem(_("Zoom...")) + : BC_MenuItem(_("Resize Window...")) { this->canvas = canvas; } @@ -976,26 +971,6 @@ void CanvasPopup::create_objects() submenu->add_submenuitem(new CanvasPopupSize(canvas, _("Zoom 400%"), 4.0)); } -void CanvasPopup::use_cwindow() -{ - add_item(new CanvasPopupAuto(canvas)); - add_item(new CanvasPopupResetCamera(canvas)); - add_item(new CanvasPopupResetProjector(canvas)); - add_item(new CanvasPopupCameraKeyframe(canvas)); - add_item(new CanvasPopupProjectorKeyframe(canvas)); - add_item(toggle_controls = new CanvasToggleControls(canvas)); -} - -void CanvasPopup::use_rwindow() -{ - add_item(new CanvasPopupResetTranslation(canvas)); -} - -void CanvasPopup::use_vwindow() -{ - add_item(new CanvasPopupRemoveSource(canvas)); -} - CanvasPopupAuto::CanvasPopupAuto(Canvas *canvas) : BC_MenuItem(_("Zoom Auto")) @@ -1074,7 +1049,6 @@ int CanvasPopupProjectorKeyframe::handle_event() } - CanvasPopupResetTranslation::CanvasPopupResetTranslation(Canvas *canvas) : BC_MenuItem(_("Reset translation")) { @@ -1087,33 +1061,6 @@ int CanvasPopupResetTranslation::handle_event() } - -CanvasToggleControls::CanvasToggleControls(Canvas *canvas) - : BC_MenuItem(calculate_text(canvas->get_cwindow_controls())) -{ - this->canvas = canvas; -} -int CanvasToggleControls::handle_event() -{ - canvas->toggle_controls(); - set_text(calculate_text(canvas->get_cwindow_controls())); - return 1; -} - -char* CanvasToggleControls::calculate_text(int cwindow_controls) -{ - if(!cwindow_controls) - return _("Show controls"); - else - return _("Hide controls"); -} - - - - - - - CanvasFullScreenItem::CanvasFullScreenItem(Canvas *canvas) : BC_MenuItem(_("Fullscreen"), "f", 'f') { @@ -1121,20 +1068,11 @@ CanvasFullScreenItem::CanvasFullScreenItem(Canvas *canvas) } int CanvasFullScreenItem::handle_event() { - canvas->subwindow->unlock_window(); - canvas->use_fullscreen(1); - canvas->subwindow->lock_window("CanvasFullScreenItem::handle_event"); + canvas->set_fullscreen(1, 1); return 1; } - - - - - - - CanvasPopupRemoveSource::CanvasPopupRemoveSource(Canvas *canvas) : BC_MenuItem(_("Close source")) {