Evas textblock: Fixed a bug that caused format item positions to be wrong in some cases.

Just sanitized some of the item coordinates calculation.

SVN revision: 57055
This commit is contained in:
Tom Hacohen 2011-02-15 16:50:07 +00:00
parent a5d96cb881
commit d09431f2a1
1 changed files with 5 additions and 18 deletions

View File

@ -2158,22 +2158,7 @@ _layout_line_order(Ctxt *c __UNUSED__, Evas_Object_Textblock_Line *line)
} }
} }
} }
#endif
/* Recalculate the positions according to the new order. */
{
Evas_Object_Textblock_Item *it = line->items;
Evas_Coord x = 0;
while (it)
{
it->x = x;
x += it->adv;
it = (Evas_Object_Textblock_Item *) EINA_INLIST_GET(it)->next;
}
}
#ifdef BIDI_SUPPORT
if (v_to_l) free(v_to_l); if (v_to_l) free(v_to_l);
#endif #endif
} }
@ -2192,6 +2177,7 @@ _layout_line_finalize(Ctxt *c, Evas_Object_Textblock_Format *fmt)
{ {
Evas_Object_Textblock_Item *it; Evas_Object_Textblock_Item *it;
Eina_Bool no_text = EINA_TRUE; Eina_Bool no_text = EINA_TRUE;
Evas_Coord x = 0;
_layout_line_order(c, c->ln); _layout_line_order(c, c->ln);
@ -2210,7 +2196,6 @@ _layout_line_finalize(Ctxt *c, Evas_Object_Textblock_Format *fmt)
EINA_INLIST_FOREACH(c->ln->items, it) EINA_INLIST_FOREACH(c->ln->items, it)
{ {
int endx;
if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT) if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
{ {
Evas_Object_Textblock_Text_Item *ti = _ITEM_TEXT(it); Evas_Object_Textblock_Text_Item *ti = _ITEM_TEXT(it);
@ -2320,8 +2305,10 @@ _layout_line_finalize(Ctxt *c, Evas_Object_Textblock_Format *fmt)
} }
} }
endx = it->x + it->adv; it->x = x;
if (endx > c->ln->w) c->ln->w = endx; x += it->adv;
if (x > c->ln->w) c->ln->w = x;
} }
c->ln->y = (c->y - c->par->y) + c->o->style_pad.t; c->ln->y = (c->y - c->par->y) + c->o->style_pad.t;