/** * @file lv_anim.h * */ #ifndef LV_ANIM_H #define LV_ANIM_H #ifdef __cplusplus extern "C" { #endif /********************* * INCLUDES *********************/ #include "../lv_conf_internal.h" #include "lv_types.h" #include "lv_math.h" #include "lv_timer.h" #include "lv_ll.h" /********************* * DEFINES *********************/ #define LV_ANIM_REPEAT_INFINITE 0xFFFFFFFF #define LV_ANIM_PLAYTIME_INFINITE 0xFFFFFFFF /* * Macros used to set cubic-bezier anim parameter. * Parameters come from https://easings.net/ * * Usage: * * lv_anim_t a; * lv_anim_init(&a); * ... * lv_anim_set_path_cb(&a, lv_anim_path_custom_bezier3); * LV_ANIM_SET_EASE_IN_SINE(&a); //Set cubic-bezier anim parameter to easeInSine * ... * lv_anim_start(&a); */ #define _PARA(a, x1, y1, x2, y2) ((a)->parameter.bezier3 = \ (lv_anim_bezier3_para_t) { \ LV_BEZIER_VAL_FLOAT(x1), LV_BEZIER_VAL_FLOAT(y1), \ LV_BEZIER_VAL_FLOAT(x2), LV_BEZIER_VAL_FLOAT(y2) } \ ) #define LV_ANIM_SET_EASE_IN_SINE(a) _PARA(a, 0.12, 0, 0.39, 0) #define LV_ANIM_SET_EASE_OUT_SINE(a) _PARA(a, 0.61, 1, 0.88, 1) #define LV_ANIM_SET_EASE_IN_OUT_SINE(a) _PARA(a, 0.37, 0, 0.63, 1) #define LV_ANIM_SET_EASE_IN_QUAD(a) _PARA(a, 0.11, 0, 0.5, 0) #define LV_ANIM_SET_EASE_OUT_QUAD(a) _PARA(a, 0.5, 1, 0.89, 1) #define LV_ANIM_SET_EASE_IN_OUT_QUAD(a) _PARA(a, 0.45, 0, 0.55, 1) #define LV_ANIM_SET_EASE_IN_CUBIC(a) _PARA(a, 0.32, 0, 0.67, 0) #define LV_ANIM_SET_EASE_OUT_CUBIC(a) _PARA(a, 0.33, 1, 0.68, 1) #define LV_ANIM_SET_EASE_IN_OUT_CUBIC(a) _PARA(a, 0.65, 0, 0.35, 1) #define LV_ANIM_SET_EASE_IN_QUART(a) _PARA(a, 0.5, 0, 0.75, 0) #define LV_ANIM_SET_EASE_OUT_QUART(a) _PARA(a, 0.25, 1, 0.5, 1) #define LV_ANIM_SET_EASE_IN_OUT_QUART(a) _PARA(a, 0.76, 0, 0.24, 1) #define LV_ANIM_SET_EASE_IN_QUINT(a) _PARA(a, 0.64, 0, 0.78, 0) #define LV_ANIM_SET_EASE_OUT_QUINT(a) _PARA(a, 0.22, 1, 0.36, 1) #define LV_ANIM_SET_EASE_IN_OUT_QUINT(a) _PARA(a, 0.83, 0, 0.17, 1) #define LV_ANIM_SET_EASE_IN_EXPO(a) _PARA(a, 0.7, 0, 0.84, 0) #define LV_ANIM_SET_EASE_OUT_EXPO(a) _PARA(a, 0.16, 1, 0.3, 1) #define LV_ANIM_SET_EASE_IN_OUT_EXPO(a) _PARA(a, 0.87, 0, 0.13, 1) #define LV_ANIM_SET_EASE_IN_CIRC(a) _PARA(a, 0.55, 0, 1, 0.45) #define LV_ANIM_SET_EASE_OUT_CIRC(a) _PARA(a, 0, 0.55, 0.45, 1) #define LV_ANIM_SET_EASE_IN_OUT_CIRC(a) _PARA(a, 0.85, 0, 0.15, 1) #define LV_ANIM_SET_EASE_IN_BACK(a) _PARA(a, 0.36, 0, 0.66, -0.56) #define LV_ANIM_SET_EASE_OUT_BACK(a) _PARA(a, 0.34, 1.56, 0.64, 1) #define LV_ANIM_SET_EASE_IN_OUT_BACK(a) _PARA(a, 0.68, -0.6, 0.32, 1.6) LV_EXPORT_CONST_INT(LV_ANIM_REPEAT_INFINITE); LV_EXPORT_CONST_INT(LV_ANIM_PLAYTIME_INFINITE); /********************** * TYPEDEFS **********************/ /** Can be used to indicate if animations are enabled or disabled in a case*/ typedef enum { LV_ANIM_OFF, LV_ANIM_ON, } lv_anim_enable_t; /** Get the current value during an animation*/ typedef int32_t (*lv_anim_path_cb_t)(const lv_anim_t *); /** Generic prototype of "animator" functions. * First parameter is the variable to animate. * Second parameter is the value to set. * Compatible with `lv_xxx_set_yyy(obj, value)` functions * The `x` in `_xcb_t` means it's not a fully generic prototype because * it doesn't receive `lv_anim_t *` as its first argument*/ typedef void (*lv_anim_exec_xcb_t)(void *, int32_t); /** Same as `lv_anim_exec_xcb_t` but receives `lv_anim_t *` as the first parameter. * It's more consistent but less convenient. Might be used by binding generator functions.*/ typedef void (*lv_anim_custom_exec_cb_t)(lv_anim_t *, int32_t); /** Callback to call when the animation is ready*/ typedef void (*lv_anim_completed_cb_t)(lv_anim_t *); /** Callback to call when the animation really stars (considering `delay`)*/ typedef void (*lv_anim_start_cb_t)(lv_anim_t *); /** Callback used when the animation values are relative to get the current value*/ typedef int32_t (*lv_anim_get_value_cb_t)(lv_anim_t *); /** Callback used when the animation is deleted*/ typedef void (*lv_anim_deleted_cb_t)(lv_anim_t *); /**< Parameter used when path is custom_bezier */ typedef struct { int16_t x1; int16_t y1; int16_t x2; int16_t y2; } lv_anim_bezier3_para_t; /** Describes an animation*/ struct lv_anim_t { void * var; /**parameter.bezier3 * @param a pointer to an animation * @return the current value to set */ int32_t lv_anim_path_custom_bezier3(const lv_anim_t * a); /********************** * GLOBAL VARIABLES **********************/ /********************** * MACROS **********************/ #ifdef __cplusplus } /*extern "C"*/ #endif #endif /*LV_ANIM_H*/