X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fautos.C;h=a48afbb508531f1abc99c477dbf9a6a46f853df5;hb=81fc9cd689dd964a4736fa1f8986a64db6b4a937;hp=ced078364c5578980abe367c9324b39109f1adf9;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/autos.C b/cinelerra-5.1/cinelerra/autos.C index ced07836..a48afbb5 100644 --- a/cinelerra-5.1/cinelerra/autos.C +++ b/cinelerra-5.1/cinelerra/autos.C @@ -265,22 +265,23 @@ int Autos::auto_exists_for_editing(double position) Auto* Autos::get_auto_at_position(double position) { - int64_t unit_position = track->to_units(position, 0); - for(Auto *current = first; - current; - current = NEXT) - { - if(edl->equivalent(current->position, unit_position)) - { + for( Auto *current=first; current; current=NEXT ) { + double pos = track->from_units(current->position); + if( edl->equivalent(position, pos) ) return current; - } } return 0; } +Auto* Autos::get_auto(int id) +{ + Auto *current = first; + while( current && current->orig_id != id ) current = NEXT; + return current; +} -Auto* Autos::get_auto_for_editing(double position) +Auto* Autos::get_auto_for_editing(double position, int create) { if(position < 0) { position = edl->local_session->get_selectionstart(1); @@ -288,8 +289,9 @@ Auto* Autos::get_auto_for_editing(double position) Auto *result = 0; get_prev_auto(track->to_units(position, 0), PLAY_FORWARD, result); - if( edl->session->auto_keyframes && (!result || result->is_default || - !EQUIV(track->from_units(result->position), position)) ) { + if( create > 0 ) create = edl->session->auto_keyframes; + if( create && (!result || result->is_default || + !EQUIV(track->from_units(result->position), position)) ) { //printf("Autos::get_auto_for_editing %p %p %p\n", default_auto, first, result); position = edl->align_to_frame(position, 0); result = insert_auto(track->to_units(position, 0)); @@ -382,10 +384,11 @@ Auto* Autos::insert_auto(int64_t position, Auto *templ) // Set curve mode if( !templ && result->is_floatauto() ) { FloatAuto *floatauto = (FloatAuto *)result; - floatauto->curve_mode = + FloatAuto::t_mode new_mode = edl->local_session->playback_start >= 0 && edl->local_session->playback_end < 0 ? FloatAuto::SMOOTH : (FloatAuto::t_mode) edl->local_session->floatauto_type; + floatauto->change_curve_mode(new_mode, 0); } } else @@ -396,17 +399,11 @@ Auto* Autos::insert_auto(int64_t position, Auto *templ) return result; } -int Autos::clear_all() +void Autos::clear_all() { - Auto *current_, *current; - - for(current = first; current; current = current_) - { - current_ = NEXT; - remove(current); - } - append_auto(); - return 0; + while( last ) delete last; + delete default_auto; + create_objects(); } int Autos::insert(int64_t start, int64_t end) @@ -503,9 +500,6 @@ int Autos::copy(int64_t start, if(active_only || (!default_only && !active_only)) { Auto *current = autoof(start); -// need the last one if past the end - if( !current && last ) - last->copy(start, end, file, default_only); while( current && current->position <= end ) { // Want to copy single keyframes by putting the cursor on them