From 690b3546d60cac635b8fcb91606b587112a8ce4a Mon Sep 17 00:00:00 2001 From: _VIFEXTech <1290176185@qq.com> Date: Mon, 19 Jul 2021 19:58:58 +0800 Subject: [PATCH] feat(anim) add anim timeline (#2309) * add anim_timeline Signed-off-by: FASTSHIFT * add anim_timeline Signed-off-by: FASTSHIFT * add lv_anim_timeline.c to lv_misc.mk Signed-off-by: FASTSHIFT * LV_ANIM_TIMELINE_END uses global variables to replace macros, lv_anim_timeline_set_progress() adds user_data, act_time uses int32_t type * solve the problem of uninitialized variable and act_time comparison * add LV_ANIM_TIMELINE_CUSTOM_EXEC option Signed-off-by: FASTSHIFT * add LV_ANIM_TIMELINE_CUSTOM_EXEC in lv_conf_internal.h * redesign lv_anim_timeline Signed-off-by: FASTSHIFT * add missing LV_USE_USER_DATA * remove set_progress, update doc * update workflow files * Remove lv_example_anim_timeline_2.c and LV_ANIM_TIMELINE_CUSTOM_EXEC, update lv_anim_timeline_1.c example Signed-off-by: FASTSHIFT * fix warning Co-authored-by: Gabor Kiss-Vamosi --- docs/misc/anim-timeline.png | Bin 0 -> 86641 bytes docs/overview/animation.md | 22 +++ examples/anim/index.rst | 4 + examples/anim/lv_example_anim.h | 1 + examples/anim/lv_example_anim_timeline_1.c | 170 +++++++++++++++++++++ lvgl.h | 1 + src/lv_conf_internal.h | 2 +- src/misc/lv_anim_timeline.c | 168 ++++++++++++++++++++ src/misc/lv_anim_timeline.h | 97 ++++++++++++ src/misc/lv_misc.mk | 1 + 10 files changed, 465 insertions(+), 1 deletion(-) create mode 100644 docs/misc/anim-timeline.png create mode 100644 examples/anim/lv_example_anim_timeline_1.c create mode 100644 src/misc/lv_anim_timeline.c create mode 100644 src/misc/lv_anim_timeline.h diff --git a/docs/misc/anim-timeline.png b/docs/misc/anim-timeline.png new file mode 100644 index 0000000000000000000000000000000000000000..965991ed1395e740c173a0713d60639b9ab52faa GIT binary patch literal 86641 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 z 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%0DMVZ_fD^`*M$dtbO@fnotqLyBf%P|`uDdCR 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 BW&Z#G literal 0 HcmV?d00001 diff --git a/docs/overview/animation.md b/docs/overview/animation.md index 3c4d98078..9b5d61a80 100644 --- a/docs/overview/animation.md +++ b/docs/overview/animation.md @@ -104,6 +104,28 @@ The speed is interpreted in _unit/sec_ dimension. For example, `lv_anim_speed_t You can delete an animation with `lv_anim_del(var, func)` if you provide the animated variable and its animator function. +## Timeline +Timeline is a collection of multiple Animations, which makes it easy to create complex composite animations. + +Firstly, create the animation element, but don’t call `lv_anim_start()`. + +Secondly, create an animation timeline object, by calling `lv_anim_timeline_create()`. + +Thirdly, add animation elements to the animation timeline, by calling `lv_anim_timeline_add(at, start_time, &a)`. `start_time` is the start time of the animation on the timeline. Note that `start_time` will override the value of `delay`. + +Finally, call `lv_anim_timeline_start(at)` to start the animation timeline. + +It supports forward and backward playback of the entire animation group, using `lv_anim_timeline_set_reverse(at, reverse)`. + +Call the `lv_anim_timeline_set_progress(at, progress)` function to set the state of the object corresponding to the progress of the timeline. + +Call the `lv_anim_timeline_get_playtime(at)` function to get the total duration of the entire animation timeline. + +Call the `lv_anim_timeline_get_reverse(at)` function to get whether to reverse the animation timeline. + +Call the `lv_anim_timeline_del(at)` function to delete the animation timeline. + +![](/misc/anim-timeline.png "timeline diagram") ## Examples diff --git a/examples/anim/index.rst b/examples/anim/index.rst index 537061848..f7f3b7895 100644 --- a/examples/anim/index.rst +++ b/examples/anim/index.rst @@ -10,4 +10,8 @@ Playback animation .. lv_example:: anim/lv_example_anim_2 :language: c +Animation timeline +""""""""""""""""""" +.. lv_example:: anim/lv_example_anim_timeline_1.c + :language: c diff --git a/examples/anim/lv_example_anim.h b/examples/anim/lv_example_anim.h index 32e898517..8809a733b 100644 --- a/examples/anim/lv_example_anim.h +++ b/examples/anim/lv_example_anim.h @@ -27,6 +27,7 @@ extern "C" { **********************/ void lv_example_anim_1(void); void lv_example_anim_2(void); +void lv_example_anim_timeline_1(void); /********************** * MACROS diff --git a/examples/anim/lv_example_anim_timeline_1.c b/examples/anim/lv_example_anim_timeline_1.c new file mode 100644 index 000000000..45a1bb3f3 --- /dev/null +++ b/examples/anim/lv_example_anim_timeline_1.c @@ -0,0 +1,170 @@ +#include "../lv_examples.h" +#if LV_BUILD_EXAMPLES + +static lv_anim_timeline_t * anim_timeline = NULL; + +static lv_obj_t * obj1 = NULL; +static lv_obj_t * obj2 = NULL; +static lv_obj_t * obj3 = NULL; + +static const lv_coord_t obj_width = 150; +static const lv_coord_t obj_height = 200; + +static void set_width(void * var, int32_t v) +{ + lv_obj_set_width((lv_obj_t *)var, v); +} + +static void set_height(void * var, int32_t v) +{ + lv_obj_set_height((lv_obj_t *)var, v); +} + +static void anim_timeline_create(void) +{ + /* obj1 */ + lv_anim_t a1; + lv_anim_init(&a1); + lv_anim_set_var(&a1, obj1); + lv_anim_set_values(&a1, 0, obj_width); + lv_anim_set_early_apply(&a1, false); + lv_anim_set_exec_cb(&a1, (lv_anim_exec_xcb_t)set_width); + lv_anim_set_path_cb(&a1, lv_anim_path_overshoot); + lv_anim_set_time(&a1, 300); + + lv_anim_t a2; + lv_anim_init(&a2); + lv_anim_set_var(&a2, obj1); + lv_anim_set_values(&a2, 0, obj_height); + lv_anim_set_early_apply(&a2, false); + lv_anim_set_exec_cb(&a2, (lv_anim_exec_xcb_t)set_height); + lv_anim_set_path_cb(&a2, lv_anim_path_ease_out); + lv_anim_set_time(&a2, 300); + + /* obj2 */ + lv_anim_t a3; + lv_anim_init(&a3); + lv_anim_set_var(&a3, obj2); + lv_anim_set_values(&a3, 0, obj_width); + lv_anim_set_early_apply(&a3, false); + lv_anim_set_exec_cb(&a3, (lv_anim_exec_xcb_t)set_width); + lv_anim_set_path_cb(&a3, lv_anim_path_overshoot); + lv_anim_set_time(&a3, 300); + + lv_anim_t a4; + lv_anim_init(&a4); + lv_anim_set_var(&a4, obj2); + lv_anim_set_values(&a4, 0, obj_height); + lv_anim_set_early_apply(&a4, false); + lv_anim_set_exec_cb(&a4, (lv_anim_exec_xcb_t)set_height); + lv_anim_set_path_cb(&a4, lv_anim_path_ease_out); + lv_anim_set_time(&a4, 300); + + /* obj3 */ + lv_anim_t a5; + lv_anim_init(&a5); + lv_anim_set_var(&a5, obj3); + lv_anim_set_values(&a5, 0, obj_width); + lv_anim_set_early_apply(&a5, false); + lv_anim_set_exec_cb(&a5, (lv_anim_exec_xcb_t)set_width); + lv_anim_set_path_cb(&a5, lv_anim_path_overshoot); + lv_anim_set_time(&a5, 300); + + lv_anim_t a6; + lv_anim_init(&a6); + lv_anim_set_var(&a6, obj3); + lv_anim_set_values(&a6, 0, obj_height); + lv_anim_set_early_apply(&a6, false); + lv_anim_set_exec_cb(&a6, (lv_anim_exec_xcb_t)set_height); + lv_anim_set_path_cb(&a6, lv_anim_path_ease_out); + lv_anim_set_time(&a6, 300); + + /* Create anim timeline */ + anim_timeline = lv_anim_timeline_create(); + lv_anim_timeline_add(anim_timeline, 0, &a1); + lv_anim_timeline_add(anim_timeline, 0, &a2); + lv_anim_timeline_add(anim_timeline, 200, &a3); + lv_anim_timeline_add(anim_timeline, 200, &a4); + lv_anim_timeline_add(anim_timeline, 400, &a5); + lv_anim_timeline_add(anim_timeline, 400, &a6); +} + +static void btn_run_event_handler(lv_event_t * e) +{ + lv_obj_t * btn = lv_event_get_target(e); + + if (!anim_timeline) { + anim_timeline_create(); + } + + bool reverse = lv_obj_has_state(btn, LV_STATE_CHECKED); + lv_anim_timeline_set_reverse(anim_timeline, reverse); + lv_anim_timeline_start(anim_timeline); +} + +static void btn_del_event_handler(lv_event_t * e) +{ + LV_UNUSED(e); + if (anim_timeline) { + lv_anim_timeline_del(anim_timeline); + anim_timeline = NULL; + } +} + +static void slider_prg_event_handler(lv_event_t * e) +{ + lv_obj_t * slider = lv_event_get_target(e); + + if (!anim_timeline) { + anim_timeline_create(); + } + + int32_t progress = lv_slider_get_value(slider); + lv_anim_timeline_set_progress(anim_timeline, progress); +} + +/** + * Create an animation timeline + */ +void lv_example_anim_timeline_1(void) +{ + lv_obj_t * par = lv_scr_act(); + lv_obj_set_flex_flow(par, LV_FLEX_FLOW_ROW); + lv_obj_set_flex_align(par, LV_FLEX_ALIGN_SPACE_AROUND, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); + + lv_obj_t * btn_run = lv_btn_create(par); + lv_obj_add_event_cb(btn_run, btn_run_event_handler, LV_EVENT_VALUE_CHANGED, NULL); + lv_obj_add_flag(btn_run, LV_OBJ_FLAG_IGNORE_LAYOUT); + lv_obj_add_flag(btn_run, LV_OBJ_FLAG_CHECKABLE); + lv_obj_align(btn_run, LV_ALIGN_TOP_MID, -50, 20); + + lv_obj_t * label_run = lv_label_create(btn_run); + lv_label_set_text(label_run, "Run"); + lv_obj_center(label_run); + + lv_obj_t * btn_del = lv_btn_create(par); + lv_obj_add_event_cb(btn_del, btn_del_event_handler, LV_EVENT_CLICKED, NULL); + lv_obj_add_flag(btn_del, LV_OBJ_FLAG_IGNORE_LAYOUT); + lv_obj_align(btn_del, LV_ALIGN_TOP_MID, 50, 20); + + lv_obj_t * label_del = lv_label_create(btn_del); + lv_label_set_text(label_del, "Stop"); + lv_obj_center(label_del); + + lv_obj_t * slider_prg = lv_slider_create(par); + lv_obj_add_event_cb(slider_prg, slider_prg_event_handler, LV_EVENT_VALUE_CHANGED, NULL); + lv_obj_add_flag(slider_prg, LV_OBJ_FLAG_IGNORE_LAYOUT); + lv_obj_align(slider_prg, LV_ALIGN_BOTTOM_MID, 0, -20); + lv_slider_set_range(slider_prg, 0, 65535); + + obj1 = lv_obj_create(par); + lv_obj_set_size(obj1, obj_width, obj_height); + + obj2 = lv_obj_create(par); + lv_obj_set_size(obj2, obj_width, obj_height); + + obj3 = lv_obj_create(par); + lv_obj_set_size(obj3, obj_width, obj_height); +} + +#endif diff --git a/lvgl.h b/lvgl.h index 92f35438b..d413febc0 100644 --- a/lvgl.h +++ b/lvgl.h @@ -26,6 +26,7 @@ extern "C" { #include "src/misc/lv_timer.h" #include "src/misc/lv_math.h" #include "src/misc/lv_async.h" +#include "src/misc/lv_anim_timeline.h" #include "src/hal/lv_hal.h" diff --git a/src/lv_conf_internal.h b/src/lv_conf_internal.h index 6abd8bdc6..c24fad8d8 100644 --- a/src/lv_conf_internal.h +++ b/src/lv_conf_internal.h @@ -74,7 +74,7 @@ #endif /*Enable more complex drawing routines to manage screens transparency. - *Can be used if the UI is above an other layer, e.g. an OSD menu or video player. + *Can be used if the UI is above another layer, e.g. an OSD menu or video player. *Requires `LV_COLOR_DEPTH = 32` colors and the screen's `bg_opa` should be set to non LV_OPA_COVER value*/ #ifndef LV_COLOR_SCREEN_TRANSP # ifdef CONFIG_LV_COLOR_SCREEN_TRANSP diff --git a/src/misc/lv_anim_timeline.c b/src/misc/lv_anim_timeline.c new file mode 100644 index 000000000..34969e866 --- /dev/null +++ b/src/misc/lv_anim_timeline.c @@ -0,0 +1,168 @@ +/** + * @file lv_anim_timeline.c + * + */ + +/********************* + * INCLUDES + *********************/ +#include "lv_anim_timeline.h" +#include "lv_mem.h" +#include "../misc/lv_assert.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/*Data of anim_timeline_dsc*/ +typedef struct{ + lv_anim_t anim; + lv_anim_t * new_anim; + uint32_t start_time; +}lv_anim_timeline_dsc_t; + +/*Data of anim_timeline*/ +struct _lv_anim_timeline_t{ + lv_anim_timeline_dsc_t * anim_dsc; /**< Dynamically allocated anim dsc array*/ + uint32_t anim_dsc_cnt; /**< The length of anim dsc array*/ + bool reverse; /**< Reverse playback*/ +}; + +/********************** + * STATIC PROTOTYPES + **********************/ + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +lv_anim_timeline_t * lv_anim_timeline_create(void) +{ + lv_anim_timeline_t * at = (lv_anim_timeline_t *)lv_mem_alloc(sizeof(lv_anim_timeline_t)); + + LV_ASSERT_MALLOC(at); + + if(at) lv_memset_00(at, sizeof(lv_anim_timeline_t)); + + return at; +} + +void lv_anim_timeline_del(lv_anim_timeline_t * at) +{ + LV_ASSERT_NULL(at); + + for(uint32_t i = 0; i < at->anim_dsc_cnt; i++) { + lv_anim_t * a = &(at->anim_dsc[i].anim); + lv_anim_custom_del(at->anim_dsc[i].new_anim, (lv_anim_custom_exec_cb_t)a->exec_cb); + } + + lv_mem_free(at->anim_dsc); + lv_mem_free(at); +} + +void lv_anim_timeline_add(lv_anim_timeline_t * at, uint32_t start_time, lv_anim_t * a) +{ + LV_ASSERT_NULL(at); + + at->anim_dsc_cnt++; + at->anim_dsc = lv_mem_realloc(at->anim_dsc, at->anim_dsc_cnt * sizeof(lv_anim_timeline_dsc_t)); + + LV_ASSERT_MALLOC(at->anim_dsc); + + at->anim_dsc[at->anim_dsc_cnt - 1].anim = *a; + at->anim_dsc[at->anim_dsc_cnt - 1].new_anim = NULL; + at->anim_dsc[at->anim_dsc_cnt - 1].start_time = start_time; +} + +uint32_t lv_anim_timeline_start(lv_anim_timeline_t * at) +{ + LV_ASSERT_NULL(at); + + const uint32_t playtime = lv_anim_timeline_get_playtime(at); + bool reverse = at->reverse; + + for(uint32_t i = 0; i < at->anim_dsc_cnt; i++) { + lv_anim_t a = at->anim_dsc[i].anim; + uint32_t start_time = at->anim_dsc[i].start_time; + + if(reverse) { + int32_t temp = a.start_value; + a.start_value = a.end_value; + a.end_value = temp; + lv_anim_set_delay(&a, playtime - (start_time + a.time)); + } + else { + lv_anim_set_delay(&a, start_time); + } + + at->anim_dsc[i].new_anim = lv_anim_start(&a); + } + + return playtime; +} + +void lv_anim_timeline_set_reverse(lv_anim_timeline_t * at, bool reverse) +{ + LV_ASSERT_NULL(at); + at->reverse = reverse; +} + +void lv_anim_timeline_set_progress(lv_anim_timeline_t * at, uint16_t progress) +{ + LV_ASSERT_NULL(at); + + const uint32_t playtime = lv_anim_timeline_get_playtime(at); + const uint32_t act_time = progress * playtime / 0xFFFF; + + for(uint32_t i = 0; i < at->anim_dsc_cnt; i++) { + lv_anim_t * a = &(at->anim_dsc[i].anim); + uint32_t start_time = at->anim_dsc[i].start_time; + int32_t value = 0; + + if(act_time < start_time) { + value = a->start_value; + } + else if(act_time < (start_time + a->time)) { + a->act_time = act_time - start_time; + value = a->path_cb(a); + } + else { + value = a->end_value; + } + + a->exec_cb(a->var, value); + } +} + +uint32_t lv_anim_timeline_get_playtime(lv_anim_timeline_t * at) +{ + LV_ASSERT_NULL(at); + + uint32_t playtime = 0; + for(uint32_t i = 0; i < at->anim_dsc_cnt; i++) { + uint32_t end = at->anim_dsc[i].start_time + at->anim_dsc[i].anim.time; + if(end > playtime) { + playtime = end; + } + } + + return playtime; +} + +bool lv_anim_timeline_get_reverse(lv_anim_timeline_t * at) +{ + LV_ASSERT_NULL(at); + return at->reverse; +} diff --git a/src/misc/lv_anim_timeline.h b/src/misc/lv_anim_timeline.h new file mode 100644 index 000000000..ba3cdba52 --- /dev/null +++ b/src/misc/lv_anim_timeline.h @@ -0,0 +1,97 @@ +/** + * @file lv_anim_timeline.h + * + */ + +#ifndef LV_ANIM_TIMELINE_H +#define LV_ANIM_TIMELINE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ +#include "lv_anim.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +struct _lv_anim_timeline_t; + +typedef struct _lv_anim_timeline_t lv_anim_timeline_t; + +/********************** +* GLOBAL PROTOTYPES +**********************/ + +/** + * Create a animation timeline. + * @return pointer to the animation timeline. + */ +lv_anim_timeline_t * lv_anim_timeline_create(void); + +/** + * Delete animation timeline. + * @param at pointer to the animation timeline. + */ +void lv_anim_timeline_del(lv_anim_timeline_t * at); + +/** + * Add animation to the animation timeline. + * @param at pointer to the animation timeline. + * @param start_time the time the animation started on the timeline, note that start_time will override the value of delay. + * @param a pointer to an animation. + */ +void lv_anim_timeline_add(lv_anim_timeline_t * at, uint32_t start_time, lv_anim_t * a); + +/** + * Start the animation timeline. + * @param at pointer to the animation timeline. + * @return total time spent in animation timeline. + */ +uint32_t lv_anim_timeline_start(lv_anim_timeline_t * at); + +/** + * Set the playback direction of the animation timeline. + * @param at pointer to the animation timeline. + * @param reverse whether to play in reverse. + */ +void lv_anim_timeline_set_reverse(lv_anim_timeline_t * at, bool reverse); + +/** + * Set the progress of the animation timeline. + * @param at pointer to the animation timeline. + * @param progress set value 0~65535 to map 0~100% animation progress. + */ +void lv_anim_timeline_set_progress(lv_anim_timeline_t * at, uint16_t progress); + +/** + * Get the time used to play the animation timeline. + * @param at pointer to the animation timeline. + * @return total time spent in animation timeline. + */ +uint32_t lv_anim_timeline_get_playtime(lv_anim_timeline_t * at); + +/** + * Get whether the animation timeline is played in reverse. + * @param at pointer to the animation timeline. + * @return return true if it is reverse playback. + */ +bool lv_anim_timeline_get_reverse(lv_anim_timeline_t * at); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*LV_ANIM_TIMELINE_H*/ diff --git a/src/misc/lv_misc.mk b/src/misc/lv_misc.mk index 0079a8b7b..5e053f877 100644 --- a/src/misc/lv_misc.mk +++ b/src/misc/lv_misc.mk @@ -1,4 +1,5 @@ CSRCS += lv_anim.c +CSRCS += lv_anim_timeline.c CSRCS += lv_area.c CSRCS += lv_async.c CSRCS += lv_bidi.c