tags tweak, rework canvas lock/refresh, vgui/cgui segv if closed while playing
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowtool.C
index f0f372a5aba2f82315f2ee38d7a232af060e21a8..99577fd85a63e1b6c4c34d287b09834b3bc2eeb4 100644 (file)
@@ -466,9 +466,7 @@ void CWindowCropGUI::handle_event()
        mwindow->edl->session->crop_y2 = atol(height->get_text()) +
                mwindow->edl->session->crop_y1;
        update();
-       mwindow->cwindow->gui->lock_window("CWindowCropGUI::handle_event");
-       mwindow->cwindow->gui->canvas->draw_refresh();
-       mwindow->cwindow->gui->unlock_window();
+       mwindow->cwindow->gui->canvas->redraw(1);
 }
 
 void CWindowCropGUI::update()
@@ -696,16 +694,14 @@ void CWindowCurveToggle::check_toggle_state(FloatAuto *x, FloatAuto *y, FloatAut
 
 int CWindowCurveToggle::handle_event()
 {
-       FloatAuto *x=0, *y=0, *z=0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-
-       if(track)
-       {       mwindow->cwindow->calculate_affected_autos(&x, &y, &z,
-                       track, cfg.use_camera, 0,0,0); // don't create new keyframe
-
-               if(x)   x->change_curve_mode(cfg.mode);
-               if(y)   y->change_curve_mode(cfg.mode);
-               if(z)   z->change_curve_mode(cfg.mode);
+       if(track) {
+               FloatAuto *x=0, *y=0, *z=0;
+               mwindow->cwindow->calculate_affected_autos(track,
+                       &x, &y, &z, cfg.use_camera, 0,0,0); // don't create new keyframe
+               if( x ) x->change_curve_mode(cfg.mode);
+               if( y ) y->change_curve_mode(cfg.mode);
+               if( z ) z->change_curve_mode(cfg.mode);
 
                gui->update();
                gui->update_preview();
@@ -748,17 +744,14 @@ void CWindowCameraGUI::create_objects()
 {
        int x = 10, y = 10, x1;
        Track *track = mwindow->cwindow->calculate_affected_track();
-       FloatAuto *x_auto = 0;
-       FloatAuto *y_auto = 0;
-       FloatAuto *z_auto = 0;
+       FloatAuto *x_auto = 0, *y_auto = 0, *z_auto = 0;
        BC_Title *title;
        BC_Button *button;
 
        lock_window("CWindowCameraGUI::create_objects");
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(&x_auto,
-                       &y_auto, &z_auto, track, 1, 0, 0, 0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       &x_auto, &y_auto, &z_auto, 1, 0, 0, 0);
        }
 
        add_subwindow(title = new BC_Title(x, y, "X:"));
@@ -812,15 +805,10 @@ void CWindowCameraGUI::create_objects()
 
 void CWindowCameraGUI::update_preview()
 {
-       mwindow->gui->lock_window("CWindowCameraGUI::update_preview");
-       mwindow->restart_brender();
-       mwindow->gui->draw_overlays(1);
-       mwindow->sync_parameters(CHANGE_PARAMS);
-       mwindow->gui->unlock_window();
-       mwindow->cwindow->refresh_frame(CHANGE_NONE);
-       mwindow->cwindow->gui->lock_window("CWindowCameraGUI::update_preview");
-       mwindow->cwindow->gui->canvas->draw_refresh();
-       mwindow->cwindow->gui->unlock_window();
+       CWindowGUI *cgui = mwindow->cwindow->gui;
+       cgui->lock_window("CWindowCameraGUI::update_preview");
+       cgui->sync_parameters(CHANGE_PARAMS, 0, 1);
+       cgui->unlock_window();
 }
 
 
@@ -893,17 +881,9 @@ void CWindowCameraGUI::update()
        FloatAuto *y_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(&x_auto,
-                       &y_auto,
-                       &z_auto,
-                       track,
-                       1,
-                       0,
-                       0,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       &x_auto, &y_auto, &z_auto, 1, 0, 0, 0);
        }
 
        if(x_auto)
@@ -940,16 +920,9 @@ int CWindowCameraLeft::handle_event()
        FloatAuto *x_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(&x_auto,
-                       0,
-                       &z_auto,
-                       track,
-                       1,
-                       1,
-                       0,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       &x_auto, 0, &z_auto, 1, 1, 0, 0);
        }
 
        if(x_auto && z_auto)
@@ -1017,16 +990,9 @@ int CWindowCameraRight::handle_event()
        FloatAuto *x_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(&x_auto,
-                       0,
-                       &z_auto,
-                       track,
-                       1,
-                       1,
-                       0,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       &x_auto, 0, &z_auto, 1, 1, 0, 0);
        }
 
        if(x_auto && z_auto)
@@ -1064,16 +1030,9 @@ int CWindowCameraTop::handle_event()
        FloatAuto *y_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(0,
-                       &y_auto,
-                       &z_auto,
-                       track,
-                       1,
-                       0,
-                       1,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       0, &y_auto, &z_auto, 1, 0, 1, 0);
        }
 
        if(y_auto && z_auto)
