diff --git a/src/widgets/label/lv_label.c b/src/widgets/label/lv_label.c index becd757e9d..27876bf153 100644 --- a/src/widgets/label/lv_label.c +++ b/src/widgets/label/lv_label.c @@ -159,7 +159,6 @@ void lv_label_set_text_vfmt(lv_obj_t * obj, const char * fmt, va_list args) LV_ASSERT_NULL(fmt); remove_translation_tag(obj); - lv_obj_invalidate(obj); lv_label_t * label = (lv_label_t *)obj; lv_label_revert_dots(obj); @@ -707,8 +706,6 @@ void lv_label_ins_text(lv_obj_t * obj, uint32_t pos, const char * txt) /*Cannot append to static text*/ if(label->static_txt != 0) return; - lv_obj_invalidate(obj); - /*Allocate space for the new text*/ size_t old_len = lv_strlen(label->text); size_t ins_len = lv_strlen(txt); @@ -733,8 +730,6 @@ void lv_label_cut_text(lv_obj_t * obj, uint32_t pos, uint32_t cnt) /*Cannot append to static text*/ if(label->static_txt) return; - lv_obj_invalidate(obj); - char * label_txt = lv_label_get_text(obj); /*Delete the characters*/ lv_text_cut(label_txt, pos, cnt); @@ -1072,6 +1067,7 @@ static void lv_label_mark_need_refr_text(lv_obj_t * obj) label->invalid_size_cache = true; label->need_refr_text = true; + lv_obj_invalidate(obj); lv_obj_refresh_self_size(obj); lv_obj_request_layout_complete_event(obj); diff --git a/tests/src/test_cases/widgets/test_label.c b/tests/src/test_cases/widgets/test_label.c index fdba121151..6654be34ef 100644 --- a/tests/src/test_cases/widgets/test_label.c +++ b/tests/src/test_cases/widgets/test_label.c @@ -852,4 +852,60 @@ void test_label_setting_text_disables_translation(void) TEST_ASSERT_EQUAL_STRING(lv_label_get_text(label), "Der Tiger"); } +static void display_invalidate_area_cb(lv_event_t * e) +{ + int * i = lv_event_get_user_data(e); + *i += 1; +} + +void test_label_invalidate_area(void) +{ + int i = 0; + label = lv_label_create(lv_screen_active()); + lv_display_add_event_cb(lv_display_get_default(), display_invalidate_area_cb, LV_EVENT_INVALIDATE_AREA, &i); + i = 0; + lv_label_set_text_static(label, "Hello world"); + TEST_ASSERT(i > 0); + + i = 0; + lv_label_set_text(label, "Hello world"); + TEST_ASSERT(i > 0); + + i = 0; + lv_label_set_text_fmt(label, "%s", "Hello world"); + TEST_ASSERT(i > 0); + + i = 0; + lv_label_set_long_mode(label, LV_LABEL_LONG_MODE_SCROLL); + TEST_ASSERT(i > 0); + +#if LV_LABEL_TEXT_SELECTION + i = 0; + lv_label_set_text_selection_start(label, 1); + TEST_ASSERT(i > 0); + + i = 0; + lv_label_set_text_selection_end(label, 1); + TEST_ASSERT(i > 0); +#endif + + i = 0; + lv_label_set_recolor(label, true); + TEST_ASSERT(i > 0); + + i = 0; + lv_label_ins_text(label, 5, " world"); + TEST_ASSERT(i > 0); + + i = 0; + lv_label_cut_text(label, 5, 5); + TEST_ASSERT(i > 0); + + i = 0; + lv_obj_set_style_align(label, LV_ALIGN_CENTER, 0); + TEST_ASSERT(i > 0); + + lv_display_remove_event_cb_with_user_data(lv_display_get_default(), display_invalidate_area_cb, &i); +} + #endif