Evas textblock: Clean up ellipsis handling code.
authorTom Hacohen <tom@stosb.com>
Mon, 4 Jan 2016 15:09:16 +0000 (15:09 +0000)
committerTom Hacohen <tom@stosb.com>
Mon, 4 Jan 2016 15:12:10 +0000 (15:12 +0000)
This cleans up the previous commit a bit by isolating the calculation
code and using a temporary descriptively named variable for the calculation.

src/lib/evas/canvas/evas_object_textblock.c

index b28de11..7039364 100644 (file)
@@ -5227,22 +5227,32 @@ _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);
+             int ellip_h_thresh = 0;
 
-             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);
+             /* Calculate ellipsis threshold height. */
+               {
+                  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 (ascent > maxasc) maxasc = ascent;
+                  if (descent > maxdesc) maxdesc = descent;
+
+                  /* The ascent/descent of this item + the ascent descent of
+                   * the next item as if it was the last. */
+                  ellip_h_thresh = ascent + descent + maxasc + maxdesc;
+               }
 
              if ((it->format->ellipsis == 1.0) && (c->h >= 0) &&
-                   ((ascent + descent + maxasc + maxdesc + c->y >
+                   ((c->y + ellip_h_thresh >
                      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)))