Files
vn/include/compositor.h
T

102 lines
3.1 KiB
C

// compositor.h
#ifndef COMPOSITOR_H
#define COMPOSITOR_H
#include <stdint.h>
#include <stdbool.h>
// 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);
// 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