@@ -1139,16 +1098,9 @@ int CWindowCameraBottom::handle_event()
        FloatAuto *y_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(0,
-                       &y_auto,
-                       &z_auto,
-                       track,
-                       1,
-                       0,
-                       1,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       0, &y_auto, &z_auto, 1, 0, 1, 0);
        }
 
        if(y_auto && z_auto)
@@ -1196,16 +1148,9 @@ void CWindowProjectorGUI::create_objects()
        BC_Button *button;
 
        lock_window("CWindowProjectorGUI::create_objects");
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(&x_auto,
-                       &y_auto,
-                       &z_auto,
-                       track,
-                       0,
-                       0,
-                       0,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       &x_auto, &y_auto, &z_auto, 0, 0, 0, 0);
        }
 
        add_subwindow(title = new BC_Title(x, y, "X:"));
@@ -1258,15 +1203,10 @@ void CWindowProjectorGUI::create_objects()
 
 void CWindowProjectorGUI::update_preview()
 {
-       mwindow->gui->lock_window("CWindowProjectorGUI::update_preview");
-       mwindow->restart_brender();
-       mwindow->sync_parameters(CHANGE_PARAMS);
-       mwindow->gui->draw_overlays(1);
-       mwindow->gui->unlock_window();
-       mwindow->cwindow->refresh_frame(CHANGE_NONE);
-       mwindow->cwindow->gui->lock_window("CWindowProjectorGUI::update_preview");
-       mwindow->cwindow->gui->canvas->draw_refresh();
-       mwindow->cwindow->gui->unlock_window();
+       CWindowGUI *cgui = mwindow->cwindow->gui;
+       cgui->lock_window("CWindowProjectorGUI::update_preview");
+       cgui->sync_parameters(CHANGE_PARAMS, 0, 1);
+       cgui->unlock_window();
 }
 
 void CWindowProjectorGUI::handle_event()
@@ -1337,17 +1277,9 @@ void CWindowProjectorGUI::update()
        FloatAuto *y_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(&x_auto,
-                       &y_auto,
-                       &z_auto,
-                       track,
-                       0,
-                       0,
-                       0,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       &x_auto, &y_auto, &z_auto, 0, 0, 0, 0);
        }
 
        if(x_auto)
@@ -1381,16 +1313,9 @@ int CWindowProjectorLeft::handle_event()
        FloatAuto *x_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(&x_auto,
-                       0,
-                       &z_auto,
-                       track,
-                       0,
-                       1,
-                       0,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       &x_auto, 0, &z_auto, 0, 1, 0, 0);
        }
        if(x_auto && z_auto)
        {
@@ -1447,16 +1372,9 @@ int CWindowProjectorRight::handle_event()
        FloatAuto *x_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(&x_auto,
-                       0,
-                       &z_auto,
-                       track,
-                       0,
-                       1,
-                       0,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       &x_auto, 0, &z_auto, 0, 1, 0, 0);
        }
 
        if(x_auto && z_auto)
@@ -1485,16 +1403,9 @@ int CWindowProjectorTop::handle_event()
        FloatAuto *y_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(0,
-                       &y_auto,
-                       &z_auto,
-                       track,
-                       0,
-                       0,
-                       1,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       0, &y_auto, &z_auto, 0, 0, 1, 0);
        }
 
        if(y_auto && z_auto)
@@ -1551,16 +1462,9 @@ int CWindowProjectorBottom::handle_event()
        FloatAuto *y_auto = 0;
        FloatAuto *z_auto = 0;
        Track *track = mwindow->cwindow->calculate_affected_track();
-       if(track)
-       {
-               mwindow->cwindow->calculate_affected_autos(0,
-                       &y_auto,
-                       &z_auto,
-                       track,
-                       0,
-                       0,
-                       1,
-                       0);
+       if( track ) {
+               mwindow->cwindow->calculate_affected_autos(track,
+                       0, &y_auto, &z_auto, 0, 0, 1, 0);
        }
 
        if(y_auto && z_auto)
@@ -2287,15 +2191,12 @@ void CWindowMaskGUI::handle_event()
 
 void CWindowMaskGUI::update_preview()
 {
-       mwindow->gui->lock_window("CWindowMaskGUI::update_preview");
-       mwindow->restart_brender();
-       mwindow->sync_parameters(CHANGE_PARAMS);
-       mwindow->gui->draw_overlays(1);
-       mwindow->gui->unlock_window();
-       mwindow->cwindow->refresh_frame(CHANGE_NONE);
-       mwindow->cwindow->gui->lock_window("CWindowMaskGUI::update_preview");
-       mwindow->cwindow->gui->canvas->draw_refresh();
-       mwindow->cwindow->gui->unlock_window();
+       unlock_window();
+       CWindowGUI *cgui = mwindow->cwindow->gui;
+       cgui->lock_window("CWindowMaskGUI::update_preview");
+       cgui->sync_parameters(CHANGE_PARAMS, 0, 1);
+       cgui->unlock_window();
+       lock_window("CWindowMaskGUI::update_preview");
 }