fix(anim): play animations from their current progress (#9052)

This commit is contained in:
Gabor Kiss-Vamosi
2025-10-14 11:37:16 +02:00
committed by GitHub
parent f876b99888
commit 87c9aa5f98
2 changed files with 36 additions and 6 deletions
+18 -3
View File
@@ -1143,15 +1143,30 @@ static void play_timeline_on_trigger_event_cb(lv_event_t * e)
timeline_play_dsc_t * dsc = lv_event_get_user_data(e);
LV_ASSERT_NULL(dsc);
/*Reset the progress only if the animation was finished*/
uint16_t progress = lv_anim_timeline_get_progress(dsc->at);
if(dsc->reverse) {
lv_anim_timeline_set_progress(dsc->at, LV_ANIM_TIMELINE_PROGRESS_MAX);
if(progress == 0) {
lv_anim_timeline_set_progress(dsc->at, LV_ANIM_TIMELINE_PROGRESS_MAX);
}
if(lv_anim_timeline_get_progress(dsc->at) == LV_ANIM_TIMELINE_PROGRESS_MAX) {
lv_anim_timeline_set_delay(dsc->at, dsc->delay);
}
lv_anim_timeline_set_reverse(dsc->at, true);
}
else {
lv_anim_timeline_set_progress(dsc->at, 0);
if(progress == LV_ANIM_TIMELINE_PROGRESS_MAX) {
lv_anim_timeline_set_progress(dsc->at, 0);
}
if(lv_anim_timeline_get_progress(dsc->at) == 0) {
lv_anim_timeline_set_delay(dsc->at, dsc->delay);
}
lv_anim_timeline_set_reverse(dsc->at, false);
}
lv_anim_timeline_set_delay(dsc->at, dsc->delay);
lv_anim_timeline_start(dsc->at);
}
+18 -3
View File
@@ -1049,16 +1049,31 @@ static void play_anim_on_trigger_event_cb(lv_event_t * e)
return;
}
/*Reset the progress only if the animation was finished*/
uint16_t progress = lv_anim_timeline_get_progress(timeline);
if(dsc->reverse) {
if(progress == 0) {
lv_anim_timeline_set_progress(timeline, LV_ANIM_TIMELINE_PROGRESS_MAX);
}
if(lv_anim_timeline_get_progress(timeline) == LV_ANIM_TIMELINE_PROGRESS_MAX) {
lv_anim_timeline_set_delay(timeline, dsc->delay);
}
lv_anim_timeline_set_reverse(timeline, true);
lv_anim_timeline_set_progress(timeline, LV_ANIM_TIMELINE_PROGRESS_MAX);
}
else {
if(progress == LV_ANIM_TIMELINE_PROGRESS_MAX) {
lv_anim_timeline_set_progress(timeline, 0);
}
if(lv_anim_timeline_get_progress(timeline) == 0) {
lv_anim_timeline_set_delay(timeline, dsc->delay);
}
lv_anim_timeline_set_reverse(timeline, false);
lv_anim_timeline_set_progress(timeline, 0);
}
lv_anim_timeline_set_delay(timeline, dsc->delay);
lv_anim_timeline_start(timeline);
}