diff options
author | Daniel Hirt <daniel.hirt@samsung.com> | 2015-07-14 14:44:38 +0300 |
---|---|---|
committer | Daniel Hirt <daniel.hirt@samsung.com> | 2015-07-14 16:04:40 +0300 |
commit | 74ad947ded6e1f3631d7c11cc6316aaf2c104391 (patch) | |
tree | 237c710cb91b3602febe8bc13ec93490543380a2 | |
parent | bb6145ba2ec5cc0b213483dcfc48158f510139c7 (diff) | |
download | efl-74ad947ded6e1f3631d7c11cc6316aaf2c104391.tar.gz |
Evas textblock: Clear unused paragraphs
This fixes a scenario in which paragraphs in the current layout still
store visual lines from the previous layout. This is possible if the
text uses an ellipsis format, allowing the layout work to stop at a
certain paragraph. This inconsistency affects some query functions that
consider lines which may be irrelevant in the current layout.
Test Case: see added test case to evas_suite.
@fix
-rw-r--r-- | src/lib/evas/canvas/evas_object_textblock.c | 3 | ||||
-rw-r--r-- | src/tests/evas/evas_test_textblock.c | 19 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 4e8ffaa4b6..62494e74df 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -5706,7 +5706,7 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret) } } - /* Mark all the rest of the paragraphs as invisible */ + /* Clear the rest of the paragraphs and mark as invisible */ if (c->par) { c->par = (Evas_Object_Textblock_Paragraph *) @@ -5714,6 +5714,7 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret) while (c->par) { c->par->visible = 0; + _paragraph_clear(c->obj, c->par); c->par = (Evas_Object_Textblock_Paragraph *) EINA_INLIST_GET(c->par)->next; } diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index fe4dfe1895..d15465c9fb 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -1918,6 +1918,25 @@ START_TEST(evas_textblock_wrapping) evas_object_textblock_size_formatted_get(tb, &w, NULL); ck_assert_int_le(w, nw); + { + int bret, ret; + evas_object_textblock_text_markup_set(tb, + "<ellipsis=1.0>aaa<ps>bbb</ellipsis>"); + evas_object_resize(tb, 1, 1); + evas_object_textblock_size_formatted_get(tb, NULL, NULL); + evas_textblock_cursor_line_set(cur, 1); + bret = evas_textblock_cursor_pos_get(cur); + + evas_object_resize(tb, 500, 500); + evas_object_textblock_size_formatted_get(tb, NULL, NULL); + evas_object_resize(tb, 1, 1); + evas_object_textblock_size_formatted_get(tb, NULL, NULL); + evas_textblock_cursor_line_set(cur, 1); + ret = evas_textblock_cursor_pos_get(cur); + + ck_assert_int_eq(bret, ret); + } + END_TB_TEST(); } END_TEST |