1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +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_width = 90;
static const int32_t obj_height = 70; 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) static void anim_timeline_create(void)
@ -27,8 +27,7 @@ static void anim_timeline_create(void)
lv_anim_init(&a1); lv_anim_init(&a1);
lv_anim_set_var(&a1, obj1); lv_anim_set_var(&a1, obj1);
lv_anim_set_values(&a1, 0, obj_width); lv_anim_set_values(&a1, 0, obj_width);
lv_anim_set_early_apply(&a1, false); lv_anim_set_custom_exec_cb(&a1, set_width);
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_path_cb(&a1, lv_anim_path_overshoot);
lv_anim_set_time(&a1, 300); lv_anim_set_time(&a1, 300);
@ -36,8 +35,7 @@ static void anim_timeline_create(void)
lv_anim_init(&a2); lv_anim_init(&a2);
lv_anim_set_var(&a2, obj1); lv_anim_set_var(&a2, obj1);
lv_anim_set_values(&a2, 0, obj_height); lv_anim_set_values(&a2, 0, obj_height);
lv_anim_set_early_apply(&a2, false); lv_anim_set_custom_exec_cb(&a2, set_height);
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_path_cb(&a2, lv_anim_path_ease_out);
lv_anim_set_time(&a2, 300); lv_anim_set_time(&a2, 300);
@ -46,8 +44,7 @@ static void anim_timeline_create(void)
lv_anim_init(&a3); lv_anim_init(&a3);
lv_anim_set_var(&a3, obj2); lv_anim_set_var(&a3, obj2);
lv_anim_set_values(&a3, 0, obj_width); lv_anim_set_values(&a3, 0, obj_width);
lv_anim_set_early_apply(&a3, false); lv_anim_set_custom_exec_cb(&a3, set_width);
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_path_cb(&a3, lv_anim_path_overshoot);
lv_anim_set_time(&a3, 300); lv_anim_set_time(&a3, 300);
@ -55,8 +52,7 @@ static void anim_timeline_create(void)
lv_anim_init(&a4); lv_anim_init(&a4);
lv_anim_set_var(&a4, obj2); lv_anim_set_var(&a4, obj2);
lv_anim_set_values(&a4, 0, obj_height); lv_anim_set_values(&a4, 0, obj_height);
lv_anim_set_early_apply(&a4, false); lv_anim_set_custom_exec_cb(&a4, set_height);
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_path_cb(&a4, lv_anim_path_ease_out);
lv_anim_set_time(&a4, 300); lv_anim_set_time(&a4, 300);
@ -65,8 +61,7 @@ static void anim_timeline_create(void)
lv_anim_init(&a5); lv_anim_init(&a5);
lv_anim_set_var(&a5, obj3); lv_anim_set_var(&a5, obj3);
lv_anim_set_values(&a5, 0, obj_width); lv_anim_set_values(&a5, 0, obj_width);
lv_anim_set_early_apply(&a5, false); lv_anim_set_custom_exec_cb(&a5, set_width);
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_path_cb(&a5, lv_anim_path_overshoot);
lv_anim_set_time(&a5, 300); lv_anim_set_time(&a5, 300);
@ -74,8 +69,7 @@ static void anim_timeline_create(void)
lv_anim_init(&a6); lv_anim_init(&a6);
lv_anim_set_var(&a6, obj3); lv_anim_set_var(&a6, obj3);
lv_anim_set_values(&a6, 0, obj_height); lv_anim_set_values(&a6, 0, obj_height);
lv_anim_set_early_apply(&a6, false); lv_anim_set_custom_exec_cb(&a6, set_height);
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_path_cb(&a6, lv_anim_path_ease_out);
lv_anim_set_time(&a6, 300); lv_anim_set_time(&a6, 300);
@ -181,24 +175,17 @@ void lv_example_anim_timeline_1(void)
/* create 3 objects */ /* create 3 objects */
obj1 = lv_obj_create(par); obj1 = lv_obj_create(par);
lv_obj_set_size(obj1, obj_width, obj_height); lv_obj_set_size(obj1, obj_width, obj_height);
lv_obj_set_scrollbar_mode(obj1, LV_SCROLLBAR_MODE_OFF);
obj2 = lv_obj_create(par); obj2 = lv_obj_create(par);
lv_obj_set_size(obj2, obj_width, obj_height); lv_obj_set_size(obj2, obj_width, obj_height);
lv_obj_set_scrollbar_mode(obj2, LV_SCROLLBAR_MODE_OFF);
obj3 = lv_obj_create(par); obj3 = lv_obj_create(par);
lv_obj_set_size(obj3, obj_width, obj_height); lv_obj_set_size(obj3, obj_width, obj_height);
lv_obj_set_scrollbar_mode(obj3, LV_SCROLLBAR_MODE_OFF);
anim_timeline_create(); 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 #endif

