From 083095a903e405ece0edd532dfb963c9e918eafc Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Thu, 21 Jul 2011 12:53:39 +0000 Subject: [PATCH] Evas textblock: Fixed relative items size calculation. Now they are calculated according to real line height, and not just line height before this point. Furthermore, this also fixes some issues with wrapping not being correct. SVN revision: 61557 --- .../src/lib/canvas/evas_object_textblock.c | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_object_textblock.c b/legacy/evas/src/lib/canvas/evas_object_textblock.c index 0951fe5117..254be3b190 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textblock.c +++ b/legacy/evas/src/lib/canvas/evas_object_textblock.c @@ -2381,38 +2381,16 @@ _layout_calculate_format_item_size(const Evas_Object *obj, * @param add_line true if we should create a line, false otherwise. */ static void -_layout_line_finalize(Ctxt *c, Evas_Object_Textblock_Format *fmt) +_layout_line_finalize(Ctxt *c, Evas_Object_Textblock_Format *fmt __UNUSED__) { Evas_Object_Textblock_Item *it; - Eina_Bool no_text = EINA_TRUE; Evas_Coord x = 0; - c->maxascent = c->maxdescent = 0; + /* Adjust all the item sizes according to the final line size, + * and update the x positions of all the items of the line. */ EINA_INLIST_FOREACH(c->ln->items, it) { - if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT) - { - Evas_Object_Textblock_Text_Item *ti = _ITEM_TEXT(it); - _layout_format_ascent_descent_adjust(c->obj, &c->maxascent, - &c->maxdescent, ti->parent.format); - no_text = EINA_FALSE; - break; - } - } - - if (no_text) - _layout_format_ascent_descent_adjust(c->obj, &c->maxascent, - &c->maxdescent, fmt); - - EINA_INLIST_FOREACH(c->ln->items, it) - { - if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT) - { - Evas_Object_Textblock_Text_Item *ti = _ITEM_TEXT(it); - _layout_format_ascent_descent_adjust(c->obj, &c->maxascent, - &c->maxdescent, ti->parent.format); - } - else + if (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT) { Evas_Object_Textblock_Format_Item *fi = _ITEM_FORMAT(it); if (!fi->formatme) goto loop_advance; @@ -3556,6 +3534,23 @@ _layout_par(Ctxt *c) continue; } + if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT) + { + Evas_Object_Textblock_Text_Item *ti = _ITEM_TEXT(it); + _layout_format_ascent_descent_adjust(c->obj, &c->maxascent, + &c->maxdescent, ti->parent.format); + } + else + { + Evas_Object_Textblock_Format_Item *fi = _ITEM_FORMAT(it); + if (fi->formatme) + { + _layout_calculate_format_item_size(c->obj, fi, &c->maxascent, + &c->maxdescent, &fi->y, &fi->parent.w, &fi->parent.h); + fi->parent.adv = fi->parent.w; + } + } + /* Check if we need to wrap, i.e the text is bigger than the width, or we already found a wrap point. */