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:
parent
1fe6c6192a
commit
d442740f2a
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user