forked from enlightenment/efl
Evas textblock: Added advancement to items. This simplifies the code, fixes issues in selection and may be useful in the future with format items with different advancement and width.
SVN revision: 56425
This commit is contained in:
parent
d7c2187c1f
commit
30c9492e8b
|
@ -317,7 +317,7 @@ struct _Evas_Object_Textblock_Item
|
||||||
#ifdef BIDI_SUPPORT
|
#ifdef BIDI_SUPPORT
|
||||||
size_t visual_pos;
|
size_t visual_pos;
|
||||||
#endif
|
#endif
|
||||||
Evas_Coord x, w, h;
|
Evas_Coord adv, x, w, h;
|
||||||
Evas_BiDi_Props bidi_props;
|
Evas_BiDi_Props bidi_props;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1992,7 +1992,7 @@ _layout_line_align_get(Ctxt *c)
|
||||||
* @param line the line to reorder
|
* @param line the line to reorder
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_layout_line_reorder(Ctxt *c, Evas_Object_Textblock_Line *line)
|
_layout_line_reorder(Ctxt *c __UNUSED__, Evas_Object_Textblock_Line *line)
|
||||||
{
|
{
|
||||||
/*FIXME: do it a bit more efficient - not very efficient ATM. */
|
/*FIXME: do it a bit more efficient - not very efficient ATM. */
|
||||||
Evas_Object_Textblock_Item *it;
|
Evas_Object_Textblock_Item *it;
|
||||||
|
@ -2079,23 +2079,7 @@ _layout_line_reorder(Ctxt *c, Evas_Object_Textblock_Line *line)
|
||||||
while (it)
|
while (it)
|
||||||
{
|
{
|
||||||
it->x = x;
|
it->x = x;
|
||||||
if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
|
x += it->adv;
|
||||||
{
|
|
||||||
int adv = 0;
|
|
||||||
Evas_Object_Textblock_Text_Item *ti = ti =_ITEM_TEXT(it);
|
|
||||||
if (ti->format->font.font)
|
|
||||||
{
|
|
||||||
adv = c->ENFN->font_h_advance_get(c->ENDT,
|
|
||||||
ti->format->font.font, ti->text,
|
|
||||||
&ti->parent.bidi_props);
|
|
||||||
}
|
|
||||||
|
|
||||||
x += adv;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
x += it->w;
|
|
||||||
}
|
|
||||||
it = (Evas_Object_Textblock_Item *) EINA_INLIST_GET(it)->next;
|
it = (Evas_Object_Textblock_Item *) EINA_INLIST_GET(it)->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2375,6 +2359,7 @@ _layout_strip_trailing_whitespace(Ctxt *c, Evas_Object_Textblock_Format *fmt __U
|
||||||
ti->text, &ti->parent.bidi_props, &tw, &th);
|
ti->text, &ti->parent.bidi_props, &tw, &th);
|
||||||
it->w = tw;
|
it->w = tw;
|
||||||
it->h = th;
|
it->h = th;
|
||||||
|
it->adv = adv;
|
||||||
c->x = it->x + adv;
|
c->x = it->x + adv;
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -2516,6 +2501,7 @@ _layout_text_add_and_split_item(Ctxt *c, Evas_Object_Textblock_Format *fmt,
|
||||||
if (fmt->font.font)
|
if (fmt->font.font)
|
||||||
adv = c->ENFN->font_h_advance_get(c->ENDT, fmt->font.font,
|
adv = c->ENFN->font_h_advance_get(c->ENDT, fmt->font.font,
|
||||||
ti->text, &ti->parent.bidi_props);
|
ti->text, &ti->parent.bidi_props);
|
||||||
|
ti->parent.adv = adv;
|
||||||
c->x += adv;
|
c->x += adv;
|
||||||
c->ln->items = (Evas_Object_Textblock_Item *)
|
c->ln->items = (Evas_Object_Textblock_Item *)
|
||||||
eina_inlist_append(EINA_INLIST_GET(c->ln->items),
|
eina_inlist_append(EINA_INLIST_GET(c->ln->items),
|
||||||
|
@ -3004,7 +2990,9 @@ _layout_do_format(const Evas_Object *obj, Ctxt *c,
|
||||||
fi->vsize = vsize;
|
fi->vsize = vsize;
|
||||||
fi->size = size;
|
fi->size = size;
|
||||||
fi->formatme = 1;
|
fi->formatme = 1;
|
||||||
fi->parent.w = w;
|
fi->parent.w = fi->parent.adv = w; /* For formats items it's usually
|
||||||
|
the same, we don't handle the
|
||||||
|
special cases yet. */
|
||||||
fi->parent.h = h;
|
fi->parent.h = h;
|
||||||
fi->ascent = c->maxascent;
|
fi->ascent = c->maxascent;
|
||||||
fi->descent = c->maxdescent;
|
fi->descent = c->maxdescent;
|
||||||
|
@ -3040,7 +3028,7 @@ _layout_do_format(const Evas_Object *obj, Ctxt *c,
|
||||||
|
|
||||||
fi = _layout_format_item_add(c, n, item);
|
fi = _layout_format_item_add(c, n, item);
|
||||||
fi->parent.x = c->x;
|
fi->parent.x = c->x;
|
||||||
fi->parent.w = 0;
|
fi->parent.w = fi->parent.adv = 0;
|
||||||
_layout_line_advance(c, fmt);
|
_layout_line_advance(c, fmt);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3050,7 +3038,7 @@ _layout_do_format(const Evas_Object *obj, Ctxt *c,
|
||||||
|
|
||||||
fi = _layout_format_item_add(c, n, item);
|
fi = _layout_format_item_add(c, n, item);
|
||||||
fi->parent.x = c->x;
|
fi->parent.x = c->x;
|
||||||
fi->parent.w = 0;
|
fi->parent.w = fi->parent.adv = 0;
|
||||||
_layout_line_advance(c, fmt);
|
_layout_line_advance(c, fmt);
|
||||||
}
|
}
|
||||||
else if ((!strcmp(item, "\t")) || (!strcmp(item, "\\t")))
|
else if ((!strcmp(item, "\t")) || (!strcmp(item, "\\t")))
|
||||||
|
@ -3077,7 +3065,7 @@ _layout_do_format(const Evas_Object *obj, Ctxt *c,
|
||||||
}
|
}
|
||||||
fi = _layout_format_item_add(c, n, item);
|
fi = _layout_format_item_add(c, n, item);
|
||||||
fi->parent.x = c->x;
|
fi->parent.x = c->x;
|
||||||
fi->parent.w = x2 - c->x;
|
fi->parent.w = fi->parent.adv = x2 - c->x;
|
||||||
fi->formatme = 1;
|
fi->formatme = 1;
|
||||||
c->x = x2;
|
c->x = x2;
|
||||||
}
|
}
|
||||||
|
@ -7103,7 +7091,7 @@ _evas_textblock_range_calc_x_w(const Evas_Object_Textblock_Item *it,
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
*w = it->w - *x;
|
*w = it->adv - *x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -7112,7 +7100,7 @@ _evas_textblock_range_calc_x_w(const Evas_Object_Textblock_Item *it,
|
||||||
if (evas_bidi_is_rtl_char(&it->bidi_props, 0))
|
if (evas_bidi_is_rtl_char(&it->bidi_props, 0))
|
||||||
{
|
{
|
||||||
*x = *x + *w;
|
*x = *x + *w;
|
||||||
*w = it->w - *x;
|
*w = it->adv - *x;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -7306,7 +7294,7 @@ _evas_textblock_cursor_range_in_line_geometry_get(
|
||||||
|
|
||||||
while (it && (it != it2))
|
while (it && (it != it2))
|
||||||
{
|
{
|
||||||
max_x = it->x + it->w;
|
max_x = it->x + it->adv;
|
||||||
it = (Evas_Object_Textblock_Item *) EINA_INLIST_GET(it)->next;
|
it = (Evas_Object_Textblock_Item *) EINA_INLIST_GET(it)->next;
|
||||||
}
|
}
|
||||||
if (min_x != max_x)
|
if (min_x != max_x)
|
||||||
|
|
Loading…
Reference in New Issue