diff --git a/src/widgets/label/lv_label.c b/src/widgets/label/lv_label.c index 9f947bcb86..6f756c7b83 100644 --- a/src/widgets/label/lv_label.c +++ b/src/widgets/label/lv_label.c @@ -193,6 +193,8 @@ void lv_label_set_text_vfmt(lv_obj_t * obj, const char * fmt, va_list args) lv_obj_invalidate(obj); lv_label_t * label = (lv_label_t *)obj; + lv_label_revert_dots(obj); + /*If text is NULL then refresh*/ if(fmt == NULL) { lv_label_refr_text(obj); diff --git a/tests/ref_imgs/widgets/label_dots.png b/tests/ref_imgs/widgets/label_dots.png new file mode 100644 index 0000000000..0334f8ba2a Binary files /dev/null and b/tests/ref_imgs/widgets/label_dots.png differ diff --git a/tests/ref_imgs_vg_lite/widgets/label_dots.png b/tests/ref_imgs_vg_lite/widgets/label_dots.png new file mode 100644 index 0000000000..94eb8c35a4 Binary files /dev/null and b/tests/ref_imgs_vg_lite/widgets/label_dots.png differ diff --git a/tests/src/test_cases/widgets/test_label.c b/tests/src/test_cases/widgets/test_label.c index 399307cbd0..2527759ea4 100644 --- a/tests/src/test_cases/widgets/test_label.c +++ b/tests/src/test_cases/widgets/test_label.c @@ -615,6 +615,44 @@ void test_label_max_width(void) TEST_ASSERT_EQUAL_SCREENSHOT("widgets/label_max_width.png"); } +void test_label_dots(void) +{ + lv_obj_clean(lv_screen_active()); + + lv_obj_t * cont = lv_obj_create(lv_screen_active()); + lv_obj_set_size(cont, LV_PCT(100), LV_PCT(100)); + lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN); + + lv_obj_t * label1 = lv_label_create(cont); + lv_obj_t * label2 = lv_label_create(cont); + lv_obj_t * label3 = lv_label_create(cont); + lv_obj_t * label4 = lv_label_create(cont); + + lv_obj_set_size(label1, 150, 30); + lv_obj_set_size(label2, 150, 30); + lv_obj_set_size(label3, 150, 30); + lv_obj_set_size(label4, 150, 30); + + const char * temp_text = "Some other text"; + + lv_label_set_text(label1, long_text); + lv_label_set_text(label2, temp_text); + + lv_label_set_text_fmt(label3, "%.*s", (int)strlen(long_text), long_text); + lv_label_set_text_fmt(label4, "%.*s", (int)strlen(temp_text), temp_text); + + lv_label_set_long_mode(label1, LV_LABEL_LONG_MODE_DOTS); + lv_label_set_long_mode(label2, LV_LABEL_LONG_MODE_DOTS); + lv_label_set_long_mode(label3, LV_LABEL_LONG_MODE_DOTS); + lv_label_set_long_mode(label4, LV_LABEL_LONG_MODE_DOTS); + + /* Setting the text with _fmt when long mode was dots would cause the incorrect text to be displayed */ + lv_label_set_text(label2, long_text); + lv_label_set_text_fmt(label4, "%.*s", (int)strlen(long_text), long_text); + + TEST_ASSERT_EQUAL_SCREENSHOT("widgets/label_dots.png"); +} + void test_label_with_recolor_cmd(void) { lv_obj_clean(lv_screen_active());