while(current && current->position > position) current = PREVIOUS;
}
- if(!current)
+ if(!current && first && first->position <= position)
{
for(current = last;
current && current->position > position;
while(current && current->position < position) current = NEXT;
}
- if(!current)
+ if(!current && last && last->position >= position)
{
for(current = first;
current && current->position < position;
}
Auto *result = 0;
- position = edl->align_to_frame(position, 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)) ) {
+//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));
+ }
//printf("Autos::get_auto_for_editing %p %p\n", first, default_auto);
- result = edl->session->auto_keyframes ?
- insert_auto(track->to_units(position, 0)) :
- get_prev_auto(track->to_units(position, 0), PLAY_FORWARD, result);
-
-//printf("Autos::get_auto_for_editing %p %p %p\n", default_auto, first, result);
return result;
}
while(current && current->position < position) current = NEXT;
}
- if(!current)
+ if(!current && last && last->position > position)
{
for(current = first;
current && current->position <= position;
while(current && current->position > position) current = PREVIOUS;
}
- if(!current)
+ if(!current && first && first->position <= position)
{
for(current = last;
current && current->position > position;
//printf("Autos::copy 10 %d %d %p\n", default_only, start, autoof(start));
if(active_only || (!default_only && !active_only))
{
- for(Auto* current = autoof(start);
- current && current->position <= end;
- current = NEXT)
- {
+ 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
- if(current->position >= start && current->position <= end)
- {
+ if( current->position >= start && current->position <= end ) {
current->copy(start, end, file, default_only);
}
+ current = NEXT;
}
}
// Copy default auto again to make it the active auto on the clipboard
Auto* Autos::nearest_before(int64_t position)
{
Auto *current;
-
- for(current = last; current && current->position >= position; current = PREVIOUS)
- { ; }
-
-
+ for(current = last; current && current->position >= position; current = PREVIOUS);
return current; // return 0 on failure
}
Auto* Autos::nearest_after(int64_t position)
{
Auto *current;
-
- for(current = first; current && current->position <= position; current = NEXT)
- { ; }
-
-
+ for(current = first; current && current->position <= position; current = NEXT);
return current; // return 0 on failure
}