refresh frame fix, dblclk proxy viewer fix, vicon refresh fix for awdw resize, fix...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / canvas.C
index 72d8a906544c86c63ab63b2f1d94ea5c9e675b93..0d738c808de59187730041c66cfcbb245e841033 100644 (file)
@@ -1,7 +1,7 @@
 
 /*
  * CINELERRA
- * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
+ * Copyright (C) 2008-2017 Adam Williams <broadcast at earthling dot net>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -332,8 +332,8 @@ void Canvas::get_transfers(EDL *edl,
        float &canvas_x1, float &canvas_y1, float &canvas_x2, float &canvas_y2,
        int canvas_w, int canvas_h)
 {
-// printf("Canvas::get_transfers %d %d\n", canvas_w,
-//             canvas_h);
+//printf("Canvas::get_transfers %d canvas_w=%d canvas_h=%d\n", 
+// __LINE__,  canvas_w, canvas_h);
 // automatic canvas size detection
        if(canvas_w < 0) canvas_w = get_canvas()->get_w();
        if(canvas_h < 0) canvas_h = get_canvas()->get_h();
@@ -430,6 +430,11 @@ void Canvas::get_transfers(EDL *edl,
                        {
                                out_h = (int)(out_w / edl->get_aspect_ratio() + 0.5);
                                canvas_y1 = canvas_h / 2 - out_h / 2;
+// printf("Canvas::get_transfers %d canvas_h=%d out_h=%f canvas_y1=%f\n",
+// __LINE__,
+// canvas_h,
+// out_h,
+// canvas_y1);
                        }
                        canvas_x2 = canvas_x1 + out_w;
                        canvas_y2 = canvas_y1 + out_h;
@@ -459,7 +464,8 @@ void Canvas::get_transfers(EDL *edl,
        canvas_y1 = MAX(0, canvas_y1);
        canvas_x2 = MAX(canvas_x1, canvas_x2);
        canvas_y2 = MAX(canvas_y1, canvas_y2);
-// printf("Canvas::get_transfers 2 %f,%f %f,%f -> %f,%f %f,%f\n",
+// printf("Canvas::get_transfers %d %f,%f %f,%f -> %f,%f %f,%f\n",
+// __LINE__,
 // output_x1,
 // output_y1,
 // output_x2,
@@ -851,16 +857,19 @@ void Canvas::update_refresh(VideoDevice *device, VFrame *output_frame)
        if( use_opengl )
                best_color_model = BC_RGB888;
 
+       int out_w = output_frame->get_w();
+       int out_h = output_frame->get_h();
        if( refresh_frame &&
-          (refresh_frame->get_w() != device->out_w ||
-           refresh_frame->get_h() != device->out_h ||
-           refresh_frame->get_color_model() != best_color_model) ) {
+          (refresh_frame->get_w() != out_w ||
+           refresh_frame->get_h() != out_h ||
+           refresh_frame->get_color_model() != best_color_model ) ) {
+// x11 direct render uses BC_BGR8888, use tranfer_from to remap
                delete refresh_frame;  refresh_frame = 0;
        }
 
        if( !refresh_frame ) {
                refresh_frame =
-                       new VFrame(device->out_w, device->out_h, best_color_model);
+                       new VFrame(out_w, out_h, best_color_model);
        }
 
        if( use_opengl ) {
@@ -876,6 +885,16 @@ void Canvas::update_refresh(VideoDevice *device, VFrame *output_frame)
 }
 
 
+void Canvas::clear(int flush)
+{
+       if( refresh_frame )
+               refresh_frame->clear_frame();
+       BC_WindowBase *wdw = get_canvas();
+       if( !wdw ) return;
+       wdw->set_bg_color(BLACK);
+       wdw->clear_box(0,0, wdw->get_w(), wdw->get_h());
+       wdw->flash(flush);
+}
 
 
 
@@ -1152,7 +1171,7 @@ int CanvasPopupSize::handle_event()
 
 
 CanvasPopupResetCamera::CanvasPopupResetCamera(Canvas *canvas)
- : BC_MenuItem(_("Reset camera"))
+ : BC_MenuItem(_("Reset camera"), "F11", KEY_F11)
 {
        this->canvas = canvas;
 }
@@ -1165,7 +1184,7 @@ int CanvasPopupResetCamera::handle_event()
 
 
 CanvasPopupResetProjector::CanvasPopupResetProjector(Canvas *canvas)
- : BC_MenuItem(_("Reset projector"))
+ : BC_MenuItem(_("Reset projector"), "F12", KEY_F12)
 {
        this->canvas = canvas;
 }