#ifndef COMET_EFFECT_H #define COMET_EFFECT_H #include #include "util.h" typedef struct effect effect_t; typedef struct effect_info effect_info_t; typedef struct layout layout_t; // NOTE: Should only allocate the effect and set any extra values // typedef effect_t *(*effect_allocate_t)(const effect_info_t *info); // NOTE: Must free any state associated with the effect // typedef void (*effect_finalize_t)(effect_t *effect); typedef void (*effect_render_t)(effect_t *effect, layout_t *layout, cairo_t *cr); // NOTE: effect_info's state will be free'd simply // struct effect_info { char *label; struct timespec duration; effect_allocate_t allocate; effect_finalize_t finalize; effect_render_t pre; effect_render_t post; void *state; }; struct effect { const effect_info_t *info; struct timespec start; struct effect *next; }; void effect_init(effect_t *effect, const effect_info_t *info); void effect_free(effect_t *effect); #endif