X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftracksedit.C;h=c050f5f85e59d19f0a3fcad00d522d569a0361fd;hp=4a836b96a1fb15755d52c498c290ada63c858c65;hb=6fa206c4d00a5bb7418289064dd8466ff477f787;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/tracksedit.C b/cinelerra-5.1/cinelerra/tracksedit.C index 4a836b96..c050f5f8 100644 --- a/cinelerra-5.1/cinelerra/tracksedit.C +++ b/cinelerra-5.1/cinelerra/tracksedit.C @@ -72,7 +72,6 @@ int Tracks::clear(double start, double end, int clear_plugins, int edit_autos) 1, // labels clear_plugins, // edit_plugins edit_autos, - 1, // convert_units 0); // trim_edits } } @@ -208,7 +207,8 @@ void Tracks::set_edit_length(double start, double end, double length) int64_t length_units = current_track->to_units(end_time, 0) - total_units; if(length_units < 1) length_units = 1; -printf("Tracks::set_edit_length %d %f %f\n", __LINE__, end_time, current_track->from_units(total_units)); +//printf("Tracks::set_edit_length %d %f %f\n", __LINE__, +// end_time, current_track->from_units(total_units)); total_units += length_units; // Go in using the edit handle interface @@ -408,38 +408,45 @@ void Tracks::set_transition_length(Transition *transition, double length) void Tracks::paste_transitions(double start, double end, int track_type, char* title) { - for(Track *current_track = first; - current_track; - current_track = current_track->next) - { - if(current_track->record && current_track->data_type == track_type) - { - int64_t start_units = current_track->to_units(start, 0); - int64_t end_units = current_track->to_units(end, 0); - 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); + int count = 0; + for( Track *track=first; track; track=track->next ) { + if( !track->record || track->data_type != track_type ) continue; + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + if( !edit->is_selected ) continue; + edit->insert_transition(title); + ++count; + } + } + if( count > 0 ) { + clear_selected_edits(); + return; + } + + for( Track *track=first; track; track=track->next ) { + if( !track->record || track->data_type != track_type ) continue; + int64_t start_units = track->to_units(start, 0); + int64_t end_units = track->to_units(end, 0); + if( start_units == end_units ) { + for( Edit *edit = track->edits->first; edit; edit = edit->next) { + int64_t edit_start = edit->startproject; + int64_t edit_end = edit_start + edit->length; + if( edit_start > start_units ) continue; + if( start_units == track->edits->length() ) { + double length = edl->session->default_transition_length; + int64_t units = track->to_units(length, 1); + edit = track->edits-> + create_silence(start_units, start_units+units); } + else if( start_units >= edit_end ) continue; + 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); - } + } + else { + for( Edit *edit=track->edits->first; edit; edit=edit->next) { + int64_t edit_start = edit->startproject; + if( !edit_start ) continue; + if( edit_start >= start_units && edit_start < end_units ) { + edit->insert_transition(title); } } }