forked from enlightenment/efl
Evas textblock: Move ellipsis handling to a different function.
SVN revision: 59272
This commit is contained in:
parent
6d14277c6d
commit
47a59417d2
|
@ -3214,6 +3214,79 @@ _layout_ellipsis_item_new(Ctxt *c, const Evas_Object_Textblock_Item *cur_it)
|
||||||
return ellip_ti;
|
return ellip_ti;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internel
|
||||||
|
* Handle ellipsis
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
_layout_handle_ellipsis(Ctxt *c, Evas_Object_Textblock_Item *it, Eina_List *i)
|
||||||
|
{
|
||||||
|
Evas_Object_Textblock_Text_Item *ellip_ti, *last_ti;
|
||||||
|
Evas_Object_Textblock_Item *last_it;
|
||||||
|
Evas_Coord save_cx;
|
||||||
|
int wrap;
|
||||||
|
ellip_ti = _layout_ellipsis_item_new(c, it);
|
||||||
|
last_it = it;
|
||||||
|
last_ti = _ITEM_TEXT(it);
|
||||||
|
|
||||||
|
save_cx = c->x;
|
||||||
|
c->w -= ellip_ti->parent.w;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
wrap = _layout_text_cutoff_get(c, last_it->format,
|
||||||
|
last_ti);
|
||||||
|
if ((wrap > 0) && !IS_AT_END(last_ti, (size_t) wrap))
|
||||||
|
{
|
||||||
|
_layout_item_text_split_strip_white(c, last_ti, i, wrap);
|
||||||
|
}
|
||||||
|
else if (wrap == 0)
|
||||||
|
{
|
||||||
|
if (!c->ln->items)
|
||||||
|
break;
|
||||||
|
/* We haven't added it yet at this point */
|
||||||
|
if (_ITEM(last_ti) != it)
|
||||||
|
{
|
||||||
|
last_it =
|
||||||
|
_ITEM(EINA_INLIST_GET(last_it)->prev);
|
||||||
|
c->ln->items = _ITEM(eina_inlist_remove(
|
||||||
|
EINA_INLIST_GET(c->ln->items),
|
||||||
|
EINA_INLIST_GET(_ITEM(last_ti))));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last_it =
|
||||||
|
_ITEM(EINA_INLIST_GET(c->ln->items)->last);
|
||||||
|
}
|
||||||
|
last_ti = _ITEM_TEXT(last_it);
|
||||||
|
if (last_it)
|
||||||
|
{
|
||||||
|
c->x -= last_it->adv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (last_it && (wrap == 0));
|
||||||
|
c->x = save_cx;
|
||||||
|
c->w += ellip_ti->parent.w;
|
||||||
|
/* If we should add this item, do it */
|
||||||
|
if (last_it == it)
|
||||||
|
{
|
||||||
|
c->ln->items = (Evas_Object_Textblock_Item *)
|
||||||
|
eina_inlist_append(EINA_INLIST_GET(c->ln->items),
|
||||||
|
EINA_INLIST_GET(it));
|
||||||
|
if (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT)
|
||||||
|
{
|
||||||
|
Evas_Object_Textblock_Format_Item *fi;
|
||||||
|
fi = _ITEM_FORMAT(it);
|
||||||
|
fi->y = c->y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c->ln->items = (Evas_Object_Textblock_Item *)
|
||||||
|
eina_inlist_append(EINA_INLIST_GET(c->ln->items),
|
||||||
|
EINA_INLIST_GET(_ITEM(ellip_ti)));
|
||||||
|
c->ln->ellip_ti = ellip_ti;
|
||||||
|
_layout_line_finalize(c, ellip_ti->parent.format);
|
||||||
|
}
|
||||||
|
|
||||||
/* 0 means go ahead, 1 means break without an error, 2 means
|
/* 0 means go ahead, 1 means break without an error, 2 means
|
||||||
* break with an error, should probably clean this a bit (enum/macro)
|
* break with an error, should probably clean this a bit (enum/macro)
|
||||||
* FIXME ^ */
|
* FIXME ^ */
|
||||||
|
@ -3310,72 +3383,7 @@ _layout_visualize_par(Ctxt *c)
|
||||||
(2 * it->h + c->y >
|
(2 * it->h + c->y >
|
||||||
c->h - c->o->style_pad.t - c->o->style_pad.b))
|
c->h - c->o->style_pad.t - c->o->style_pad.b))
|
||||||
{
|
{
|
||||||
Evas_Object_Textblock_Text_Item *ellip_ti, *last_ti;
|
_layout_handle_ellipsis(c, it, i);
|
||||||
Evas_Object_Textblock_Item *last_it;
|
|
||||||
Evas_Coord save_cx;
|
|
||||||
int wrap;
|
|
||||||
ellip_ti = _layout_ellipsis_item_new(c, it);
|
|
||||||
last_it = it;
|
|
||||||
last_ti = _ITEM_TEXT(it);
|
|
||||||
|
|
||||||
save_cx = c->x;
|
|
||||||
c->w -= ellip_ti->parent.w;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
wrap = _layout_text_cutoff_get(c, last_it->format,
|
|
||||||
last_ti);
|
|
||||||
if ((wrap > 0) && !IS_AT_END(last_ti, (size_t) wrap))
|
|
||||||
{
|
|
||||||
_layout_item_text_split_strip_white(c, last_ti, i,
|
|
||||||
wrap);
|
|
||||||
}
|
|
||||||
else if (wrap == 0)
|
|
||||||
{
|
|
||||||
if (!c->ln->items)
|
|
||||||
break;
|
|
||||||
/* We haven't added it yet at this point */
|
|
||||||
if (_ITEM(last_ti) != it)
|
|
||||||
{
|
|
||||||
last_it =
|
|
||||||
_ITEM(EINA_INLIST_GET(last_it)->prev);
|
|
||||||
c->ln->items = _ITEM(eina_inlist_remove(
|
|
||||||
EINA_INLIST_GET(c->ln->items),
|
|
||||||
EINA_INLIST_GET(_ITEM(last_ti))));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
last_it =
|
|
||||||
_ITEM(EINA_INLIST_GET(c->ln->items)->last);
|
|
||||||
}
|
|
||||||
last_ti = _ITEM_TEXT(last_it);
|
|
||||||
if (last_it)
|
|
||||||
{
|
|
||||||
c->x -= last_it->adv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (last_it && (wrap == 0));
|
|
||||||
c->x = save_cx;
|
|
||||||
c->w += ellip_ti->parent.w;
|
|
||||||
/* If we should add this item, do it */
|
|
||||||
if (last_it == it)
|
|
||||||
{
|
|
||||||
c->ln->items = (Evas_Object_Textblock_Item *)
|
|
||||||
eina_inlist_append(EINA_INLIST_GET(c->ln->items),
|
|
||||||
EINA_INLIST_GET(it));
|
|
||||||
if (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT)
|
|
||||||
{
|
|
||||||
Evas_Object_Textblock_Format_Item *fi;
|
|
||||||
fi = _ITEM_FORMAT(it);
|
|
||||||
fi->y = c->y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
c->ln->items = (Evas_Object_Textblock_Item *)
|
|
||||||
eina_inlist_append(EINA_INLIST_GET(c->ln->items),
|
|
||||||
EINA_INLIST_GET(_ITEM(ellip_ti)));
|
|
||||||
c->ln->ellip_ti = ellip_ti;
|
|
||||||
_layout_line_finalize(c, ellip_ti->parent.format);
|
|
||||||
|
|
||||||
ret = 1;
|
ret = 1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue