static inline void
_layout_handle_ellipsis(Ctxt *c, Evas_Object_Textblock_Item *it, Eina_List *i)
{
- Evas_Object_Textblock_Text_Item *ti, *ellip_ti;
+ Evas_Object_Textblock_Text_Item *ellip_ti;
Evas_Object_Textblock_Item *last_it;
Evas_Coord save_cx;
int wrap;
save_cx = c->x;
c->w -= ellip_ti->parent.w;
- /* If there is no enough space for ellipsis item, remove all of items */
- if (c->w <= 0)
- {
- while (c->ln->items)
- {
- last_it = _ITEM(EINA_INLIST_GET(c->ln->items)->last);
- c->ln->items = _ITEM(eina_inlist_remove(
- EINA_INLIST_GET(c->ln->items),
- EINA_INLIST_GET(last_it)));
- }
- last_it = NULL;
- }
-
- while (last_it)
+ if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
{
- if (last_it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
- {
- ti = _ITEM_TEXT(last_it);
-
- wrap = _layout_text_cutoff_get(c, last_it->format, ti);
-
- if ((wrap > 0) && !IS_AT_END(ti, (size_t) wrap))
- {
- _layout_item_text_split_strip_white(c, ti, i, wrap);
- }
- else if (wrap < 0)
- {
- break;
- }
- }
- else
- {
- /* We will ignore format items. ex) tab
- * But, if there is <item> tag and size is acceptable, we have to insert it to line. */
- if (!strncmp(_ITEM_FORMAT(last_it)->item, "item", 4) &&
- (c->w - c->o->style_pad.l - c->o->style_pad.r - c->marginl - c->marginr >= c->x + last_it->adv))
- {
- break;
- }
- }
+ Evas_Object_Textblock_Text_Item *ti = _ITEM_TEXT(it);
- if (c->ln->items && last_it != it)
+ wrap = _layout_text_cutoff_get(c, last_it->format, ti);
+ if ((wrap > 0) && !IS_AT_END(ti, (size_t) wrap))
{
- c->ln->items = _ITEM(eina_inlist_remove(
- EINA_INLIST_GET(c->ln->items),
- EINA_INLIST_GET(last_it)));
+ _layout_item_text_split_strip_white(c, ti, i, wrap);
}
-
- last_it = (c->ln->items) ? _ITEM(EINA_INLIST_GET(c->ln->items)->last) : NULL;
-
- if (last_it)
+ else if ((wrap == 0) && (c->ln->items))
{
- /* We need to renew ellipsis item.
- * Because, base format is changed to last_it.
- * We can't reuse it. */
- c->w += ellip_ti->parent.w;
- ellip_ti = _layout_ellipsis_item_new(c, last_it);
- c->w -= ellip_ti->parent.w;
- c->x -= last_it->adv;
- if (c->x < 0)
- c->x = 0;
- save_cx = c->x;
+ last_it = _ITEM(EINA_INLIST_GET(c->ln->items)->last);
}
}
+ else if (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT)
+ {
+ /* We don't want to add this format item. */
+ last_it = NULL;
+ }
c->x = save_cx;
c->w += ellip_ti->parent.w;
START_TEST(evas_textblock_wrapping)
{
Evas_Coord bw, bh, w, h, nw, nh;
- Evas_Coord ellip_w, ellip_h;
int i;
START_TB_TEST();
evas_object_textblock_text_markup_set(tb, "a");
evas_object_textblock_size_formatted_get(tb, &w, &h);
ck_assert_int_le(w, (nw / 2));
- evas_object_textblock_text_markup_set(tb, "a<b>b</b>a<b>b</b>a<b>b</b>");
- evas_textblock_cursor_format_prepend(cur, "+ font_size=50 ellipsis=1.0");
- evas_object_textblock_size_native_get(tb, &nw, &nh);
- evas_object_resize(tb, nw / 2, nh * 2);
- evas_object_textblock_size_formatted_get(tb, &w, &h);
- ck_assert_int_le(w, (nw / 2));
-
- evas_object_textblock_text_markup_set(tb, "<item absize=100x100 href=item1></item><item absize=100x100 href=item2></item>");
- evas_textblock_cursor_format_prepend(cur, "+ ellipsis=1.0");
- evas_object_resize(tb, 101, 100);
- evas_object_textblock_size_formatted_get(tb, &w, &h);
- ck_assert_int_le(w, 100);
-
- evas_object_textblock_text_markup_set(tb, "…");
- evas_object_textblock_size_native_get(tb, &ellip_w, &ellip_h);
- evas_object_textblock_text_markup_set(tb, "ab");
- evas_textblock_cursor_format_prepend(cur, "+ ellipsis=1.0");
- evas_object_textblock_size_native_get(tb, &nw, &nh);
- evas_object_resize(tb, nw / 2, nh * 2);
- evas_object_textblock_size_formatted_get(tb, &w, &h);
- ck_assert_int_le(w, ellip_w);
-
{
double ellip;
for(ellip = 0.0; ellip <= 1.0; ellip = ellip + 0.1)