// compositor.h #ifndef COMPOSITOR_H #define COMPOSITOR_H #include #include // Animation types enum animation_type_t { ANIM_NONE = 0, ANIM_MOVE, ANIM_FADE, ANIM_SCALE, ANIM_MOVE_FADE // Combined animation }; // Easing functions enum easing_t { EASE_LINEAR = 0, EASE_IN_QUAD, EASE_OUT_QUAD, EASE_IN_OUT_QUAD, EASE_IN_CUBIC, EASE_OUT_CUBIC, EASE_IN_OUT_CUBIC }; extern "C" { typedef struct compositor_t compositor_t; // Initialize compositor with given dimensions compositor_t* compositor_init(uint32_t width, uint32_t height); // Destroy compositor and free resources void compositor_destroy(compositor_t* comp); // Insert element, returns unique ID uint32_t compositor_insert(compositor_t* comp, const uint32_t* fb, uint32_t fb_width, uint32_t fb_height, int32_t x, int32_t y, int32_t z_order, float scale = 1.0f); // Remove element by ID void compositor_remove(compositor_t* comp, uint32_t id); // AIO Update element properties void compositor_update(compositor_t* comp, uint32_t id, int32_t x, int32_t y, int32_t z_order, float scale, bool visible); // holy clusterfuck // Individual setters void compositor_set_position(compositor_t* comp, uint32_t id, int32_t x, int32_t y); void compositor_set_zorder(compositor_t* comp, uint32_t id, int32_t z_order); void compositor_set_visible(compositor_t* comp, uint32_t id, bool visible); void compositor_set_scale(compositor_t* comp, uint32_t id, float scale); // Advances all animations by a given time delta. void compositor_tick(compositor_t* comp, float delta_time_sec); // Instantly sets the element-wide alpha. void compositor_set_alpha(compositor_t* comp, uint32_t id, float alpha); // Starts a "slide" animation on an element. void compositor_animate_move(compositor_t* comp, uint32_t id, int32_t to_x, int32_t to_y, float duration_sec, easing_t easing); // Starts a "fade" or "dissolve" animation on an element. void compositor_animate_fade(compositor_t* comp, uint32_t id, float to_alpha, float duration_sec, easing_t easing); // Starts a "scale" animation on an element. void compositor_animate_scale(compositor_t* comp, uint32_t id, float to_scale, float duration_sec, easing_t easing); // Compose all visible elements and return framebuffer pointer const uint32_t* compositor_compose(compositor_t* comp); void compositor_mark_content_dirty(compositor_t* comp, uint32_t id); void compositor_mark_all_dirty(compositor_t* comp); // Returns the last error message set for this compositor instance. // Returns nullptr if no error has occurred. const char* compositor_get_last_error(compositor_t* comp); } #endif // COMPOSITOR_H