Evas Textblock: Fix ellipsis when textblock is resized to formatted h. 89/56089/1
authorYoungbok Shin <youngb.shin@samsung.com>
Mon, 4 Jan 2016 08:02:38 +0000 (17:02 +0900)
committerYoungbok Shin <youngb.shin@samsung.com>
Mon, 4 Jan 2016 08:11:31 +0000 (17:11 +0900)
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

@tizen_fix

Change-Id: I901bbe5279c66cc2322635a60b239d0167f037d9

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

index 2057e8c..92736ba 100644 (file)
@@ -4958,11 +4958,32 @@ _layout_par(Ctxt *c)
               * fast path.
               * Other values of 0.0 <= ellipsis < 1.0 are handled in
               * _layout_par_ellipsis_items */
+             // TIZEN_ONLY(20160104): Fix ellipsis when textblock is resized to formatted h.
+             //if ((it->format->ellipsis == 1.0) && (c->h >= 0) &&
+             //      ((2 * it->h + 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)))
+             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)))
+             ///////////////////////////////////////////////////////////////
                {
                   _layout_handle_ellipsis(c, it, i);
                   ret = 1;
index 66e19f6..e891995 100644 (file)
@@ -1937,6 +1937,18 @@ START_TEST(evas_textblock_wrapping)
         ck_assert_int_eq(bret, ret);
      }
 
+   // TIZEN_ONLY(20160104): Fix ellipsis when textblock is resized to formatted 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