usb_direct fix for rev2 shuttle, playbackengine locks again, viewer cursor fix
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / trackcanvas.C
index 638e04341397691512d9f596617e2208723263ee..4b1c2364397f64c68f72b14b5d0b9c93c1dc9981 100644 (file)
@@ -3808,18 +3808,28 @@ void TrackCanvas::update_drag_handle()
                edl->create_objects();
                edl->copy_all(mwindow->edl);
                MainSession *session = mwindow->session;
-               int edit_mode = mwindow->edl->session->edit_handle_mode[session->drag_button];
+               int handle_mode = mwindow->edl->session->edit_handle_mode[session->drag_button];
                edl->modify_edithandles(session->drag_start,
-                       session->drag_position,
-                       session->drag_handle,
-                       edit_mode,
+                       session->drag_position, session->drag_handle, handle_mode,
                        edl->session->labels_follow_edits,
                        edl->session->plugins_follow_edits,
                        edl->session->autos_follow_edits,
-                       session->drag_edit->group_id);
-               double position = edit_mode != MOVE_NO_EDITS &&
-                       ( session->drag_handle || edit_mode == MOVE_ONE_EDIT ) ?
-                               session->drag_position : session->drag_start;
+                       !session->drag_edit ? 0 : session->drag_edit->group_id);
+
+               double position = -1;
+               switch( handle_mode ) {
+               case MOVE_RIPPLE:
+               case MOVE_ROLL:
+               case MOVE_SLIDE:
+                       position = session->drag_position;
+                       break;
+               case MOVE_SLIP:
+               case MOVE_EDGE:
+                       position = session->drag_start;
+                       break;
+               }
+
+               if( position < 0 ) position = 0;
                Track *track = session->drag_handle_track();
                int64_t pos = track->to_units(position, 0);
                render_handle_frame(edl, pos, shift_down() ? 0 :
@@ -3879,7 +3889,7 @@ int TrackCanvas::render_handle_frame(EDL *edl, int64_t pos, int mode)
                PlaybackEngine *playback_engine = mwindow->cwindow->playback_engine;
                if( playback_engine->is_playing_back )
                        playback_engine->stop_playback(1);
-               mwindow->cwindow->playback_engine->refresh_frame(CHANGE_EDL, edl, 0);
+               mwindow->cwindow->playback_engine->refresh_frame(CHANGE_NONE, edl, 0);
                break; }
        }
        return result;
@@ -3983,7 +3993,7 @@ int TrackCanvas::update_drag_floatauto(int cursor_x, int cursor_y)
 // Snap to nearby values
                old_value = current->get_value();
                if(shift_down()) {
-                       double value1, value2, distance1, distance2;
+                       double value1, value2, distance1=-1, distance2=-1;
 
                        if(current->previous) {
                                int autogrouptype = current->previous->autos->autogrouptype;