1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-14 06:42:58 +08:00

fix(anim_timeline): make it work with custom_exec_cb too (#4906)

This commit is contained in:
Gabor Kiss-Vamosi 2023-12-01 09:28:44 +01:00 committed by GitHub
parent 1fe6c6192a
commit d442740f2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 39 deletions

View File

@ -10,14 +10,14 @@ static lv_obj_t * obj3 = NULL;
static const int32_t obj_width = 90;
static const int32_t obj_height = 70;
static void set_width(void * var, int32_t v)
static void set_width(lv_anim_t * var, int32_t v)
{
lv_obj_set_width((lv_obj_t *)var, v);
lv_obj_set_width(var->var, v);
}
static void set_height(void * var, int32_t v)
static void set_height(lv_anim_t * var, int32_t v)
{
lv_obj_set_height((lv_obj_t *)var, v);
lv_obj_set_height(var->var, v);
}
static void anim_timeline_create(void)
@ -27,8 +27,7 @@ static void anim_timeline_create(void)
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_custom_exec_cb(&a1, set_width);
lv_anim_set_path_cb(&a1, lv_anim_path_overshoot);
lv_anim_set_time(&a1, 300);
@ -36,8 +35,7 @@ static void anim_timeline_create(void)
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_custom_exec_cb(&a2, set_height);
lv_anim_set_path_cb(&a2, lv_anim_path_ease_out);
lv_anim_set_time(&a2, 300);
@ -46,8 +44,7 @@ static void anim_timeline_create(void)
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_custom_exec_cb(&a3, set_width);
lv_anim_set_path_cb(&a3, lv_anim_path_overshoot);
lv_anim_set_time(&a3, 300);
@ -55,8 +52,7 @@ static void anim_timeline_create(void)
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_custom_exec_cb(&a4, set_height);
lv_anim_set_path_cb(&a4, lv_anim_path_ease_out);
lv_anim_set_time(&a4, 300);
@ -65,8 +61,7 @@ static void anim_timeline_create(void)
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_custom_exec_cb(&a5, set_width);
lv_anim_set_path_cb(&a5, lv_anim_path_overshoot);
lv_anim_set_time(&a5, 300);
@ -74,8 +69,7 @@ static void anim_timeline_create(void)
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_custom_exec_cb(&a6, set_height);
lv_anim_set_path_cb(&a6, lv_anim_path_ease_out);
lv_anim_set_time(&a6, 300);
@ -181,24 +175,17 @@ void lv_example_anim_timeline_1(void)
/* create 3 objects */
obj1 = lv_obj_create(par);
lv_obj_set_size(obj1, obj_width, obj_height);
lv_obj_set_scrollbar_mode(obj1, LV_SCROLLBAR_MODE_OFF);
obj2 = lv_obj_create(par);
lv_obj_set_size(obj2, obj_width, obj_height);
lv_obj_set_scrollbar_mode(obj2, LV_SCROLLBAR_MODE_OFF);
obj3 = lv_obj_create(par);
lv_obj_set_size(obj3, obj_width, obj_height);
lv_obj_set_scrollbar_mode(obj3, LV_SCROLLBAR_MODE_OFF);
anim_timeline_create();
lv_anim_timeline_set_progress(anim_timeline, 32000);
lv_refr_now(NULL);
lv_anim_timeline_set_progress(anim_timeline, 65535);
lv_refr_now(NULL);
lv_anim_timeline_set_progress(anim_timeline, 50000);
lv_refr_now(NULL);
lv_anim_timeline_set_progress(anim_timeline, 60000);
lv_refr_now(NULL);
}
#endif

View File

