From 052d908ab73d1ce3f6dc4e5b3038acb36e5d5a7e Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 10 Feb 2025 08:41:36 +0100 Subject: [PATCH] feat(xml): add test for a complex view --- examples/others/xml/lv_example_xml_2.c | 2 + .../widgets/canvas/lv_example_canvas_10.c | 2 +- examples/widgets/canvas/lv_example_canvas_9.c | 2 +- src/font/lv_font.c | 5 +- src/font/lv_font.h | 6 + src/others/xml/parsers/lv_xml_table_parser.c | 2 +- tests/ref_imgs/xml/view2.png | Bin 0 -> 10724 bytes tests/ref_imgs_vg_lite/xml/view2.png | Bin 0 -> 11566 bytes tests/src/test_assets/xml/view2.xml | 35 ++++++ tests/src/test_cases/xml/test_xml_general.c | 3 + tests/src/test_cases/xml/test_xml_table.c | 2 +- tests/src/test_cases/xml/test_xml_view2.c | 113 ++++++++++++++++++ xmls/lv_scale.xml | 2 +- xmls/lv_table.xml | 2 +- 14 files changed, 168 insertions(+), 8 deletions(-) create mode 100644 tests/ref_imgs/xml/view2.png create mode 100644 tests/ref_imgs_vg_lite/xml/view2.png create mode 100644 tests/src/test_assets/xml/view2.xml create mode 100644 tests/src/test_cases/xml/test_xml_view2.c diff --git a/examples/others/xml/lv_example_xml_2.c b/examples/others/xml/lv_example_xml_2.c index 61e36a8de2..65fb37e38f 100644 --- a/examples/others/xml/lv_example_xml_2.c +++ b/examples/others/xml/lv_example_xml_2.c @@ -15,6 +15,8 @@ void lv_example_xml_2(void) lv_xml_component_register_from_file("A:lvgl/examples/others/xml/my_button.xml"); lv_xml_component_register_from_file("A:lvgl/examples/others/xml/view.xml"); + lv_xml_register_font("lv_montserrat_18", &lv_font_montserrat_18); + lv_obj_t * obj = lv_xml_create(lv_screen_active(), "view", NULL); lv_obj_set_pos(obj, 10, 10); diff --git a/examples/widgets/canvas/lv_example_canvas_10.c b/examples/widgets/canvas/lv_example_canvas_10.c index 7252ca8a74..0b666109ba 100644 --- a/examples/widgets/canvas/lv_example_canvas_10.c +++ b/examples/widgets/canvas/lv_example_canvas_10.c @@ -19,7 +19,7 @@ static void timer_cb(lv_timer_t * timer) lv_draw_letter_dsc_t letter_dsc; lv_draw_letter_dsc_init(&letter_dsc); letter_dsc.color = lv_color_hex(0xff0000); - letter_dsc.font = lv_font_default(); + letter_dsc.font = lv_font_get_default(); { #define CURVE2_X(t) ((t) * 2 + lv_trigo_cos((t) * 5) * 40 / 32767 - 10) diff --git a/examples/widgets/canvas/lv_example_canvas_9.c b/examples/widgets/canvas/lv_example_canvas_9.c index 0d297940e0..e85210e09f 100644 --- a/examples/widgets/canvas/lv_example_canvas_9.c +++ b/examples/widgets/canvas/lv_example_canvas_9.c @@ -19,7 +19,7 @@ static void timer_cb(lv_timer_t * timer) lv_draw_letter_dsc_t letter_dsc; lv_draw_letter_dsc_init(&letter_dsc); letter_dsc.color = lv_color_hex(0xff0000); - letter_dsc.font = lv_font_default(); + letter_dsc.font = lv_font_get_default(); { #define CURVE2_X(t) (t * 2 + 10) diff --git a/src/font/lv_font.c b/src/font/lv_font.c index 52e588646f..3d9afcb5c1 100644 --- a/src/font/lv_font.c +++ b/src/font/lv_font.c @@ -146,9 +146,10 @@ int32_t lv_font_get_line_height(const lv_font_t * font) return font->line_height; } -const lv_font_t * lv_font_default(void) + +const lv_font_t * lv_font_get_default(void) { - return LV_FONT_DEFAULT; + return lv_font_default; } /********************** diff --git a/src/font/lv_font.h b/src/font/lv_font.h index 62c39c62a2..fa9f3649f9 100644 --- a/src/font/lv_font.h +++ b/src/font/lv_font.h @@ -174,6 +174,12 @@ int32_t lv_font_get_line_height(const lv_font_t * font); */ void lv_font_set_kerning(lv_font_t * font, lv_font_kerning_t kerning); +/** + * Get the default font, defined by LV_FONT_DEFAULT + * @return return pointer to the default font + */ +const lv_font_t * lv_font_get_default(void); + /********************** * MACROS **********************/ diff --git a/src/others/xml/parsers/lv_xml_table_parser.c b/src/others/xml/parsers/lv_xml_table_parser.c index 28183e373f..0d96c52563 100644 --- a/src/others/xml/parsers/lv_xml_table_parser.c +++ b/src/others/xml/parsers/lv_xml_table_parser.c @@ -119,7 +119,7 @@ void lv_xml_table_cell_apply(lv_xml_parser_state_t * state, const char ** attrs) lv_strncpy(buf, value, sizeof(buf)); char * buf_p = buf; const char * str; - while((str = lv_xml_split_str(&buf_p, ' ')) != NULL) { + while((str = lv_xml_split_str(&buf_p, '|')) != NULL) { ctrl |= table_ctrl_to_enum(str); } diff --git a/tests/ref_imgs/xml/view2.png b/tests/ref_imgs/xml/view2.png new file mode 100644 index 0000000000000000000000000000000000000000..621d70f41a52050bc2f1f402473a116dbaa07b6b GIT binary patch literal 10724 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 literal 0 HcmV?d00001 diff --git a/tests/ref_imgs_vg_lite/xml/view2.png b/tests/ref_imgs_vg_lite/xml/view2.png new file mode 100644 index 0000000000000000000000000000000000000000..f6bd171d5dd4443040b0123e8615ed0704ec5fbf GIT binary patch literal 11566 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 + + + + + + +