View File

@ -58,7 +58,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a1 = lv.anim_t() self.a1 = lv.anim_t()
self.a1.init() self.a1.init()
self.a1.set_values(0, self.obj_width) 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_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_path_cb(lv.anim_t.path_overshoot)
self.a1.set_time(300) self.a1.set_time(300)
@ -66,7 +65,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a2 = lv.anim_t() self.a2 = lv.anim_t()
self.a2.init() self.a2.init()
self.a2.set_values(0, self.obj_height) 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_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_path_cb(lv.anim_t.path_ease_out)
self.a2.set_time(300) self.a2.set_time(300)
@ -75,7 +73,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a3=lv.anim_t() self.a3=lv.anim_t()
self.a3.init() self.a3.init()
self.a3.set_values(0, self.obj_width) 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_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_path_cb(lv.anim_t.path_overshoot)
self.a3.set_time(300) self.a3.set_time(300)
@ -83,7 +80,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a4 = lv.anim_t() self.a4 = lv.anim_t()
self.a4.init() self.a4.init()
self.a4.set_values(0, self.obj_height) 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_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_path_cb(lv.anim_t.path_ease_out)
self.a4.set_time(300) self.a4.set_time(300)
@ -92,7 +88,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a5 = lv.anim_t() self.a5 = lv.anim_t()
self.a5.init() self.a5.init()
self.a5.set_values(0, self.obj_width) 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_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_path_cb(lv.anim_t.path_overshoot)
self.a5.set_time(300) self.a5.set_time(300)
@ -100,7 +95,6 @@ class LV_ExampleAnimTimeline_1(object):
self.a6 = lv.anim_t() self.a6 = lv.anim_t()
self.a6.init() self.a6.init()
self.a6.set_values(0, self.obj_height) 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_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_path_cb(lv.anim_t.path_ease_out)
self.a6.set_time(300) 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; at->anim_dsc[at->anim_dsc_cnt - 1].start_time = start_time;
/*Add default var and virtual exec_cb, used to delete animation.*/ /*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.var = at;
at->anim_dsc[at->anim_dsc_cnt - 1].anim.exec_cb = lv_anim_timeline_virtual_exec_cb; 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++) { for(uint32_t i = 0; i < at->anim_dsc_cnt; i++) {
lv_anim_t * a = &(at->anim_dsc[i].anim); 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++) { for(uint32_t i = 0; i < at->anim_dsc_cnt; i++) {
lv_anim_t * a = &(at->anim_dsc[i].anim); 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; continue;
} }
@ -133,18 +134,20 @@ void lv_anim_timeline_set_progress(lv_anim_timeline_t * at, uint16_t progress)
int32_t value = 0; int32_t value = 0;
if(act_time < start_time && a->early_apply) { if(act_time < start_time && a->early_apply) {
value = a->start_value; 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)) { else if(act_time >= start_time && act_time <= (start_time + a->duration)) {
a->act_time = act_time - start_time; a->act_time = act_time - start_time;
value = a->path_cb(a); 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) { else if(act_time > start_time + a->duration) {
value = a->end_value; 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);
} }
} }
} }