@ -58,7 +58,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a1 = lv.anim_t()
self.a1.init()
self.a1.set_values(0, self.obj_width)
self.a1.set_early_apply(False)
self.a1.set_custom_exec_cb(lambda a,v: self.set_width(self.obj1,v))
self.a1.set_path_cb(lv.anim_t.path_overshoot)
self.a1.set_time(300)
@ -66,7 +65,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a2 = lv.anim_t()
self.a2.init()
self.a2.set_values(0, self.obj_height)
self.a2.set_early_apply(False)
self.a2.set_custom_exec_cb(lambda a,v: self.set_height(self.obj1,v))
self.a2.set_path_cb(lv.anim_t.path_ease_out)
self.a2.set_time(300)
@ -75,7 +73,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a3=lv.anim_t()
self.a3.init()
self.a3.set_values(0, self.obj_width)
self.a3.set_early_apply(False)
self.a3.set_custom_exec_cb(lambda a,v: self.set_width(self.obj2,v))
self.a3.set_path_cb(lv.anim_t.path_overshoot)
self.a3.set_time(300)
@ -83,7 +80,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a4 = lv.anim_t()
self.a4.init()
self.a4.set_values(0, self.obj_height)
self.a4.set_early_apply(False)
self.a4.set_custom_exec_cb(lambda a,v: self.set_height(self.obj2,v))
self.a4.set_path_cb(lv.anim_t.path_ease_out)
self.a4.set_time(300)
@ -92,7 +88,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a5 = lv.anim_t()
self.a5.init()
self.a5.set_values(0, self.obj_width)
self.a5.set_early_apply(False)
self.a5.set_custom_exec_cb(lambda a,v: self.set_width(self.obj3,v))
self.a5.set_path_cb(lv.anim_t.path_overshoot)
self.a5.set_time(300)
@ -100,7 +95,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a6 = lv.anim_t()
self.a6.init()
self.a6.set_values(0, self.obj_height)
self.a6.set_early_apply(False)
self.a6.set_custom_exec_cb(lambda a,v: self.set_height(self.obj3,v))
self.a6.set_path_cb(lv.anim_t.path_ease_out)
self.a6.set_time(300)

View File

@ -66,7 +66,7 @@ void lv_anim_timeline_add(lv_anim_timeline_t * at, uint32_t start_time, lv_anim_
at->anim_dsc[at->anim_dsc_cnt - 1].start_time = start_time;
/*Add default var and virtual exec_cb, used to delete animation.*/
if(a->var == NULL && a->exec_cb == NULL) {
if(a->var == NULL && a->exec_cb == NULL && a->custom_exec_cb == NULL) {
at->anim_dsc[at->anim_dsc_cnt - 1].anim.var = at;
at->anim_dsc[at->anim_dsc_cnt - 1].anim.exec_cb = lv_anim_timeline_virtual_exec_cb;
}
@ -105,7 +105,8 @@ void lv_anim_timeline_stop(lv_anim_timeline_t * at)
for(uint32_t i = 0; i < at->anim_dsc_cnt; i++) {
lv_anim_t * a = &(at->anim_dsc[i].anim);
lv_anim_delete(a->var, a->exec_cb);
if(a->exec_cb) lv_anim_delete(a->var, a->exec_cb);
else lv_anim_delete(a->var, NULL);
}
}
@ -125,7 +126,7 @@ void lv_anim_timeline_set_progress(lv_anim_timeline_t * at, uint16_t progress)
for(uint32_t i = 0; i < at->anim_dsc_cnt; i++) {
lv_anim_t * a = &(at->anim_dsc[i].anim);
if(a->exec_cb == NULL) {
if(a->exec_cb == NULL && a->custom_exec_cb == NULL) {
continue;
}
@ -133,18 +134,20 @@ void lv_anim_timeline_set_progress(lv_anim_timeline_t * at, uint16_t progress)
int32_t value = 0;
if(act_time < start_time && a->early_apply) {
value = a->start_value;
a->exec_cb(a->var, value);
if(a->exec_cb) a->exec_cb(a->var, value);
if(a->custom_exec_cb) a->custom_exec_cb(a, value);
}
else if(act_time >= start_time && act_time <= (start_time + a->duration)) {
a->act_time = act_time - start_time;
value = a->path_cb(a);
a->exec_cb(a->var, value);
if(a->exec_cb) a->exec_cb(a->var, value);
if(a->custom_exec_cb) a->custom_exec_cb(a, value);
}
else if(act_time > start_time + a->duration) {
value = a->end_value;
a->exec_cb(a->var, value);
if(a->exec_cb) a->exec_cb(a->var, value);
if(a->custom_exec_cb) a->custom_exec_cb(a, value);
}
}
}