forked from enlightenment/efl
Evas Textblock: Fix ellipsis when textblock is resized to formatted h.
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
This commit is contained in:
parent
b3dc27345a
commit
3252e3bf78
|
@ -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)))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue