X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftracks.C;h=07524f1f342ccb296a1b32dfb9eda4b6e6b7071d;hp=170f2931af52857e1f2374f15e623eff36761bde;hb=1db0dacec8f9d7f5687e582bd282d9bf83bd58f0;hpb=c9c0e07706fad701a70ee0d1ffb0fcb6304f138c diff --git a/cinelerra-5.1/cinelerra/tracks.C b/cinelerra-5.1/cinelerra/tracks.C index 170f2931..07524f1f 100644 --- a/cinelerra-5.1/cinelerra/tracks.C +++ b/cinelerra-5.1/cinelerra/tracks.C @@ -126,6 +126,20 @@ void Tracks::get_selected_edits(ArrayList *drag_edits) } } +void Tracks::select_edits(double start, double end) +{ + for( Track *track=first; track; track=track->next ) { + if( !track->is_armed() ) continue; + int64_t start_pos = track->to_units(start, 0); + int64_t end_pos = track->to_units(end, 0); + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + if( start_pos >= edit->startproject+edit->length ) continue; + if( edit->startproject >= end_pos ) continue; + edit->is_selected = 1; + } + } +} + void Tracks::get_automation_extents(float *min, float *max, double start, @@ -322,8 +336,7 @@ int Tracks::delete_track(Track *track, int gang) gang = edl->session->gang_tracks != GANG_NONE ? 1 : 0; Track *nxt = track->next; if( gang ) { - while( track && !track->master && track->previous ) - track = track->previous; + track = track->gang_master(); while( nxt && !nxt->master ) nxt = nxt->next; } @@ -769,7 +782,7 @@ Track *Tracks::get(int idx, int data_type) return 0; } -void Tracks::move_tracks(Track *src, Track *dst, int n) +void Tracks::roll_tracks(Track *src, Track *dst, int n) { if( src == dst ) return; while( --n >= 0 && src ) { @@ -790,14 +803,14 @@ void Tracks::move_tracks(Track *src, Track *dst, int n) double Tracks::align_timecodes() { double offset = -1; - for( Track *track=edl->tracks->first; track; track=track->next ) { + for( Track *track=first; track; track=track->next ) { if( !track->is_armed() ) continue; double early_offset = track->edits->early_timecode(); if( offset < 0 || offset > early_offset ) offset = early_offset; } if( offset >= 0 ) { - for( Track *track=edl->tracks->first; track; track=track->next ) { + for( Track *track=first; track; track=track->next ) { if( !track->is_armed() ) continue; track->edits->align_timecodes(offset); } @@ -805,3 +818,21 @@ double Tracks::align_timecodes() return offset; } +void Tracks::update_idxbl_length(int id, double dt) +{ + for( Track *track=first; track; track=track->next ) { + if( !track->is_armed() ) continue; + int64_t du = track->to_units(dt,0); + track->edits->update_idxbl_length(id, du); + track->optimize(); + } +} + +void Tracks::create_keyframes(double position, int mask, int mode) +{ + for( Track *track=first; track; track=track->next ) { + if( !track->is_armed() ) continue; + track->create_keyframes(position, mask, mode); + } +} +