From: Good Guy Date: Sun, 21 Aug 2016 22:15:39 +0000 (-0600) Subject: fixes for reverse/shuffle edits X-Git-Url: https://git.cinelerra-gg.org/git/?a=commitdiff_plain;h=96f63a377e9ee428fb4ac2b57b055b315e4c8392;p=goodguy%2Fhistory.git fixes for reverse/shuffle edits --- diff --git a/cinelerra-5.1/cinelerra/track.C b/cinelerra-5.1/cinelerra/track.C index 10460c0c..3dac186c 100644 --- a/cinelerra-5.1/cinelerra/track.C +++ b/cinelerra-5.1/cinelerra/track.C @@ -1541,7 +1541,10 @@ void Track::shuffle_edits(double start, double end, int first_track) int index = rand() % new_edits.size(); Edit *edit = new_edits.get(index); new_edits.remove_number(index); - edits->insert_after(start_edit, edit); + if( !start_edit ) + edits->insert_before(edits->first, edit); + else + edits->insert_after(start_edit, edit); start_edit = edit; // Recalculate start position @@ -1564,20 +1567,18 @@ void Track::shuffle_edits(double start, double end, int first_track) if(first_track && edl->session->labels_follow_edits) { double start_seconds1 = from_units(startproject1); + double end_seconds1 = from_units(startproject1 + edit->length); double start_seconds2 = from_units(startproject2); - //double end_seconds1 = from_units(edit->startproject + - // edit->length); for(int i = new_labels.size() - 1; i >= 0; i--) { Label *label = new_labels.get(i); // Was in old edit position if(label->position >= start_seconds1 && - label->position < start_seconds2) + label->position < end_seconds1) { // Move to new edit position double position = label->position - - start_seconds1 + - start_seconds2; + start_seconds1 + start_seconds2; edl->labels->insert_label(position); new_labels.remove_object_number(i); } @@ -1657,7 +1658,10 @@ void Track::reverse_edits(double start, double end, int first_track) int index = new_edits.size() - 1; Edit *edit = new_edits.get(index); new_edits.remove_number(index); - edits->insert_after(start_edit, edit); + if( !start_edit ) + edits->insert_before(edits->first, edit); + else + edits->insert_after(start_edit, edit); start_edit = edit; // Recalculate start position @@ -1680,19 +1684,18 @@ void Track::reverse_edits(double start, double end, int first_track) if(first_track && edl->session->labels_follow_edits) { double start_seconds1 = from_units(startproject1); + double end_seconds1 = from_units(startproject1 + edit->length); double start_seconds2 = from_units(startproject2); - //double end_seconds1 = from_units(edit->startproject + edit->length); for(int i = new_labels.size() - 1; i >= 0; i--) { Label *label = new_labels.get(i); // Was in old edit position if(label->position >= start_seconds1 && - label->position < start_seconds2) + label->position < end_seconds1) { // Move to new edit position double position = label->position - - start_seconds1 + - start_seconds2; + start_seconds1 + start_seconds2; edl->labels->insert_label(position); new_labels.remove_object_number(i); }