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 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 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_t * animimg0 = lv_animimg_create(lv_screen_active());
lv_obj_center(animimg0); 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_duration(animimg0, 1000);
lv_animimg_set_repeat_count(animimg0, LV_ANIM_REPEAT_INFINITE); lv_animimg_set_repeat_count(animimg0, LV_ANIM_REPEAT_INFINITE);
lv_animimg_start(animimg0); 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 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_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 * STATIC VARIABLES
@@ -107,18 +108,14 @@ lv_obj_t * lv_animimg_create(lv_obj_t * parent)
return obj; 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_set_src_inner(obj, dsc, num, false);
lv_animimg_t * animimg = (lv_animimg_t *)obj; }
animimg->dsc = dsc;
animimg->pic_count = num; void lv_animimg_set_src_reverse(lv_obj_t * obj, const void * dsc[], size_t num)
if(reverse) { {
lv_anim_set_values(&animimg->anim, (int32_t)num, 0); lv_animimg_set_src_inner(obj, dsc, num, true);
}
else {
lv_anim_set_values(&animimg->anim, 0, (int32_t)num);
}
} }
void lv_animimg_start(lv_obj_t * obj) 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]); 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 #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 obj pointer to an animation image object
* @param dsc pointer to a series images * @param dsc pointer to a series images
* @param num images' number * @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. * Startup the image animation.
+12 -4
View File
@@ -21,6 +21,7 @@ void setUp(void);
void tearDown(void); void tearDown(void);
void test_animimg_successful_create(void); void test_animimg_successful_create(void);
void test_animimg_set_src(void); void test_animimg_set_src(void);
void test_animimg_set_src_reverse(void);
void test_animimg_get_src_count(void); void test_animimg_get_src_count(void);
void test_animimg_set_duration(void); void test_animimg_set_duration(void);
void test_animimg_set_repeat_count_infinite(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) 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); TEST_ASSERT_NOT_NULL(animimg);
} }
void test_animimg_get_src(void) 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); 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; 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); 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, // for lv_animimg_start() to actually work,
// we need to properly setup the widget beforehand // 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_duration(animimg, 1000);
lv_animimg_set_repeat_count(animimg, LV_ANIM_REPEAT_INFINITE); lv_animimg_set_repeat_count(animimg, LV_ANIM_REPEAT_INFINITE);