dvb chan tuner api upgrade, slip/ripple handle drag keyfrm fix, load menu tweaks
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / edit.C
index 2c8eefcfbb0698a8b56553ed3190059cd92efac0..47ca63c3ffe915a28469da28700988e616b28186 100644 (file)
@@ -451,8 +451,10 @@ int Edit::shift_start(int edit_mode, int64_t newposition, int64_t oldposition,
        switch( edit_mode ) {
        case MOVE_RIPPLE:
                edits_moved = rest_moved = 1;
-               if( prev ) prev->trim(cut_length);
-               for( Edit *edit=this; edit; edit=edit->next )
+               startsource += cut_length;
+               cut_length = -cut_length;
+               length += cut_length;
+               for( Edit *edit=next; edit; edit=edit->next )
                        edit->startproject += cut_length;
                break;
        case MOVE_ROLL:
@@ -500,6 +502,7 @@ int Edit::shift_end(int edit_mode, int64_t newposition, int64_t oldposition,
 
        switch( edit_mode ) {
        case MOVE_RIPPLE:
+       case MOVE_EDGE:
                rest_moved = 1;
                length += cut_length;
                for( Edit *edit=next; edit; edit=edit->next )
@@ -527,12 +530,6 @@ int Edit::shift_end(int edit_mode, int64_t newposition, int64_t oldposition,
                        next->trim(-cut_length);
                }
                break;
-       case MOVE_EDGE:
-               edits_moved = 1;
-               if( prev ) prev->trim(cut_length);
-               startproject += cut_length;
-               length -= cut_length;
-               break;
        }
        trim(0);
 
@@ -583,11 +580,11 @@ int Edit::follow_edits(int64_t start, int64_t end, int64_t cut_length,
                }
                if( edit_plugins ) {
                        if( cut_length > 0 ) {
-                               track->clear(end, end+cut_length, 0, 0, 1, 0, 0);
+                               track->clear(end, end+cut_length, 0, 0, -1, 0, 0);
                                track->shift_effects(start, cut_length, 1, 0);
                        }
                        else if( cut_length < 0 ) {
-                               track->clear(start+cut_length, start, 0, 0, 1, 0, 0);
+                               track->clear(start+cut_length, start, 0, 0, -1, 0, 0);
                                track->shift_effects(end+cut_length, -cut_length, 1, 0);
                        }
                }