fix(image): image inner align name should not conflict with obj's align

If the name conflicts with base class property name, the property is overridden. This is the property's feature.
The image inner align name is update to 'inner_align'.

Signed-off-by: Neo Xu <neo.xu1990@gmail.com>
This commit is contained in:
Neo Xu
2024-08-03 19:01:21 +08:00
committed by Gabor Kiss-Vamosi
parent c191ecbfb6
commit d6495b576b
5 changed files with 93 additions and 68 deletions

View File

@@ -92,7 +92,7 @@ static const lv_property_ops_t properties[] = {
.getter = lv_image_get_antialias,
},
{
.id = LV_PROPERTY_IMAGE_ALIGN,
.id = LV_PROPERTY_IMAGE_INNER_ALIGN,
.setter = lv_image_set_inner_align,
.getter = lv_image_get_inner_align,
},

View File

@@ -56,18 +56,18 @@ typedef enum {
} lv_image_align_t;
#if LV_USE_OBJ_PROPERTY
enum lv_image_property_t {
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_POINT, 4),
LV_PROPERTY_ID(IMAGE, SCALE, LV_PROPERTY_TYPE_INT, 5),
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),
enum {
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_POINT, 4),
LV_PROPERTY_ID(IMAGE, SCALE, LV_PROPERTY_TYPE_INT, 5),
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, INNER_ALIGN, LV_PROPERTY_TYPE_INT, 10),
LV_PROPERTY_IMAGE_END,
};
#endif

View File

@@ -15,9 +15,9 @@
*/
/* *INDENT-OFF* */
const lv_property_name_t lv_image_property_names[11] = {
{"align", LV_PROPERTY_IMAGE_ALIGN,},
{"antialias", LV_PROPERTY_IMAGE_ANTIALIAS,},
{"blend_mode", LV_PROPERTY_IMAGE_BLEND_MODE,},
{"inner_align", LV_PROPERTY_IMAGE_INNER_ALIGN,},
{"offset_x", LV_PROPERTY_IMAGE_OFFSET_X,},
{"offset_y", LV_PROPERTY_IMAGE_OFFSET_Y,},
{"pivot", LV_PROPERTY_IMAGE_PIVOT,},

View File

@@ -376,4 +376,83 @@ void test_image_clip_radius(void)
TEST_ASSERT_EQUAL_SCREENSHOT("widgets/image_clip_radius_circle.png");
}
void test_image_properties(void)
{
#if LV_USE_OBJ_PROPERTY
lv_obj_t * obj = lv_image_create(lv_screen_active());
lv_property_t prop = { };
prop.id = LV_PROPERTY_IMAGE_SRC;
prop.ptr = &test_arc_bg;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_PTR(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_SRC).ptr, &test_arc_bg);
TEST_ASSERT_EQUAL_PTR(lv_image_get_src(obj), &test_arc_bg);
prop.id = LV_PROPERTY_IMAGE_OFFSET_X;
prop.num = 10;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_OFFSET_X).num, 10);
TEST_ASSERT_EQUAL_INT(lv_image_get_offset_x(obj), 10);
prop.id = LV_PROPERTY_IMAGE_OFFSET_Y;
prop.num = 20;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_OFFSET_Y).num, 20);
TEST_ASSERT_EQUAL_INT(lv_image_get_offset_y(obj), 20);
prop.id = LV_PROPERTY_IMAGE_ROTATION;
prop.num = 30;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_ROTATION).num, 30);
TEST_ASSERT_EQUAL_INT(lv_image_get_rotation(obj), 30);
prop.id = LV_PROPERTY_IMAGE_PIVOT;
prop.point.x = 40;
prop.point.y = 50;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_PIVOT).point.x, 40);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_PIVOT).point.y, 50);
lv_point_t pivot;
lv_image_get_pivot(obj, &pivot);
TEST_ASSERT_EQUAL_INT(pivot.x, 40);
TEST_ASSERT_EQUAL_INT(pivot.y, 50);
prop.id = LV_PROPERTY_IMAGE_SCALE;
prop.num = 60;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_SCALE).num, 60);
TEST_ASSERT_EQUAL_INT(lv_image_get_scale(obj), 60);
prop.id = LV_PROPERTY_IMAGE_SCALE_X;
prop.num = 70;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_SCALE_X).num, 70);
TEST_ASSERT_EQUAL_INT(lv_image_get_scale_x(obj), 70);
prop.id = LV_PROPERTY_IMAGE_SCALE_Y;
prop.num = 80;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_SCALE_Y).num, 80);
TEST_ASSERT_EQUAL_INT(lv_image_get_scale_y(obj), 80);
prop.id = LV_PROPERTY_IMAGE_BLEND_MODE;
prop.num = LV_BLEND_MODE_ADDITIVE;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_BLEND_MODE).num, LV_BLEND_MODE_ADDITIVE);
TEST_ASSERT_EQUAL_INT(lv_image_get_blend_mode(obj), LV_BLEND_MODE_ADDITIVE);
prop.id = LV_PROPERTY_IMAGE_ANTIALIAS;
prop.num = 0;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_ANTIALIAS).num, 0);
TEST_ASSERT_EQUAL_INT(lv_image_get_antialias(obj), 0);
prop.id = LV_PROPERTY_IMAGE_INNER_ALIGN;
prop.num = LV_IMAGE_ALIGN_TOP_MID;
TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RESULT_OK);
TEST_ASSERT_EQUAL_INT(lv_obj_get_property(obj, LV_PROPERTY_IMAGE_INNER_ALIGN).num, LV_IMAGE_ALIGN_TOP_MID);
TEST_ASSERT_EQUAL_INT(lv_image_get_inner_align(obj), LV_IMAGE_ALIGN_TOP_MID);
#endif
}
#endif

View File

@@ -1,54 +0,0 @@
#if LV_BUILD_TEST
#include "../lvgl.h"
#include "../../lvgl_private.h"
#include <stdlib.h>
#include "unity/unity.h"
void test_image_property(void)
{
#if LV_USE_OBJ_PROPERTY
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.point = point;
lv_obj_set_property(obj, &prop);
prop = lv_obj_get_property(obj, LV_PROPERTY_IMAGE_PIVOT);
TEST_ASSERT_TRUE(LV_PROPERTY_ID_TYPE(prop.id) == LV_PROPERTY_TYPE_POINT);
TEST_ASSERT_TRUE(prop.point.x == point.x);
TEST_ASSERT_TRUE(prop.point.y == point.y);
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
}
#endif