Evas textblock: Fixed a major bug - don't recreate format items.
I added a mode to format parsing that doesn't create new format items. The bug was that format items were created all the time although they were not needed. SVN revision: 58456
This commit is contained in:
parent
0ced548b40
commit
87bba22028
|
@ -2863,11 +2863,13 @@ _layout_format_item_add(Ctxt *c, Evas_Object_Textblock_Node_Format *n, const cha
|
||||||
* @param style_pad_r the pad to update.
|
* @param style_pad_r the pad to update.
|
||||||
* @param style_pad_t the pad to update.
|
* @param style_pad_t the pad to update.
|
||||||
* @param style_pad_b the pad to update.
|
* @param style_pad_b the pad to update.
|
||||||
|
* @param create_item Create a new format item if true, only process otherwise.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_layout_do_format(const Evas_Object *obj __UNUSED__, Ctxt *c,
|
_layout_do_format(const Evas_Object *obj __UNUSED__, Ctxt *c,
|
||||||
Evas_Object_Textblock_Format **_fmt, Evas_Object_Textblock_Node_Format *n,
|
Evas_Object_Textblock_Format **_fmt, Evas_Object_Textblock_Node_Format *n,
|
||||||
int *style_pad_l, int *style_pad_r, int *style_pad_t, int *style_pad_b)
|
int *style_pad_l, int *style_pad_r, int *style_pad_t, int *style_pad_b,
|
||||||
|
Eina_Bool create_item)
|
||||||
{
|
{
|
||||||
Evas_Object_Textblock_Format *fmt = *_fmt;
|
Evas_Object_Textblock_Format *fmt = *_fmt;
|
||||||
/* FIXME: comment the algo */
|
/* FIXME: comment the algo */
|
||||||
|
@ -2949,16 +2951,21 @@ _layout_do_format(const Evas_Object *obj __UNUSED__, Ctxt *c,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fi = _layout_format_item_add(c, n, NULL, fmt);
|
if (create_item)
|
||||||
fi->vsize = vsize;
|
{
|
||||||
fi->size = size;
|
fi = _layout_format_item_add(c, n, NULL, fmt);
|
||||||
fi->formatme = 1;
|
fi->vsize = vsize;
|
||||||
fi->parent.w = fi->parent.adv = w; /* For formats items it's usually
|
fi->size = size;
|
||||||
the same, we don't handle the
|
fi->formatme = 1;
|
||||||
special cases yet. */
|
/* For formats items it's usually
|
||||||
fi->parent.h = h;
|
the same, we don't handle the
|
||||||
|
special cases yet. */
|
||||||
|
fi->parent.w = fi->parent.adv = w;
|
||||||
|
fi->parent.h = h;
|
||||||
|
}
|
||||||
handled = 1;
|
handled = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!handled)
|
if (!handled)
|
||||||
{
|
{
|
||||||
if (s[0] == '+')
|
if (s[0] == '+')
|
||||||
|
@ -2980,7 +2987,7 @@ _layout_do_format(const Evas_Object *obj __UNUSED__, Ctxt *c,
|
||||||
{
|
{
|
||||||
_layout_format_value_handle(c, fmt, item);
|
_layout_format_value_handle(c, fmt, item);
|
||||||
}
|
}
|
||||||
else
|
else if (create_item)
|
||||||
{
|
{
|
||||||
if ((_IS_PARAGRAPH_SEPARATOR(c->o, item)) ||
|
if ((_IS_PARAGRAPH_SEPARATOR(c->o, item)) ||
|
||||||
(_IS_LINE_SEPARATOR(item)))
|
(_IS_LINE_SEPARATOR(item)))
|
||||||
|
@ -3549,7 +3556,7 @@ _layout(const Evas_Object *obj, int calc_only, int w, int h, int *w_ret, int *h_
|
||||||
{
|
{
|
||||||
_layout_do_format(obj, c, &fmt, fnode,
|
_layout_do_format(obj, c, &fmt, fnode,
|
||||||
&style_pad_l, &style_pad_r,
|
&style_pad_l, &style_pad_r,
|
||||||
&style_pad_t, &style_pad_b);
|
&style_pad_t, &style_pad_b, EINA_FALSE);
|
||||||
fnode = _NODE_FORMAT(EINA_INLIST_GET(fnode)->next);
|
fnode = _NODE_FORMAT(EINA_INLIST_GET(fnode)->next);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -3575,7 +3582,7 @@ _layout(const Evas_Object *obj, int calc_only, int w, int h, int *w_ret, int *h_
|
||||||
/* No need to skip on the first run, or a non-visible one */
|
/* No need to skip on the first run, or a non-visible one */
|
||||||
_layout_text_append(c, fmt, n, start, off, o->repch);
|
_layout_text_append(c, fmt, n, start, off, o->repch);
|
||||||
_layout_do_format(obj, c, &fmt, fnode, &style_pad_l,
|
_layout_do_format(obj, c, &fmt, fnode, &style_pad_l,
|
||||||
&style_pad_r, &style_pad_t, &style_pad_b);
|
&style_pad_r, &style_pad_t, &style_pad_b, EINA_TRUE);
|
||||||
if ((c->have_underline2) || (c->have_underline))
|
if ((c->have_underline2) || (c->have_underline))
|
||||||
{
|
{
|
||||||
if (style_pad_b < c->underline_extend)
|
if (style_pad_b < c->underline_extend)
|
||||||
|
|
Loading…
Reference in New Issue