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
* break with an error, should probably clean this a bit (enum/macro)
* FIXME ^ */
(2 * it->h + c->y >
c->h - c->o->style_pad.t - c->o->style_pad.b))
{
- 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);
-
+ _layout_handle_ellipsis(c, it, i);
ret = 1;
goto end;
}