~ruther/qmk_firmware

891edbd533acdffec66416c59f4b6066e5e18aaa — Fred Sundvik 9 years ago 444132e
Add function for running the next keyframe
2 files changed, 18 insertions(+), 0 deletions(-)

M visualizer.c
M visualizer.h
M visualizer.c => visualizer.c +15 -0
@@ 178,6 178,21 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize
    return true;
}

void run_next_keyframe(keyframe_animation_t* animation, visualizer_state_t* state) {
    int next_frame = animation->current_frame + 1;
    if (next_frame == animation->num_frames) {
        next_frame = 0;
    }
    keyframe_animation_t temp_animation = *animation;
    temp_animation.current_frame = next_frame;
    temp_animation.time_left_in_frame = animation->frame_lengths[next_frame];
    temp_animation.first_update_of_frame = true;
    temp_animation.last_update_of_frame = false;
    temp_animation.need_update  = false;
    visualizer_state_t temp_state = *state;
    (*temp_animation.frame_functions[next_frame])(&temp_animation, &temp_state);
}

bool keyframe_no_operation(keyframe_animation_t* animation, visualizer_state_t* state) {
    (void)animation;
    (void)state;

M visualizer.h => visualizer.h +3 -0
@@ 106,6 106,9 @@ extern GDisplay* LED_DISPLAY;

void start_keyframe_animation(keyframe_animation_t* animation);
void stop_keyframe_animation(keyframe_animation_t* animation);
// This runs the next keyframe, but does not update the animation state
// Useful for crossfades for example
void run_next_keyframe(keyframe_animation_t* animation, visualizer_state_t* state);

// Some predefined keyframe functions that can be used by the user code
// Does nothing, useful for adding delays