Evas Textblock: Fix ellipsis when textblock is resized to formatted h.
authorYoungbok Shin <youngb.shin@samsung.com>
Mon, 4 Jan 2016 15:00:56 +0000 (15:00 +0000)
committerTom Hacohen <tom@stosb.com>
Mon, 4 Jan 2016 15:12:10 +0000 (15:12 +0000)
Summary:
it->h is sum of max ascent and max descent. It shouldn't be used
when handle ellipsis. Because, Evas Textblock uses these values for
each lines differently according to its location.
(start, end, else, single)
So, for handling ellipsis exactly, it has to be fixed.

Test Plan: A test case is included in Evas Test suite.

Reviewers: woohyun, tasn, herdsman

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3475

src/lib/evas/canvas/evas_object_textblock.c
src/tests/evas/evas_test_textblock.c

index bfa7cf5..b28de11 100644 (file)
@@ -5227,8 +5227,22 @@ _layout_par(Ctxt *c)
               * fast path.
               * Other values of 0.0 <= ellipsis < 1.0 are handled in
               * _layout_par_ellipsis_items */
+             int ascent = 0, descent = 0, maxasc = 0, maxdesc = 0;
+             _layout_item_ascent_descent_adjust(c->obj, &ascent, &descent,
+                                                it, it->format);
+
+             if (c->position == TEXTBLOCK_POSITION_START)
+               _layout_item_max_ascent_descent_calc(c->obj, &maxasc, &maxdesc,
+                                                    it, TEXTBLOCK_POSITION_SINGLE);
+             else
+               _layout_item_max_ascent_descent_calc(c->obj, &maxasc, &maxdesc,
+                                                    it, TEXTBLOCK_POSITION_END);
+
+             if (ascent > maxasc) maxasc = ascent;
+             if (descent > maxdesc) maxdesc = descent;
+
              if ((it->format->ellipsis == 1.0) && (c->h >= 0) &&
-                   ((2 * it->h + c->y >
+                   ((ascent + descent + maxasc + maxdesc + c->y >
                      c->h - c->o->style_pad.t - c->o->style_pad.b) ||
                     (!it->format->wrap_word && !it->format->wrap_char &&
                      !it->format->wrap_mixed && !it->format->wrap_hyphenation)))
index 528e640..332a658 100644 (file)
@@ -2202,6 +2202,16 @@ START_TEST(evas_textblock_wrapping)
 
    ck_assert_int_eq(bh, h);
 
+   /* Check that unnecessary ellipsis is not applied */
+   evas_object_textblock_text_markup_set(tb, "This is test for ellipsis with formatted height.");
+   evas_textblock_cursor_format_prepend(cur, "+ wrap=mixed");
+   evas_object_resize(tb, 100, 100);
+   evas_object_textblock_size_formatted_get(tb, NULL, &bh);
+   evas_object_resize(tb, 100, bh);
+   evas_textblock_cursor_format_prepend(cur, "+ wrap=mixed ellipsis=1.0");
+   evas_object_textblock_size_formatted_get(tb, NULL, &h);
+   ck_assert_int_ge(h, bh);
+
    END_TB_TEST();
 }
 END_TEST