feat(animimage): support set source interfaces with or without parameter of reverse play (#8164)

Signed-off-by: Liubin Gong <liubin.gong@nxp.com>
Co-authored-by: Liubin Gong <liubin.gong@nxp.com>
This commit is contained in:
Zhenhua Luo
2025-04-29 04:14:44 +08:00
committed by GitHub
parent 049c0548e1
commit 0040658e6a
5 changed files with 48 additions and 19 deletions
+4 -1
View File
@@ -31,7 +31,10 @@ Image sources
-------------
To set the image animation images sources, use
:cpp:expr:`lv_animimg_set_src(animimg, dsc[], num, reverse)`.
:cpp:expr:`lv_animimg_set_src(animimg, dsc[], num)`.
To set the images source for flip playback of animation image, use
:cpp:expr:`lv_animimg_set_src_reverse(animimg, dsc[], num)`.
Using the inner animation
-------------------------
@@ -14,7 +14,7 @@ void lv_example_animimg_1(void)
{
lv_obj_t * animimg0 = lv_animimg_create(lv_screen_active());
lv_obj_center(animimg0);
lv_animimg_set_src(animimg0, (const void **) anim_imgs, 3, false);
lv_animimg_set_src(animimg0, (const void **) anim_imgs, 3);
lv_animimg_set_duration(animimg0, 1000);
lv_animimg_set_repeat_count(animimg0, LV_ANIM_REPEAT_INFINITE);
lv_animimg_start(animimg0);
+22 -11
View File
@@ -43,6 +43,7 @@
**********************/
static void index_change(lv_obj_t * obj, int32_t idx);
static void lv_animimg_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj);
static void lv_animimg_set_src_inner(lv_obj_t * obj, const void * dsc[], size_t num, bool reverse);
/**********************
* STATIC VARIABLES
@@ -107,18 +108,14 @@ lv_obj_t * lv_animimg_create(lv_obj_t * parent)
return obj;
}
void lv_animimg_set_src(lv_obj_t * obj, const void * dsc[], size_t num, bool reverse)
void lv_animimg_set_src(lv_obj_t * obj, const void * dsc[], size_t num)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
lv_animimg_t * animimg = (lv_animimg_t *)obj;
animimg->dsc = dsc;
animimg->pic_count = num;
if(reverse) {
lv_anim_set_values(&animimg->anim, (int32_t)num, 0);
}
else {
lv_anim_set_values(&animimg->anim, 0, (int32_t)num);
}
lv_animimg_set_src_inner(obj, dsc, num, false);
}
void lv_animimg_set_src_reverse(lv_obj_t * obj, const void * dsc[], size_t num)
{
lv_animimg_set_src_inner(obj, dsc, num, true);
}
void lv_animimg_start(lv_obj_t * obj)
@@ -258,4 +255,18 @@ static void index_change(lv_obj_t * obj, int32_t idx)
lv_image_set_src(obj, animimg->dsc[idx]);
}
static void lv_animimg_set_src_inner(lv_obj_t * obj, const void * dsc[], size_t num, bool reverse)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
lv_animimg_t * animimg = (lv_animimg_t *)obj;
animimg->dsc = dsc;
animimg->pic_count = num;
if(reverse) {
lv_anim_set_values(&animimg->anim, (int32_t)num, 0);
}
else {
lv_anim_set_values(&animimg->anim, 0, (int32_t)num);
}
}
#endif
+9 -2
View File
@@ -72,9 +72,16 @@ lv_obj_t * lv_animimg_create(lv_obj_t * parent);
* @param obj pointer to an animation image object
* @param dsc pointer to a series images
* @param num images' number
* @param reverse Set the flip playback of the image animation
*/
void lv_animimg_set_src(lv_obj_t * obj, const void * dsc[], size_t num, bool reverse);
void lv_animimg_set_src(lv_obj_t * obj, const void * dsc[], size_t num);
/**
* Set the images source for flip playback of animation image.
* @param obj pointer to an animation image object
* @param dsc pointer to a series images
* @param num images' number
*/
void lv_animimg_set_src_reverse(lv_obj_t * obj, const void * dsc[], size_t num);
/**
* Startup the image animation.
+12 -4
View File
@@ -21,6 +21,7 @@ void setUp(void);
void tearDown(void);
void test_animimg_successful_create(void);
void test_animimg_set_src(void);
void test_animimg_set_src_reverse(void);
void test_animimg_get_src_count(void);
void test_animimg_set_duration(void);
void test_animimg_set_repeat_count_infinite(void);
@@ -44,14 +45,21 @@ void test_animimg_successful_create(void)
void test_animimg_set_src(void)
{
lv_animimg_set_src(animimg, (const void **) anim_imgs, 3, false);
lv_animimg_set_src(animimg, (const void **) anim_imgs, 3);
TEST_ASSERT_NOT_NULL(animimg);
}
void test_animimg_set_src_reverse(void)
{
lv_animimg_set_src_reverse(animimg, (const void **) anim_imgs, 3);
TEST_ASSERT_NOT_NULL(animimg);
}
void test_animimg_get_src(void)
{
lv_animimg_set_src(animimg, (const void **) anim_imgs, 3, false);
lv_animimg_set_src(animimg, (const void **) anim_imgs, 3);
const void ** actual_dsc = lv_animimg_get_src(animimg);
@@ -63,7 +71,7 @@ void test_animimg_get_src_count(void)
{
uint8_t expected_count = 3;
lv_animimg_set_src(animimg, (const void **) anim_imgs, expected_count, false);
lv_animimg_set_src(animimg, (const void **) anim_imgs, expected_count);
uint8_t actual_count = lv_animimg_get_src_count(animimg);
@@ -94,7 +102,7 @@ void test_animimg_start(void)
{
// for lv_animimg_start() to actually work,
// we need to properly setup the widget beforehand
lv_animimg_set_src(animimg, (const void **) anim_imgs, 3, false);
lv_animimg_set_src(animimg, (const void **) anim_imgs, 3);
lv_animimg_set_duration(animimg, 1000);
lv_animimg_set_repeat_count(animimg, LV_ANIM_REPEAT_INFINITE);