summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hirt <daniel.hirt@samsung.com>2014-09-26 13:14:20 +0100
committerTom Hacohen <tom@stosb.com>2014-09-26 13:24:17 +0100
commit9d5303e347a685b31cd07d7917cde845d5a01040 (patch)
tree7a0bfbd8094f733e36282787c2342e304d595276
parentd7f4a2fa810a9b5262b1401b28a88d28549fb70e (diff)
downloadefl-9d5303e347a685b31cd07d7917cde845d5a01040.tar.gz
Evas Textblock: Fix bad empty line add on wrapping
Summary: In some cases of char or word wrapping, an empty line might be accidentally added at the end of the paragraph. That line contains no items. Of course, this line should not exist. One outcome of this is that it causes wrong height values of the paragraph, when the finalizing code uses the _layout_last_line_max_descent_adjust_calc, which in turn looks at that empty line to calculate the descent values. @fix Test Plan: Char-wrap and word-wrap tests to test suite included in this revision. Reviewers: tasn Subscribers: JackDanielZ, cedric Projects: #efl Differential Revision: https://phab.enlightenment.org/D1444
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c13
-rw-r--r--src/tests/evas/evas_test_textblock.c13
2 files changed, 24 insertions, 2 deletions
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c
index 47163ccc2b..2848aaa2fb 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -4868,8 +4868,12 @@ _layout_par(Ctxt *c)
wrap -= it->text_pos; /* Cut here */
}
}
-
- if (wrap > 0)
+ if ((wrap >= 0) && ((size_t) wrap == it_len))
+ {
+ /* Can happen if this is the last word in the paragraph */
+ adv_line = 0;
+ }
+ else if (wrap > 0)
{
if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
{
@@ -4890,6 +4894,11 @@ _layout_par(Ctxt *c)
redo_item = 1;
_layout_line_advance(c, it->format);
}
+ else // (wrap < 0)
+ {
+ /* avoid line advance if there is no wrapping point */
+ adv_line = 0;
+ }
/* Reset wrap */
wrap = -1;
}
diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c
index e7d8cc969e..36f0e238da 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -1654,6 +1654,19 @@ START_TEST(evas_textblock_wrapping)
}
fail_if(w != bw);
+ /* Verify that no empty line is added */
+ evas_object_textblock_text_markup_set(tb, "<wrap=word>Hello</wrap>");
+ evas_object_textblock_size_native_get(tb, NULL, &nh);
+ evas_object_resize(tb, 0, 1000);
+ evas_object_textblock_size_formatted_get(tb, NULL, &h);
+ ck_assert_int_eq(nh, h);
+
+ evas_object_textblock_text_markup_set(tb, "<wrap=char>a</wrap>");
+ evas_object_textblock_size_native_get(tb, NULL, &nh);
+ evas_object_resize(tb, 0, 1000);
+ evas_object_textblock_size_formatted_get(tb, NULL, &h);
+ ck_assert_int_eq(nh, h);
+
/* Word wrap */
evas_object_textblock_text_markup_set(tb, "aaaaaa");
evas_object_textblock_size_formatted_get(tb, &bw, &bh);