rescale refresh frame for X11 direct scaling
[goodguy/history.git] / cinelerra-5.1 / cinelerra / cwindowgui.C
index ea957147637ff434eb2234f4ef164302391aaadd..3b1d0ac8a05913895fb5aa0d6f78cc6ae38c9052 100644 (file)
@@ -646,14 +646,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 +666,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 +685,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,19 +1082,27 @@ 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,
                                                (int)out_x1,
                                                (int)out_y1,
                                                (int)(out_x2 - out_x1),
-                                               (int)(out_y2 - out_y1));
-// if refresh_frame session geometry...
-//                                             (int)in_x1,
-//                                             (int)in_y1,
-//                                             (int)(in_x2 - in_x1),
-//                                             (int)(in_y2 - in_y1),
-//                                             0);
+                                               (int)(out_y2 - out_y1),
+                                               (int)in_x1,
+                                               (int)in_y1,
+                                               (int)(in_x2 - in_x1),
+                                               (int)(in_y2 - in_y1),
+                                               0);
                        }
                }
                else