diff --git a/src/widgets/textarea/lv_textarea.c b/src/widgets/textarea/lv_textarea.c index 773605cd90..aa027aa4c7 100644 --- a/src/widgets/textarea/lv_textarea.c +++ b/src/widgets/textarea/lv_textarea.c @@ -7,10 +7,11 @@ * INCLUDES *********************/ #include "lv_textarea_private.h" -#include "../label/lv_label_private.h" -#include "../../core/lv_obj_class_private.h" + #if LV_USE_TEXTAREA != 0 +#include "../label/lv_label_private.h" +#include "../../core/lv_obj_class_private.h" #include "../../core/lv_group.h" #include "../../core/lv_refr.h" #include "../../indev/lv_indev.h" @@ -988,7 +989,7 @@ static void lv_textarea_event(const lv_obj_class_t * class_p, lv_event_t * e) else if(code == LV_EVENT_DRAW_POST) { draw_cursor(e); } - else if(code == LV_EVENT_SIZE_CHANGED) { + else if(code == LV_EVENT_SIZE_CHANGED || code == LV_EVENT_STYLE_CHANGED) { lv_textarea_t * ta = (lv_textarea_t *)obj; lv_textarea_scroll_to_cusor_pos(obj, ta->cursor.pos); } @@ -1474,6 +1475,7 @@ static void lv_textarea_scroll_to_cusor_pos(lv_obj_t * obj, int32_t pos) lv_textarea_t * ta = (lv_textarea_t *)obj; lv_point_t cur_pos; + lv_obj_update_layout(ta->label); const lv_font_t * font = lv_obj_get_style_text_font(obj, LV_PART_MAIN); lv_label_get_letter_pos(ta->label, pos, &cur_pos); diff --git a/tests/ref_imgs/widgets/textarea_1.png b/tests/ref_imgs/widgets/textarea_1.png new file mode 100644 index 0000000000..ee346a8f42 Binary files /dev/null and b/tests/ref_imgs/widgets/textarea_1.png differ diff --git a/tests/ref_imgs_vg_lite/widgets/textarea_1.png b/tests/ref_imgs_vg_lite/widgets/textarea_1.png new file mode 100644 index 0000000000..4b873aa203 Binary files /dev/null and b/tests/ref_imgs_vg_lite/widgets/textarea_1.png differ diff --git a/tests/src/test_cases/widgets/test_textarea.c b/tests/src/test_cases/widgets/test_textarea.c index 017f4a4099..47a61df1a7 100644 --- a/tests/src/test_cases/widgets/test_textarea.c +++ b/tests/src/test_cases/widgets/test_textarea.c @@ -83,6 +83,14 @@ void test_textarea_should_scroll_to_the_end(void) TEST_ASSERT(lv_textarea_get_one_line(textarea)); } +void test_textarea_should_not_scroll_if_text_is_fully_visible(void) +{ + lv_textarea_set_text(textarea, "Type here..."); + lv_obj_set_width(textarea, 100); + lv_obj_center(textarea); + TEST_ASSERT_EQUAL_SCREENSHOT("widgets/textarea_1.png"); +} + void test_textarea_should_update_placeholder_text(void) { const char * new_placeholder = "LVGL Rocks!!!!!";