#include #include "layout.h" #include "effect.h" #include "any_log.h" //double cubic_bezier(double x, double a, double b, double c, double d) //{ // const double t = 1 - x; // return a * (t * t * t) + 3 * b * (t * t * x) + 3 * c * (t * x * x) + d * (x * x * x); //} // //static void effect_pulse_pre(effect_t *effect, layout_t *layout, cairo_t *cr) //{ // struct timespec now; // timespec_get(&now, TIME_UTC); // // // After half the duration we invert direction // struct timespec midpoint = timespec_div(effect->duration, 2); // struct timespec diff = timespec_diff(now, effect->start); // // double t = timespec_greater(midpoint, diff) // ? (double)timespec_to_ms(diff) / timespec_to_ms(midpoint) // : 1.0 - (double)timespec_to_ms(timespec_diff(diff, midpoint)) / timespec_to_ms(midpoint); // // // Make it customizable // double s = cubic_bezier(t, 0.19, 1.0, 0.22, 1.0); // // // Make it a parameter // const double amplitude = 0.12; // // // FIXME: The intent was to scale the animation for long blocks, but it needs more love // // // int x_max = amplitude * (layout->height + (layout->width / (double)layout->height) - 1); // int y_max = amplitude * layout->height; // // layout->x_padding = layout->block->x_padding + x_max * s; // layout->y_padding = layout->block->y_padding + y_max * s; //} // //effect_t *effect_pulse(struct timespec duration) //{ // effect_t *effect = calloc(1, sizeof(effect_t)); // effect->type = EFFECT_PULSE; // effect->duration = duration; // effect->pre = effect_pulse_pre; // return effect; //} void effect_info_free(effect_info_t *info) { free(info->state); free(info); } void effect_free(effect_t *effect) { assert(effect->info->finalize != NULL); effect->info->finalize(effect); }