X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftracksedit.C;h=4f83fff0e949bb8f9ff4a9ef1f9f1ae2ff02c300;hb=f30a92d2f983d5ec09c8fd8db48c9bcb7ec76763;hp=77f31e5c0a59d9ce9f621f0c298d543817d5bcac;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/tracksedit.C b/cinelerra-5.1/cinelerra/tracksedit.C index 77f31e5c..4f83fff0 100644 --- a/cinelerra-5.1/cinelerra/tracksedit.C +++ b/cinelerra-5.1/cinelerra/tracksedit.C @@ -361,6 +361,10 @@ void Tracks::set_transition_length(double start, double end, double length) { current_edit->transition->length = current_track->to_units(length, 1); + if( current_edit == current_track->edits->last && + current_edit->silence() ) { + current_edit->length = current_edit->transition->length; + } } } } @@ -383,6 +387,10 @@ void Tracks::set_transition_length(Transition *transition, double length) if(current_edit->transition == transition) { transition->length = current_track->to_units(length, 1); + if( current_edit == current_track->edits->last && + current_edit->silence() ) { + current_edit->length = current_edit->transition->length; + } done = 1; } } @@ -399,22 +407,32 @@ void Tracks::paste_transitions(double start, double end, int track_type, char* t { int64_t start_units = current_track->to_units(start, 0); int64_t end_units = current_track->to_units(end, 0); - - for(Edit *current_edit = current_track->edits->first; - current_edit; - current_edit = current_edit->next) - { - if(current_edit->startproject > 0 && - ((end_units > start_units && - current_edit->startproject >= start_units && - current_edit->startproject < end_units) || - (end_units == start_units && - current_edit->startproject <= start_units && - current_edit->startproject + current_edit->length > start_units))) - { + if( start_units == end_units ) { + for( Edit *current_edit = current_track->edits->first; + current_edit; current_edit = current_edit->next) { + int64_t edit_start = current_edit->startproject; + int64_t edit_end = edit_start + current_edit->length; + if( edit_start > start_units ) continue; + if( start_units == current_track->edits->length() ) { + double length = edl->session->default_transition_length; + int64_t units = current_track->to_units(length, 1); + current_edit = current_track->edits-> + create_silence(start_units, start_units+units); + } + else if( start_units >= edit_end ) continue; current_edit->insert_transition(title); } } + else { + for( Edit *current_edit = current_track->edits->first; + current_edit; current_edit = current_edit->next) { + int64_t edit_start = current_edit->startproject; + if( !edit_start ) continue; + if( edit_start >= start_units && edit_start < end_units ) { + current_edit->insert_transition(title); + } + } + } } } } @@ -978,6 +996,11 @@ void Tracks::paste_audio_transition(PluginServer *server) Edit *current_edit = current->edits->editof(position, PLAY_FORWARD, 0); + if( !current_edit && position == current->edits->length() ) { + double length = edl->session->default_transition_length; + int64_t units = current->to_units(length, 1); + current_edit = current->edits->create_silence(position, position+units); + } if(current_edit) { paste_transition(server, current_edit); @@ -1127,6 +1150,11 @@ void Tracks::paste_video_transition(PluginServer *server, int first_track) Edit *current_edit = current->edits->editof(position, PLAY_FORWARD, 0); + if( !current_edit && position == current->edits->length() ) { + double length = edl->session->default_transition_length; + int64_t units = current->to_units(length, 1); + current_edit = current->edits->create_silence(position, position+units); + } if(current_edit) { paste_transition(server, current_edit);