diff --git a/src/widgets/image/lv_image.c b/src/widgets/image/lv_image.c index a6f3c8feb7..2427d73950 100644 --- a/src/widgets/image/lv_image.c +++ b/src/widgets/image/lv_image.c @@ -62,6 +62,21 @@ static const lv_property_ops_t properties[] = { .setter = lv_image_set_scale, .getter = lv_image_get_scale, }, + { + .id = LV_PROPERTY_IMAGE_SCALE_X, + .setter = lv_image_set_scale_x, + .getter = lv_image_get_scale_x, + }, + { + .id = LV_PROPERTY_IMAGE_SCALE_Y, + .setter = lv_image_set_scale_y, + .getter = lv_image_get_scale_y, + }, + { + .id = LV_PROPERTY_IMAGE_BLEND_MODE, + .setter = lv_image_set_blend_mode, + .getter = lv_image_get_blend_mode, + }, { .id = LV_PROPERTY_IMAGE_ANTIALIAS, .setter = lv_image_set_antialias, diff --git a/src/widgets/image/lv_image.h b/src/widgets/image/lv_image.h index bc2671fd62..29b23db320 100644 --- a/src/widgets/image/lv_image.h +++ b/src/widgets/image/lv_image.h @@ -83,14 +83,17 @@ typedef uint8_t lv_image_align_t; #if LV_USE_OBJ_PROPERTY enum { - LV_PROPERTY_ID(IMAGE, SRC, LV_PROPERTY_TYPE_POINTER, 0), + LV_PROPERTY_ID(IMAGE, SRC, LV_PROPERTY_TYPE_IMGSRC, 0), LV_PROPERTY_ID(IMAGE, OFFSET_X, LV_PROPERTY_TYPE_INT, 1), LV_PROPERTY_ID(IMAGE, OFFSET_Y, LV_PROPERTY_TYPE_INT, 2), LV_PROPERTY_ID(IMAGE, ROTATION, LV_PROPERTY_TYPE_INT, 3), LV_PROPERTY_ID(IMAGE, PIVOT, LV_PROPERTY_TYPE_POINTER, 4), LV_PROPERTY_ID(IMAGE, SCALE, LV_PROPERTY_TYPE_INT, 5), - LV_PROPERTY_ID(IMAGE, ANTIALIAS, LV_PROPERTY_TYPE_INT, 6), - LV_PROPERTY_ID(IMAGE, ALIGN, LV_PROPERTY_TYPE_INT, 7), + LV_PROPERTY_ID(IMAGE, SCALE_X, LV_PROPERTY_TYPE_INT, 6), + LV_PROPERTY_ID(IMAGE, SCALE_Y, LV_PROPERTY_TYPE_INT, 7), + LV_PROPERTY_ID(IMAGE, BLEND_MODE, LV_PROPERTY_TYPE_INT, 8), + LV_PROPERTY_ID(IMAGE, ANTIALIAS, LV_PROPERTY_TYPE_INT, 9), + LV_PROPERTY_ID(IMAGE, ALIGN, LV_PROPERTY_TYPE_INT, 10), LV_PROPERTY_IMAGE_END, }; #endif diff --git a/tests/src/test_cases/widgets/test_image_property.c b/tests/src/test_cases/widgets/test_image_property.c new file mode 100644 index 0000000000..88ce8140fa --- /dev/null +++ b/tests/src/test_cases/widgets/test_image_property.c @@ -0,0 +1,49 @@ +#if LV_BUILD_TEST +#include "../lvgl.h" + +#include +#include "unity/unity.h" + +void test_image_property(void) +{ + lv_obj_t * obj = lv_image_create(lv_screen_active()); + const char * src = LV_SYMBOL_OK; + lv_image_set_src(obj, src); + lv_property_t prop; + prop = lv_obj_get_property(obj, LV_PROPERTY_IMAGE_SRC); + TEST_ASSERT_TRUE(LV_PROPERTY_ID_TYPE(prop.id) == LV_PROPERTY_TYPE_IMGSRC); + TEST_ASSERT_EQUAL_STRING(prop.ptr, src); + + lv_point_t point = {0xaa, 0x55}; + prop.id = LV_PROPERTY_IMAGE_PIVOT; + prop.ptr = &point; + lv_obj_set_property(obj, &prop); + TEST_ASSERT_TRUE(LV_PROPERTY_ID_TYPE(prop.id) == LV_PROPERTY_TYPE_POINTER); + TEST_ASSERT_TRUE(prop.ptr == &point); + + static const lv_prop_id_t int_ids[] = { + LV_PROPERTY_IMAGE_OFFSET_X, + LV_PROPERTY_IMAGE_OFFSET_Y, + LV_PROPERTY_IMAGE_ROTATION, + LV_PROPERTY_IMAGE_SCALE, + LV_PROPERTY_IMAGE_SCALE_X, + LV_PROPERTY_IMAGE_SCALE_Y, + LV_PROPERTY_IMAGE_BLEND_MODE, + LV_PROPERTY_IMAGE_ANTIALIAS, /*1bit*/ + LV_PROPERTY_IMAGE_ALIGN, + }; + + for(unsigned i = 0; i < sizeof(int_ids) / sizeof(int_ids[0]); i++) { + int v = rand() % 16; + if(int_ids[i] == LV_PROPERTY_IMAGE_ANTIALIAS) v = !!v; + + prop.id = int_ids[i]; + prop.num = v; + lv_obj_set_property(obj, &prop); + prop = lv_obj_get_property(obj, prop.id); + TEST_ASSERT_TRUE(LV_PROPERTY_ID_TYPE(prop.id) == LV_PROPERTY_TYPE_INT); + TEST_ASSERT_EQUAL_INT(prop.num, v); + } +} + +#endif