forked from enlightenment/efl
Evas textblock: Fixed max descent adjustment and a related bug.
The bug caused wrong line sizing in some situations (appending new paragraphs to a textblock).
This commit is contained in:
parent
72167b9cc3
commit
cbde2bef69
|
@ -2566,6 +2566,9 @@ _layout_item_max_ascent_descent_calc(const Evas_Object *eo_obj,
|
||||||
void *fi = NULL;
|
void *fi = NULL;
|
||||||
*maxascent = *maxdescent = 0;
|
*maxascent = *maxdescent = 0;
|
||||||
|
|
||||||
|
if (!it || !it->format || !it->format->font.font)
|
||||||
|
return;
|
||||||
|
|
||||||
if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
|
if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
|
||||||
{
|
{
|
||||||
fi = _ITEM_TEXT(it)->text_props.font_instance;
|
fi = _ITEM_TEXT(it)->text_props.font_instance;
|
||||||
|
@ -3289,6 +3292,42 @@ _layout_calculate_format_item_size(const Evas_Object *eo_obj,
|
||||||
*_h = h;
|
*_h = h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Evas_Coord
|
||||||
|
_layout_last_line_max_descent_adjust_calc(Ctxt *c, const Evas_Object_Textblock_Paragraph *last_vis_par)
|
||||||
|
{
|
||||||
|
if (last_vis_par->lines)
|
||||||
|
{
|
||||||
|
Evas_Object_Textblock_Line *ln = (Evas_Object_Textblock_Line *)
|
||||||
|
EINA_INLIST_GET(last_vis_par->lines)->last;
|
||||||
|
Evas_Object_Textblock_Item *it;
|
||||||
|
|
||||||
|
EINA_INLIST_FOREACH(ln->items, it)
|
||||||
|
{
|
||||||
|
if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
|
||||||
|
{
|
||||||
|
Evas_Coord asc = 0, desc = 0;
|
||||||
|
Evas_Coord maxasc = 0, maxdesc = 0;
|
||||||
|
_layout_item_ascent_descent_adjust(c->obj, &asc, &desc,
|
||||||
|
it, c->position);
|
||||||
|
_layout_item_max_ascent_descent_calc(c->obj, &maxasc, &maxdesc,
|
||||||
|
it, c->position);
|
||||||
|
|
||||||
|
if (desc > c->descent)
|
||||||
|
c->descent = desc;
|
||||||
|
if (maxdesc > c->maxdescent)
|
||||||
|
c->maxdescent = maxdesc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c->maxdescent > c->descent)
|
||||||
|
{
|
||||||
|
return c->maxdescent - c->descent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
* Order the items in the line, update it's properties and update it's
|
* Order the items in the line, update it's properties and update it's
|
||||||
|
@ -3364,18 +3403,6 @@ loop_advance:
|
||||||
c->ln->y += ascdiff;
|
c->ln->y += ascdiff;
|
||||||
c->y += ascdiff;
|
c->y += ascdiff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If it's the end, add the adjustment to the line height. */
|
|
||||||
if (((c->position == TEXTBLOCK_POSITION_END) ||
|
|
||||||
(c->position == TEXTBLOCK_POSITION_SINGLE))
|
|
||||||
&& (c->maxdescent > c->descent))
|
|
||||||
{
|
|
||||||
Evas_Coord descdiff;
|
|
||||||
|
|
||||||
descdiff = c->maxdescent - c->descent;
|
|
||||||
c->ln->h += descdiff;
|
|
||||||
c->y += descdiff;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c->ln->baseline = c->ascent;
|
c->ln->baseline = c->ascent;
|
||||||
|
@ -5153,7 +5180,10 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret)
|
||||||
EINA_INLIST_GET(c->paragraphs)->last;
|
EINA_INLIST_GET(c->paragraphs)->last;
|
||||||
|
|
||||||
if (last_vis_par)
|
if (last_vis_par)
|
||||||
c->hmax = last_vis_par->y + last_vis_par->h;
|
{
|
||||||
|
c->hmax = last_vis_par->y + last_vis_par->h +
|
||||||
|
_layout_last_line_max_descent_adjust_calc(c, last_vis_par);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clean the rest of the format stack */
|
/* Clean the rest of the format stack */
|
||||||
|
|
Loading…
Reference in New Issue