X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcwindowgui.C;h=19ff101e3f0383a56ba20b8e9df6a2c981922416;hp=2b11f38b4a36f314eb0e7ab7adb662ea29c89405;hb=2e48b660e37eb5c661264d601211e16cb6cd6e89;hpb=a95193c3fd88733d184f2d460eca1fe6ddf8af28 diff --git a/cinelerra-5.1/cinelerra/cwindowgui.C b/cinelerra-5.1/cinelerra/cwindowgui.C index 2b11f38b..19ff101e 100644 --- a/cinelerra-5.1/cinelerra/cwindowgui.C +++ b/cinelerra-5.1/cinelerra/cwindowgui.C @@ -396,14 +396,18 @@ void CWindowGUI::zoom_canvas(double value, int update_menu) { float x = 0, y = 0; float zoom = !value ? get_auto_zoom() : value; - mwindow->edl->session->cwindow_scrollbars = !value ? 0 : 1; + EDL *edl = mwindow->edl; + edl->session->cwindow_scrollbars = !value ? 0 : 1; if( value ) { - float cx = canvas->get_xscroll() + 0.5f*canvas->w_visible; - float cy = canvas->get_yscroll() + 0.5f*canvas->h_visible; - float output_x = cx, output_y = cy; - canvas->output_to_canvas(mwindow->edl, 0, cx, cy); - x = output_x - cx / zoom; - y = output_y - cy / zoom; + float cx = 0.5f * canvas->w; x = cx; + float cy = 0.5f * canvas->h; y = cy; + canvas->canvas_to_output(edl, 0, x, y); + canvas->update_zoom(0, 0, zoom); + float zoom_x, zoom_y, conformed_w, conformed_h; + canvas->get_zooms(edl, 0, zoom_x, zoom_y, conformed_w, conformed_h); + x -= cx / zoom_x; + y -= cy / zoom_y; + } canvas->update_zoom((int)(x+0.5), (int)(y+0.5), zoom); @@ -484,6 +488,7 @@ int CWindowGUI::keypress_event() lock_window("CWindowGUI::keypress_event 1"); break; case 'x': + if( ctrl_down() || shift_down() || alt_down() ) break; unlock_window(); mwindow->gui->lock_window("CWindowGUI::keypress_event 2"); mwindow->cut(); @@ -561,8 +566,10 @@ int CWindowGUI::keypress_event() } break; - case KEY_F1: cwindow_operation = CWINDOW_PROTECT; break; - case KEY_F2: cwindow_operation = CWINDOW_ZOOM; break; + case KEY_F1: if( shift_down() ) { mwindow->toggle_camera_xyz(); break; } + cwindow_operation = CWINDOW_PROTECT; break; + case KEY_F2: if( shift_down() ) { mwindow->toggle_projector_xyz(); break; } + cwindow_operation = CWINDOW_ZOOM; break; case KEY_F3: cwindow_operation = CWINDOW_MASK; break; case KEY_F4: cwindow_operation = CWINDOW_RULER; break; case KEY_F5: cwindow_operation = CWINDOW_CAMERA; break; @@ -646,14 +653,12 @@ int CWindowGUI::drag_stop() if(mwindow->session->drag_assets->total || mwindow->session->drag_clips->total) { - mwindow->gui->lock_window("CWindowGUI::drag_stop 5"); + mwindow->gui->lock_window("CWindowGUI::drag_stop 1"); mwindow->undo->update_undo_before(_("insert assets"), 0); - mwindow->gui->unlock_window(); } if(mwindow->session->drag_assets->total) { - mwindow->gui->lock_window("CWindowGUI::drag_stop 1"); mwindow->clear(0); mwindow->load_assets(mwindow->session->drag_assets, mwindow->edl->local_session->get_selectionstart(), @@ -668,7 +673,6 @@ int CWindowGUI::drag_stop() if(mwindow->session->drag_clips->total) { - mwindow->gui->lock_window("CWindowGUI::drag_stop 2"); mwindow->clear(0); mwindow->paste_edls(mwindow->session->drag_clips, LOADMODE_PASTE, @@ -688,7 +692,7 @@ int CWindowGUI::drag_stop() mwindow->gui->update(1, 1, 1, 1, 0, 1, 0); mwindow->undo->update_undo_after(_("insert assets"), LOAD_ALL); mwindow->gui->unlock_window(); - mwindow->sync_parameters(LOAD_ALL); + mwindow->sync_parameters(CHANGE_ALL); } } @@ -1085,6 +1089,15 @@ void CWindowCanvas::draw_refresh(int flush) in_x2 > in_x1 && in_y2 > in_y1) { +// input scaled from session to refresh frame coordinates + int ow = get_output_w(mwindow->edl); + int oh = get_output_h(mwindow->edl); + int rw = refresh_frame->get_w(); + int rh = refresh_frame->get_h(); + float xs = (float)rw / ow; + float ys = (float)rh / oh; + in_x1 *= xs; in_x2 *= xs; + in_y1 *= ys; in_y2 *= ys; // Can't use OpenGL here because it is called asynchronously of the // playback operation. get_canvas()->draw_vframe(refresh_frame, @@ -2311,6 +2324,24 @@ int CWindowCanvas::do_eyedrop(int &rerender, int button_press, int draw) return result; } +int CWindowCanvas::need_overlays() +{ + if( mwindow->edl->session->safe_regions ) return 1; + if( mwindow->edl->session->cwindow_scrollbars ) return 1; + if( gui->highlighted ) return 1; + switch( mwindow->edl->session->cwindow_operation ) { + case CWINDOW_EYEDROP: + if( ! gui->eyedrop_visible ) break; + case CWINDOW_CAMERA: + case CWINDOW_PROJECTOR: + case CWINDOW_CROP: + case CWINDOW_MASK: + case CWINDOW_RULER: + return 1; + } + return 0; +} + void CWindowCanvas::draw_overlays() { if(mwindow->edl->session->safe_regions) @@ -2963,8 +2994,13 @@ int CWindowCanvas::test_bezier(int button_press, { last_center_x = gui->affected_x->get_value(); last_center_y = gui->affected_y->get_value(); - float x = gui->center_x + cursor_x - gui->x_origin; - float y = gui->center_y + cursor_y - gui->y_origin; + float dx = cursor_x - gui->x_origin; + float dy = cursor_y - gui->y_origin; + if(gui->current_operation == CWINDOW_CAMERA ) { + dx = -dx; dy = -dy; + } + float x = gui->center_x + dx; + float y = gui->center_y + dy; gui->affected_x->set_value(x); gui->affected_y->set_value(y); if( !EQUIV(last_center_x, x) || !EQUIV(last_center_y, y) )