#include "v4k.h" struct { float (*ease)(float); const char *name; } easings[] = { {ease_zero, "ease_zero"}, {ease_one, "ease_one"}, {ease_linear, "ease_linear"}, {ease_out_sine, "ease_out_sine"}, {ease_out_quad, "ease_out_quad"}, {ease_out_cubic, "ease_out_cubic"}, {ease_out_quart, "ease_out_quart"}, {ease_out_quint, "ease_out_quint"}, {ease_out_expo, "ease_out_expo"}, {ease_out_circ, "ease_out_circ"}, {ease_out_back, "ease_out_back"}, {ease_out_elastic, "ease_out_elastic"}, {ease_out_bounce, "ease_out_bounce"}, {ease_in_sine, "ease_in_sine"}, {ease_in_quad, "ease_in_quad"}, {ease_in_cubic, "ease_in_cubic"}, {ease_in_quart, "ease_in_quart"}, {ease_in_quint, "ease_in_quint"}, {ease_in_expo, "ease_in_expo"}, {ease_in_circ, "ease_in_circ"}, {ease_in_back, "ease_in_back"}, {ease_in_elastic, "ease_in_elastic"}, {ease_in_bounce, "ease_in_bounce"}, {ease_inout_sine, "ease_inout_sine"}, {ease_inout_quad, "ease_inout_quad"}, {ease_inout_cubic, "ease_inout_cubic"}, {ease_inout_quart, "ease_inout_quart"}, {ease_inout_quint, "ease_inout_quint"}, {ease_inout_expo, "ease_inout_expo"}, {ease_inout_circ, "ease_inout_circ"}, {ease_inout_back, "ease_inout_back"}, {ease_inout_elastic, "ease_inout_elastic"}, {ease_inout_bounce, "ease_inout_bounce"}, {ease_inout_perlin, "ease_inout_perlin"}, }; int main() { window_create(0.75, WINDOW_SQUARE); while(window_swap()) { static double timer = 0; timer = fmod(timer+window_delta(), 2); // loops every 2s static int open = 1; if( ui_window("ease", &open) ) { float linear_delta = timer / 2.f; // delta is [0..1] for( int i = 0; i < countof(easings); ++i) { float nonlinear_delta = easings[i].ease(linear_delta); // visualize ui_slider( easings[i].name, &nonlinear_delta ); } ui_window_end(); } } }