improve delays created by vicon drawing locks, reset_cache segv fix, gang track toolt...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowgui.C
index c0d64487f0b087dd67b5a5183d6677039f7dd30c..7f5ddf5fa87ef189fc4d7e05474ce94129e77e78 100644 (file)
@@ -58,6 +58,7 @@
 #include "tracks.h"
 #include "transportque.h"
 #include "vtrack.h"
+#include "zoombar.h"
 
 
 static double my_zoom_table[] =
@@ -281,7 +282,7 @@ int CWindowGUI::button_press_event()
        if( current_operation == CWINDOW_NONE &&
            mwindow->edl != 0 && canvas->get_canvas() &&
            mwindow->edl->session->cwindow_click2play &&
-           canvas->get_canvas()->get_cursor_over_window() ) {
+           canvas->get_canvas()->cursor_above() ) {
                switch( get_buttonpress() ) {
                case LEFT_BUTTON:
                        if( !cwindow->playback_engine->is_playing_back ) {
@@ -744,7 +745,7 @@ CWindowEditing::CWindowEditing(MWindow *mwindow, CWindow *cwindow)
                mwindow->theme->cedit_x, mwindow->theme->cedit_y,
                mwindow->edl->session->editing_mode,
                0, // use_editing_mode
-               1, // use_keyframe
+               0, // use_keyframe
                0, // use_splice
                0, // use_overwrite
                1, // use_copy
@@ -758,7 +759,9 @@ CWindowEditing::CWindowEditing(MWindow *mwindow, CWindow *cwindow)
                1, // use_cut
                0, // use_commerical
                0, // use_goto
-               1) // use_clk2play
+               1, // use_clk2play
+               1, // use_scope
+               0) // use_gang_tracks
 {
        this->mwindow = mwindow;
        this->cwindow = cwindow;
@@ -823,6 +826,7 @@ void panel_btn(set_editing_mode,(int mode), set_editing_mode(mode))
 void panel_btn(set_auto_keyframes,(int v), set_auto_keyframes(v))
 void panel_btn(set_span_keyframes,(int v), set_span_keyframes(v))
 void panel_btn(set_labels_follow_edits,(int v), set_labels_follow_edits(v))
+void panel_btn(set_gang_tracks,(int v), set_gang_tracks(v))
 
 
 CWindowMeters::CWindowMeters(MWindow *mwindow,
@@ -1091,6 +1095,25 @@ int CWindowCanvas::do_scroll(EDL *edl, float cursor_x, float cursor_y)
        return 1;
 }
 
+int CWindowCanvas::scope_on()
+{
+       EditPanelScopeDialog *scope_dialog = gui->edit_panel->scope_dialog;
+       if( !scope_dialog || !scope_dialog->scope_gui ) return 0;
+       if( scope_dialog->scope_gui->use_refresh ) return 0;
+       if( scope_dialog->scope_gui->use_release ) return 0;
+       return scope_dialog->running();
+}
+
+void CWindowCanvas::draw_scope(VFrame *output, int refresh)
+{
+       if( !output ) return;
+       EditPanelScopeDialog *scope_dialog = gui->edit_panel->scope_dialog;
+       if( !scope_dialog || !scope_dialog->scope_gui ) return;
+       if( scope_dialog->scope_gui->use_refresh && !refresh ) return;
+       if( scope_dialog->scope_gui->use_release && refresh >= 0 ) return;
+       scope_dialog->process(output);
+}
+
 void CWindowCanvas::draw_refresh(int flush)
 {
        BC_WindowBase *window = get_canvas();
@@ -2619,6 +2642,11 @@ void CWindowCanvas::reset_keyframe(int do_camera)
                z_keyframe->set_value(1);
 
                gui->sync_parameters(CHANGE_PARAMS, 1, 1);
+               MWindowGUI *mgui = mwindow->gui;
+               mgui->lock_window("CWindowCanvas::reset_keyframe");
+               gui->mwindow->edl->local_session->reset_view_limits();
+               gui->mwindow->gui->zoombar->update_autozoom();
+               mgui->unlock_window();
        }
 }
 
@@ -3318,6 +3346,9 @@ int CWindowCanvas::button_release_event()
 {
        int result = 0;
        const char *undo_label = 0;
+       BC_WindowBase *window = get_canvas();
+       if( window && !window->get_video_on() )
+               draw_scope(refresh_frame, -1);
 
        switch( gui->current_operation ) {
        case CWINDOW_SCROLL: