// 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 }; enum anchor_point_t { ANCHOR_TOP_LEFT, ANCHOR_TOP_CENTER, ANCHOR_TOP_RIGHT, ANCHOR_CENTER_LEFT, ANCHOR_CENTER, ANCHOR_CENTER_RIGHT, ANCHOR_BOTTOM_LEFT, ANCHOR_BOTTOM_CENTER, ANCHOR_BOTTOM_RIGHT, }; 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, anchor_point_t anchor); // 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); // 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); // Animation functions with queue parameter void compositor_animate_move(compositor_t* comp, uint32_t id, int32_t to_x, int32_t to_y, float duration_sec, easing_t easing, bool queue = false); void compositor_animate_fade(compositor_t* comp, uint32_t id, float to_alpha, float duration_sec, easing_t easing, bool queue = false); void compositor_animate_scale(compositor_t* comp, uint32_t id, float to_scale, float duration_sec, easing_t easing, bool queue = false); // Immediately complete all animations void compositor_animation_complete(compositor_t* comp, uint32_t id); void compositor_animation_complete_all(compositor_t* comp); // Returns true if any element is animating or has queued animations. bool compositor_is_animating(compositor_t * comp); // Returns true if the specified element is animating or has queued animations. bool compositor_is_element_animating(compositor_t* comp, uint32_t id); // 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. const char* compositor_get_last_error(compositor_t* comp); } #endif // COMPOSITOR_H