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, int create)
{
get_prev_auto(track->to_units(position, 0), PLAY_FORWARD, result);
if( create > 0 ) create = edl->session->auto_keyframes;
if( create && (!result || result->is_default ||
- !EQUIV(track->from_units(result->position), position)) ) {
+ !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));
// 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
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)