From f5b00f5ad87a816f7643c57131a5ac597a84f9dd Mon Sep 17 00:00:00 2001 From: Neo Xu Date: Sun, 1 Dec 2024 22:37:28 +0800 Subject: [PATCH] feat(animimage): add property support Signed-off-by: Neo Xu --- scripts/lv_conf_internal_gen.py | 3 ++ src/lv_conf_internal.h | 3 ++ src/widgets/animimage/lv_animimage.c | 36 +++++++++++++++++++ src/widgets/animimage/lv_animimage.h | 10 ++++++ .../property/lv_animimage_properties.c | 26 ++++++++++++++ src/widgets/property/lv_obj_property_names.h | 1 + tests/src/test_cases/widgets/test_animimg.c | 29 +++++++++++++++ 7 files changed, 108 insertions(+) create mode 100644 src/widgets/property/lv_animimage_properties.c diff --git a/scripts/lv_conf_internal_gen.py b/scripts/lv_conf_internal_gen.py index b61db8906..97f090b93 100755 --- a/scripts/lv_conf_internal_gen.py +++ b/scripts/lv_conf_internal_gen.py @@ -169,6 +169,9 @@ r''' * End of parsing lv_conf_template.h -----------------------------------*/ +/*Fix inconsistent name*/ +#define LV_USE_ANIMIMAGE LV_USE_ANIMIMG + #ifndef __ASSEMBLY__ LV_EXPORT_CONST_INT(LV_DPI_DEF); LV_EXPORT_CONST_INT(LV_DRAW_BUF_STRIDE_ALIGN); diff --git a/src/lv_conf_internal.h b/src/lv_conf_internal.h index cfbeac226..e395910e5 100644 --- a/src/lv_conf_internal.h +++ b/src/lv_conf_internal.h @@ -4127,6 +4127,9 @@ * End of parsing lv_conf_template.h -----------------------------------*/ +/*Fix inconsistent name*/ +#define LV_USE_ANIMIMAGE LV_USE_ANIMIMG + #ifndef __ASSEMBLY__ LV_EXPORT_CONST_INT(LV_DPI_DEF); LV_EXPORT_CONST_INT(LV_DRAW_BUF_STRIDE_ALIGN); diff --git a/src/widgets/animimage/lv_animimage.c b/src/widgets/animimage/lv_animimage.c index 831d3741d..f7ab6f4f8 100644 --- a/src/widgets/animimage/lv_animimage.c +++ b/src/widgets/animimage/lv_animimage.c @@ -44,11 +44,47 @@ static void lv_animimg_constructor(const lv_obj_class_t * class_p, lv_obj_t * ob * STATIC VARIABLES **********************/ +#if LV_USE_OBJ_PROPERTY +static const lv_property_ops_t properties[] = { + { + .id = LV_PROPERTY_ANIMIMAGE_SRC, + .setter = lv_animimg_set_src, + .getter = lv_animimg_get_src, + }, + { + .id = LV_PROPERTY_ANIMIMAGE_DURATION, + .setter = lv_animimg_set_duration, + .getter = lv_animimg_get_duration, + }, + { + .id = LV_PROPERTY_ANIMIMAGE_REPEAT_COUNT, + .setter = lv_animimg_set_repeat_count, + .getter = lv_animimg_get_repeat_count, + }, + { + .id = LV_PROPERTY_ANIMIMAGE_SRC_COUNT, + .setter = NULL, + .getter = lv_animimg_get_src_count, + }, +}; +#endif + const lv_obj_class_t lv_animimg_class = { .constructor_cb = lv_animimg_constructor, .instance_size = sizeof(lv_animimg_t), .base_class = &lv_image_class, .name = "animimg", +#if LV_USE_OBJ_PROPERTY + .prop_index_start = LV_PROPERTY_ANIMIMAGE_START, + .prop_index_end = LV_PROPERTY_ANIMIMAGE_END, + .properties = properties, + .properties_count = sizeof(properties) / sizeof(properties[0]), + +#if LV_USE_OBJ_PROPERTY_NAME + .property_names = lv_animimage_property_names, + .names_count = sizeof(lv_animimage_property_names) / sizeof(lv_property_name_t), +#endif +#endif }; /********************** diff --git a/src/widgets/animimage/lv_animimage.h b/src/widgets/animimage/lv_animimage.h index a2f1926c1..29846ea82 100644 --- a/src/widgets/animimage/lv_animimage.h +++ b/src/widgets/animimage/lv_animimage.h @@ -31,6 +31,16 @@ extern "C" { * TYPEDEFS **********************/ +#if LV_USE_OBJ_PROPERTY +enum { + LV_PROPERTY_ID2(ANIMIMAGE, SRC, LV_PROPERTY_TYPE_POINTER, LV_PROPERTY_TYPE_INT, 0), + LV_PROPERTY_ID(ANIMIMAGE, DURATION, LV_PROPERTY_TYPE_INT, 1), + LV_PROPERTY_ID(ANIMIMAGE, REPEAT_COUNT, LV_PROPERTY_TYPE_INT, 2), + LV_PROPERTY_ID(ANIMIMAGE, SRC_COUNT, LV_PROPERTY_TYPE_INT, 3), + LV_PROPERTY_ANIMIMAGE_END, +}; +#endif + LV_ATTRIBUTE_EXTERN_DATA extern const lv_obj_class_t lv_animimg_class; /** Image parts */ diff --git a/src/widgets/property/lv_animimage_properties.c b/src/widgets/property/lv_animimage_properties.c new file mode 100644 index 000000000..36e3e329d --- /dev/null +++ b/src/widgets/property/lv_animimage_properties.c @@ -0,0 +1,26 @@ + +/** + * GENERATED FILE, DO NOT EDIT IT! + * @file lv_animimage_properties.c + */ + +#include "../animimage/lv_animimage.h" + +#if LV_USE_OBJ_PROPERTY && LV_USE_OBJ_PROPERTY_NAME + +#if LV_USE_ANIMIMAGE +/** + * Animimage widget property names, name must be in order. + * Generated code from properties.py + */ +/* *INDENT-OFF* */ +const lv_property_name_t lv_animimage_property_names[4] = { + {"duration", LV_PROPERTY_ANIMIMAGE_DURATION,}, + {"repeat_count", LV_PROPERTY_ANIMIMAGE_REPEAT_COUNT,}, + {"src", LV_PROPERTY_ANIMIMAGE_SRC,}, + {"src_count", LV_PROPERTY_ANIMIMAGE_SRC_COUNT,}, +}; +#endif /*LV_USE_ANIMIMAGE*/ + +/* *INDENT-ON* */ +#endif diff --git a/src/widgets/property/lv_obj_property_names.h b/src/widgets/property/lv_obj_property_names.h index 782a4d0d1..77d830936 100644 --- a/src/widgets/property/lv_obj_property_names.h +++ b/src/widgets/property/lv_obj_property_names.h @@ -10,6 +10,7 @@ #if LV_USE_OBJ_PROPERTY && LV_USE_OBJ_PROPERTY_NAME + extern const lv_property_name_t lv_animimage_property_names[4]; extern const lv_property_name_t lv_dropdown_property_names[9]; extern const lv_property_name_t lv_image_property_names[11]; extern const lv_property_name_t lv_keyboard_property_names[4]; diff --git a/tests/src/test_cases/widgets/test_animimg.c b/tests/src/test_cases/widgets/test_animimg.c index 4bba8ebe5..9f501288f 100644 --- a/tests/src/test_cases/widgets/test_animimg.c +++ b/tests/src/test_cases/widgets/test_animimg.c @@ -104,4 +104,33 @@ void test_animimg_start(void) TEST_ASSERT_NOT_NULL(animimg); } +void test_animimg_property(void) +{ +#if LV_USE_OBJ_PROPERTY + lv_property_t prop; + lv_obj_t * obj = lv_animimg_create(lv_screen_active()); + + prop.id = LV_PROPERTY_ANIMIMAGE_SRC; + prop.arg1.ptr = anim_imgs; + prop.arg2.num = 3; + TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK); + TEST_ASSERT_EQUAL_PTR(lv_obj_get_property(obj, LV_PROPERTY_ANIMIMAGE_SRC).ptr, anim_imgs); + TEST_ASSERT_EQUAL_PTR(lv_animimg_get_src(obj), anim_imgs); + TEST_ASSERT_EQUAL_INT(lv_animimg_get_src_count(obj), 3); + TEST_ASSERT_EQUAL_INT(3, lv_obj_get_property(obj, LV_PROPERTY_ANIMIMAGE_SRC_COUNT).num); + + prop.id = LV_PROPERTY_ANIMIMAGE_DURATION; + prop.num = 1000; + TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK); + TEST_ASSERT_EQUAL_INT(1000, lv_animimg_get_duration(obj)); + TEST_ASSERT_EQUAL_INT(1000, lv_obj_get_property(obj, LV_PROPERTY_ANIMIMAGE_DURATION).num); + + prop.id = LV_PROPERTY_ANIMIMAGE_REPEAT_COUNT; + prop.num = LV_ANIM_REPEAT_INFINITE; + TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK); + TEST_ASSERT_EQUAL_INT(LV_ANIM_REPEAT_INFINITE, lv_animimg_get_repeat_count(obj)); + TEST_ASSERT_EQUAL_INT(LV_ANIM_REPEAT_INFINITE, lv_obj_get_property(obj, LV_PROPERTY_ANIMIMAGE_REPEAT_COUNT).num_u); +#endif +} + #endif