summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hirt <hirt.danny@gmail.com>2017-08-18 14:50:36 +0300
committerDaniel Hirt <hirt.danny@gmail.com>2017-08-24 12:17:21 +0300
commite20a44b7e7284cd81db34c7c09d797155c391f04 (patch)
treee4c54d931ded478184da686ec6eb408b109e9e69
parentf696cc88933bfa1ac6e5d6da26bc9ba7b2c3e2fa (diff)
Canvas text: reduce usage of data_scope_get()
During layout, this data is unchanged and there is no need to keep asking for it.
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c176
1 files changed, 96 insertions, 80 deletions
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c
index 7002387f47..11e023432b 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -977,9 +977,9 @@ _nodes_clear(const Evas_Object *eo_obj)
977 * @param fmt the format to be cleaned, must not be NULL. 977 * @param fmt the format to be cleaned, must not be NULL.
978 */ 978 */
979static void 979static void
980_format_unref_free(const Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt) 980_format_unref_free(Evas_Object_Protected_Data *evas_o, Evas_Object_Textblock_Format *fmt)
981{ 981{
982 Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); 982 Evas_Object_Protected_Data *obj = evas_o;
983 fmt->ref--; 983 fmt->ref--;
984 if (fmt->ref > 0) return; 984 if (fmt->ref > 0) return;
985 if (fmt->font.fdesc) evas_font_desc_unref(fmt->font.fdesc); 985 if (fmt->font.fdesc) evas_font_desc_unref(fmt->font.fdesc);
@@ -1015,7 +1015,10 @@ _image_safe_unref(Evas_Public_Data *e, void *image, Eina_Bool async)
1015 * @param it the layout item to be freed 1015 * @param it the layout item to be freed
1016 */ 1016 */
1017static void 1017static void
1018_item_free(const Evas_Object *eo_obj, Evas_Object_Textblock_Line *ln, Evas_Object_Textblock_Item *it) 1018_item_free(Evas_Public_Data *evas,
1019 Efl_Canvas_Text_Data *o,
1020 Evas_Object_Protected_Data *evas_o,
1021 Evas_Object_Textblock_Line *ln, Evas_Object_Textblock_Item *it)
1019{ 1022{
1020 if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT) 1023 if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
1021 { 1024 {
@@ -1024,12 +1027,10 @@ _item_free(const Evas_Object *eo_obj, Evas_Object_Textblock_Line *ln, Evas_Objec
1024 evas_common_text_props_content_unref(&ti->text_props); 1027 evas_common_text_props_content_unref(&ti->text_props);
1025 if (EINA_UNLIKELY(ti->gfx_filter != NULL)) 1028 if (EINA_UNLIKELY(ti->gfx_filter != NULL))
1026 { 1029 {
1027 Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
1028
1029 if (ti->gfx_filter->output) 1030 if (ti->gfx_filter->output)
1030 { 1031 {
1031 Evas *eo_evas = evas_object_evas_get(eo_obj); 1032 //Evas *eo_evas = evas_object_evas_get(eo_obj);
1032 Evas_Public_Data *evas = efl_data_scope_get(eo_evas, EVAS_CANVAS_CLASS); 1033 //Evas_Public_Data *evas = efl_data_scope_get(eo_evas, EVAS_CANVAS_CLASS);
1033 Eina_Bool async = ti->gfx_filter->do_async; 1034 Eina_Bool async = ti->gfx_filter->do_async;
1034 1035
1035 _image_safe_unref(evas, ti->gfx_filter->output, async); 1036 _image_safe_unref(evas, ti->gfx_filter->output, async);
@@ -1051,7 +1052,7 @@ _item_free(const Evas_Object *eo_obj, Evas_Object_Textblock_Line *ln, Evas_Objec
1051 1052
1052 if (fi->item) eina_stringshare_del(fi->item); 1053 if (fi->item) eina_stringshare_del(fi->item);
1053 } 1054 }
1054 _format_unref_free(eo_obj, it->format); 1055 _format_unref_free(evas_o, it->format);
1055 if (ln) 1056 if (ln)
1056 { 1057 {
1057 ln->items = (Evas_Object_Textblock_Item *) eina_inlist_remove( 1058 ln->items = (Evas_Object_Textblock_Item *) eina_inlist_remove(
@@ -2843,6 +2844,8 @@ struct _Ctxt
2843{ 2844{
2844 Evas_Object *obj; 2845 Evas_Object *obj;
2845 Efl_Canvas_Text_Data *o; 2846 Efl_Canvas_Text_Data *o;
2847 Evas_Object_Protected_Data *evas_o;
2848 Evas_Public_Data *evas;
2846 2849
2847 Evas_Object_Textblock_Paragraph *paragraphs; 2850 Evas_Object_Textblock_Paragraph *paragraphs;
2848 Evas_Object_Textblock_Paragraph *par; 2851 Evas_Object_Textblock_Paragraph *par;
@@ -2884,12 +2887,11 @@ static Evas_Object_Textblock_Format_Item *_layout_do_format(const Evas_Object *o
2884 * @param fmt The format to adjust - NOT NULL. 2887 * @param fmt The format to adjust - NOT NULL.
2885 */ 2888 */
2886static void 2889static void
2887_layout_format_ascent_descent_adjust(const Evas_Object *eo_obj, 2890_layout_format_ascent_descent_adjust(Evas_Object_Protected_Data *obj,
2888 Evas_Coord *maxascent, Evas_Coord *maxdescent, 2891 Evas_Coord *maxascent, Evas_Coord *maxdescent,
2889 Evas_Object_Textblock_Format *fmt) 2892 Evas_Object_Textblock_Format *fmt)
2890{ 2893{
2891 int ascent, descent; 2894 int ascent, descent;
2892 Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
2893 2895
2894 if (fmt->font.font) 2896 if (fmt->font.font)
2895 { 2897 {
@@ -2928,7 +2930,7 @@ _layout_format_ascent_descent_adjust(const Evas_Object *eo_obj,
2928} 2930}
2929 2931
2930static void 2932static void
2931_layout_item_max_ascent_descent_calc(const Evas_Object *eo_obj, 2933_layout_item_max_ascent_descent_calc(Evas_Object_Protected_Data *obj,
2932 Evas_Coord *maxascent, Evas_Coord *maxdescent, 2934 Evas_Coord *maxascent, Evas_Coord *maxdescent,
2933 Evas_Object_Textblock_Item *it, Textblock_Position position) 2935 Evas_Object_Textblock_Item *it, Textblock_Position position)
2934{ 2936{
@@ -2954,8 +2956,6 @@ _layout_item_max_ascent_descent_calc(const Evas_Object *eo_obj,
2954 } 2956 }
2955 else 2957 else
2956 { 2958 {
2957 Evas_Object_Protected_Data *obj =
2958 efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
2959 asc = ENFN->font_max_ascent_get(ENDT, 2959 asc = ENFN->font_max_ascent_get(ENDT,
2960 it->format->font.font); 2960 it->format->font.font);
2961 } 2961 }
@@ -2976,8 +2976,6 @@ _layout_item_max_ascent_descent_calc(const Evas_Object *eo_obj,
2976 } 2976 }
2977 else 2977 else
2978 { 2978 {
2979 Evas_Object_Protected_Data *obj =
2980 efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
2981 desc = ENFN->font_max_descent_get(ENDT, 2979 desc = ENFN->font_max_descent_get(ENDT,
2982 it->format->font.font); 2980 it->format->font.font);
2983 } 2981 }
@@ -2997,7 +2995,7 @@ _layout_item_max_ascent_descent_calc(const Evas_Object *eo_obj,
2997 * @param position The position inside the textblock 2995 * @param position The position inside the textblock
2998 */ 2996 */
2999static void 2997static void
3000_layout_item_ascent_descent_adjust(const Evas_Object *eo_obj, 2998_layout_item_ascent_descent_adjust(Evas_Object_Protected_Data *obj,
3001 Evas_Coord *ascent, Evas_Coord *descent, 2999 Evas_Coord *ascent, Evas_Coord *descent,
3002 Evas_Object_Textblock_Item *it, Evas_Object_Textblock_Format *fmt) 3000 Evas_Object_Textblock_Item *it, Evas_Object_Textblock_Format *fmt)
3003{ 3001{
@@ -3029,13 +3027,11 @@ _layout_item_ascent_descent_adjust(const Evas_Object *eo_obj,
3029 { 3027 {
3030 if (fmt) 3028 if (fmt)
3031 { 3029 {
3032 Evas_Object_Protected_Data *obj =
3033 efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
3034 asc = ENFN->font_ascent_get(ENDT, fmt->font.font); 3030 asc = ENFN->font_ascent_get(ENDT, fmt->font.font);
3035 desc = ENFN->font_descent_get(ENDT, fmt->font.font); 3031 desc = ENFN->font_descent_get(ENDT, fmt->font.font);
3036 } 3032 }
3037 } 3033 }
3038 if (fmt) _layout_format_ascent_descent_adjust(eo_obj, &asc, &desc, fmt); 3034 if (fmt) _layout_format_ascent_descent_adjust(obj, &asc, &desc, fmt);
3039 3035
3040 if (asc > *ascent) *ascent = asc; 3036 if (asc > *ascent) *ascent = asc;
3041 if (desc > *descent) *descent = desc; 3037 if (desc > *descent) *descent = desc;
@@ -3215,11 +3211,10 @@ _layout_update_bidi_props(const Efl_Canvas_Text_Data *o,
3215 * Free the visual lines in the paragraph (logical items are kept) 3211 * Free the visual lines in the paragraph (logical items are kept)
3216 */ 3212 */
3217static void 3213static void
3218_paragraph_clear(const Evas_Object *obj, 3214_paragraph_clear(Evas_Public_Data *evas,
3215 Efl_Canvas_Text_Data *o, Evas_Object_Protected_Data *obj,
3219 Evas_Object_Textblock_Paragraph *par) 3216 Evas_Object_Textblock_Paragraph *par)
3220{ 3217{
3221 Efl_Canvas_Text_Data *o = efl_data_scope_get(obj, MY_CLASS);
3222
3223 while (par->lines) 3218 while (par->lines)
3224 { 3219 {
3225 Evas_Object_Textblock_Line *ln; 3220 Evas_Object_Textblock_Line *ln;
@@ -3239,7 +3234,7 @@ _paragraph_clear(const Evas_Object *obj,
3239 if (ti->parent.ln == ln) 3234 if (ti->parent.ln == ln)
3240 { 3235 {
3241 o->hyphen_items = eina_list_remove_list(o->hyphen_items, i); 3236 o->hyphen_items = eina_list_remove_list(o->hyphen_items, i);
3242 _item_free(obj, NULL, _ITEM(ti)); 3237 _item_free(evas, o, obj, NULL, _ITEM(ti));
3243 } 3238 }
3244 } 3239 }
3245 } 3240 }
@@ -3253,16 +3248,17 @@ _paragraph_clear(const Evas_Object *obj,
3253 * Free the layout paragraph and all of it's lines and logical items. 3248 * Free the layout paragraph and all of it's lines and logical items.
3254 */ 3249 */
3255static void 3250static void
3256_paragraph_free(const Evas_Object *eo_obj, Evas_Object_Textblock_Paragraph *par) 3251_paragraph_free(Evas_Public_Data *evas,
3252 Efl_Canvas_Text_Data *o, Evas_Object_Protected_Data *obj,
3253 Evas_Object_Textblock_Paragraph *par)
3257{ 3254{
3258 Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS); 3255 _paragraph_clear(evas, o, obj, par);
3259 _paragraph_clear(eo_obj, par);
3260 3256
3261 { 3257 {
3262 Evas_Object_Textblock_Item *it; 3258 Evas_Object_Textblock_Item *it;
3263 EINA_LIST_FREE(par->logical_items, it) 3259 EINA_LIST_FREE(par->logical_items, it)
3264 { 3260 {
3265 _item_free(eo_obj, NULL, it); 3261 _item_free(evas, o, obj, NULL, it);
3266 } 3262 }
3267 } 3263 }
3268#ifdef BIDI_SUPPORT 3264#ifdef BIDI_SUPPORT
@@ -3286,13 +3282,13 @@ _paragraph_free(const Evas_Object *eo_obj, Evas_Object_Textblock_Paragraph *par)
3286 * @param pars the paragraphs to clean - Not NULL. 3282 * @param pars the paragraphs to clean - Not NULL.
3287 */ 3283 */
3288static void 3284static void
3289_paragraphs_clear(const Evas_Object *eo_obj, Evas_Object_Textblock_Paragraph *pars) 3285_paragraphs_clear(Ctxt *c)
3290{ 3286{
3291 Evas_Object_Textblock_Paragraph *par; 3287 Evas_Object_Textblock_Paragraph *par;
3292 3288
3293 EINA_INLIST_FOREACH(EINA_INLIST_GET(pars), par) 3289 EINA_INLIST_FOREACH(EINA_INLIST_GET(c->paragraphs), par)
3294 { 3290 {
3295 _paragraph_clear(eo_obj, par); 3291 _paragraph_clear(c->evas, c->o, c->evas_o, par);
3296 } 3292 }
3297} 3293}
3298 3294
@@ -3302,14 +3298,13 @@ _paragraphs_clear(const Evas_Object *eo_obj, Evas_Object_Textblock_Paragraph *pa
3302 * _paragraphs_clear is that the latter keeps the logical items and the par 3298 * _paragraphs_clear is that the latter keeps the logical items and the par
3303 * items, while the former frees them as well. 3299 * items, while the former frees them as well.
3304 * 3300 *
3305 * @param obj the evas object - Not NULL. 3301 * @param c the context - Not NULL.
3306 * @param pars the paragraphs to clean - Not NULL.
3307 */ 3302 */
3308static void 3303static void
3309_paragraphs_free(const Evas_Object *eo_obj, Evas_Object_Textblock_Paragraph *pars) 3304_paragraphs_free(Evas_Public_Data *evas,
3305 Efl_Canvas_Text_Data *o, Evas_Object_Protected_Data *obj,
3306 Evas_Object_Textblock_Paragraph *pars)
3310{ 3307{
3311 Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
3312
3313 o->num_paragraphs = 0; 3308 o->num_paragraphs = 0;
3314 3309
3315 while (pars) 3310 while (pars)
@@ -3318,7 +3313,7 @@ _paragraphs_free(const Evas_Object *eo_obj, Evas_Object_Textblock_Paragraph *par
3318 3313
3319 par = (Evas_Object_Textblock_Paragraph *) pars; 3314 par = (Evas_Object_Textblock_Paragraph *) pars;
3320 pars = (Evas_Object_Textblock_Paragraph *)eina_inlist_remove(EINA_INLIST_GET(pars), EINA_INLIST_GET(par)); 3315 pars = (Evas_Object_Textblock_Paragraph *)eina_inlist_remove(EINA_INLIST_GET(pars), EINA_INLIST_GET(par));
3321 _paragraph_free(eo_obj, par); 3316 _paragraph_free(evas, o, obj, par);
3322 } 3317 }
3323} 3318}
3324 3319
@@ -3411,7 +3406,7 @@ _layout_format_pop(Ctxt *c, const char *format)
3411 if (((format[0] == '/') && !format[1]) || 3406 if (((format[0] == '/') && !format[1]) ||
3412 !format[0]) 3407 !format[0])
3413 { 3408 {
3414 _format_unref_free(c->obj, fmt); 3409 _format_unref_free(c->evas_o, fmt);
3415 c->format_stack = 3410 c->format_stack =
3416 eina_list_remove_list(c->format_stack, c->format_stack); 3411 eina_list_remove_list(c->format_stack, c->format_stack);
3417 } 3412 }
@@ -3436,13 +3431,13 @@ _layout_format_pop(Ctxt *c, const char *format)
3436 if (_FORMAT_IS_CLOSER_OF( 3431 if (_FORMAT_IS_CLOSER_OF(
3437 fmt->fnode->orig_format, format + 1, len - 1)) 3432 fmt->fnode->orig_format, format + 1, len - 1))
3438 { 3433 {
3439 _format_unref_free(c->obj, fmt); 3434 _format_unref_free(c->evas_o, fmt);
3440 break; 3435 break;
3441 } 3436 }
3442 else 3437 else
3443 { 3438 {
3444 redo_nodes = eina_list_prepend(redo_nodes, fmt->fnode); 3439 redo_nodes = eina_list_prepend(redo_nodes, fmt->fnode);
3445 _format_unref_free(c->obj, fmt); 3440 _format_unref_free(c->evas_o, fmt);
3446 } 3441 }
3447 } 3442 }
3448 } 3443 }
@@ -3640,12 +3635,11 @@ _layout_line_reorder(Evas_Object_Textblock_Line *line)
3640 3635
3641/* FIXME: doc */ 3636/* FIXME: doc */
3642static void 3637static void
3643_layout_calculate_format_item_size(const Evas_Object *eo_obj, 3638_layout_calculate_format_item_size(Evas_Object_Protected_Data *obj,
3644 const Evas_Object_Textblock_Format_Item *fi, 3639 const Evas_Object_Textblock_Format_Item *fi,
3645 Evas_Coord *maxascent, Evas_Coord *maxdescent, 3640 Evas_Coord *maxascent, Evas_Coord *maxdescent,
3646 Evas_Coord *_y, Evas_Coord *_w, Evas_Coord *_h) 3641 Evas_Coord *_y, Evas_Coord *_w, Evas_Coord *_h)
3647{ 3642{
3648 Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
3649 /* Adjust sizes according to current line height/scale */ 3643 /* Adjust sizes according to current line height/scale */
3650 Evas_Coord w, h; 3644 Evas_Coord w, h;
3651 const char *p, *s; 3645 const char *p, *s;
@@ -3759,9 +3753,9 @@ _layout_last_line_max_descent_adjust_calc(Ctxt *c, const Evas_Object_Textblock_P
3759 { 3753 {
3760 Evas_Coord asc = 0, desc = 0; 3754 Evas_Coord asc = 0, desc = 0;
3761 Evas_Coord maxasc = 0, maxdesc = 0; 3755 Evas_Coord maxasc = 0, maxdesc = 0;
3762 _layout_item_ascent_descent_adjust(c->obj, &asc, &desc, 3756 _layout_item_ascent_descent_adjust(c->evas_o, &asc, &desc,
3763 it, it->format); 3757 it, it->format);
3764 _layout_item_max_ascent_descent_calc(c->obj, &maxasc, &maxdesc, 3758 _layout_item_max_ascent_descent_calc(c->evas_o, &maxasc, &maxdesc,
3765 it, c->position); 3759 it, c->position);
3766 3760
3767 if (desc > c->descent) 3761 if (desc > c->descent)
@@ -3807,7 +3801,7 @@ _layout_line_finalize(Ctxt *c, Evas_Object_Textblock_Format *fmt)
3807 /* If there are no text items yet, calc ascent/descent 3801 /* If there are no text items yet, calc ascent/descent
3808 * according to the current format. */ 3802 * according to the current format. */
3809 if (c->ascent + c->descent == 0) 3803 if (c->ascent + c->descent == 0)
3810 _layout_item_ascent_descent_adjust(c->obj, &c->ascent, &c->descent, 3804 _layout_item_ascent_descent_adjust(c->evas_o, &c->ascent, &c->descent,
3811 NULL, fmt); 3805 NULL, fmt);
3812 3806
3813#ifdef BIDI_SUPPORT 3807#ifdef BIDI_SUPPORT
@@ -3822,7 +3816,7 @@ _layout_line_finalize(Ctxt *c, Evas_Object_Textblock_Format *fmt)
3822 { 3816 {
3823 Evas_Object_Textblock_Format_Item *fi = _ITEM_FORMAT(it); 3817 Evas_Object_Textblock_Format_Item *fi = _ITEM_FORMAT(it);
3824 if (!fi->formatme) goto loop_advance; 3818 if (!fi->formatme) goto loop_advance;
3825 _layout_calculate_format_item_size(c->obj, fi, &c->ascent, 3819 _layout_calculate_format_item_size(c->evas_o, fi, &c->ascent,
3826 &c->descent, &fi->y, &fi->parent.w, &fi->parent.h); 3820 &c->descent, &fi->y, &fi->parent.w, &fi->parent.h);
3827 fi->parent.adv = fi->parent.w; 3821 fi->parent.adv = fi->parent.w;
3828 } 3822 }
@@ -3831,9 +3825,9 @@ _layout_line_finalize(Ctxt *c, Evas_Object_Textblock_Format *fmt)
3831 Evas_Coord asc = 0, desc = 0; 3825 Evas_Coord asc = 0, desc = 0;
3832 Evas_Coord maxasc = 0, maxdesc = 0; 3826 Evas_Coord maxasc = 0, maxdesc = 0;
3833 3827
3834 _layout_item_ascent_descent_adjust(c->obj, &asc, &desc, 3828 _layout_item_ascent_descent_adjust(c->evas_o, &asc, &desc,
3835 it, it->format); 3829 it, it->format);
3836 _layout_item_max_ascent_descent_calc(c->obj, &maxasc, &maxdesc, 3830 _layout_item_max_ascent_descent_calc(c->evas_o, &maxasc, &maxdesc,
3837 it, c->position); 3831 it, c->position);
3838 3832
3839 if (asc > c->ascent) 3833 if (asc > c->ascent)
@@ -4099,7 +4093,7 @@ _layout_item_merge_and_free(Ctxt *c,
4099 item1->parent.merge = EINA_FALSE; 4093 item1->parent.merge = EINA_FALSE;
4100 item1->parent.visually_deleted = EINA_FALSE; 4094 item1->parent.visually_deleted = EINA_FALSE;
4101 4095
4102 _item_free(c->obj, NULL, _ITEM(item2)); 4096 _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(item2));
4103} 4097}
4104 4098
4105/** 4099/**
@@ -4116,7 +4110,7 @@ _text_item_update_sizes(Ctxt *c, Evas_Object_Textblock_Text_Item *ti)
4116 const Evas_Object_Textblock_Format *fmt = ti->parent.format; 4110 const Evas_Object_Textblock_Format *fmt = ti->parent.format;
4117 int shad_sz = 0, shad_dst = 0, out_sz = 0; 4111 int shad_sz = 0, shad_dst = 0, out_sz = 0;
4118 int dx = 0, minx = 0, maxx = 0, shx1, shx2; 4112 int dx = 0, minx = 0, maxx = 0, shx1, shx2;
4119 Evas_Object_Protected_Data *obj = efl_data_scope_get(c->obj, EFL_CANVAS_OBJECT_CLASS); 4113 Evas_Object_Protected_Data *obj = c->evas_o;
4120 4114
4121 if (fmt->font.font) 4115 if (fmt->font.font)
4122 { 4116 {
@@ -4860,7 +4854,7 @@ _layout_get_hyphenationwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt,
4860 } 4854 }
4861 else 4855 else
4862 { 4856 {
4863 _item_free(c->obj, NULL, _ITEM(c->hyphen_ti)); 4857 _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(c->hyphen_ti));
4864 c->hyphen_ti = NULL; 4858 c->hyphen_ti = NULL;
4865 } 4859 }
4866 } 4860 }
@@ -4965,7 +4959,7 @@ _layout_get_hyphenationwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt,
4965 /* hyphen item cleanup */ 4959 /* hyphen item cleanup */
4966 if (!found_hyphen && c->hyphen_ti) 4960 if (!found_hyphen && c->hyphen_ti)
4967 { 4961 {
4968 _item_free(c->obj, NULL, _ITEM(c->hyphen_ti)); 4962 _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(c->hyphen_ti));
4969 c->hyphen_ti = NULL; 4963 c->hyphen_ti = NULL;
4970 } 4964 }
4971 4965
@@ -5115,7 +5109,7 @@ _layout_ellipsis_item_new(Ctxt *c, const Evas_Object_Textblock_Item *cur_it)
5115 size_t len = 1; /* The length of _ellip_str */ 5109 size_t len = 1; /* The length of _ellip_str */
5116 5110
5117 /* We can free it here, cause there's only one ellipsis item per tb. */ 5111 /* We can free it here, cause there's only one ellipsis item per tb. */
5118 if (c->o->ellip_ti) _item_free(c->obj, NULL, _ITEM(c->o->ellip_ti)); 5112 if (c->o->ellip_ti) _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(c->o->ellip_ti));
5119 c->o->ellip_ti = ellip_ti = _layout_text_item_new(c, cur_it->format); 5113 c->o->ellip_ti = ellip_ti = _layout_text_item_new(c, cur_it->format);
5120 ellip_ti->parent.text_node = cur_it->text_node; 5114 ellip_ti->parent.text_node = cur_it->text_node;
5121 ellip_ti->parent.text_pos = cur_it->text_pos; 5115 ellip_ti->parent.text_pos = cur_it->text_pos;
@@ -5127,7 +5121,7 @@ _layout_ellipsis_item_new(Ctxt *c, const Evas_Object_Textblock_Item *cur_it)
5127 5121
5128 if (ellip_ti->parent.format->font.font) 5122 if (ellip_ti->parent.format->font.font)
5129 { 5123 {
5130 Evas_Object_Protected_Data *obj = efl_data_scope_get(c->obj, EFL_CANVAS_OBJECT_CLASS); 5124 Evas_Object_Protected_Data *obj = c->evas_o;
5131 /* It's only 1 char anyway, we don't need the run end. */ 5125 /* It's only 1 char anyway, we don't need the run end. */
5132 (void) ENFN->font_run_end_get(ENDT, 5126 (void) ENFN->font_run_end_get(ENDT,
5133 ellip_ti->parent.format->font.font, &script_fi, &cur_fi, 5127 ellip_ti->parent.format->font.font, &script_fi, &cur_fi,
@@ -5327,7 +5321,7 @@ _item_get_cutoff(Ctxt *c, Evas_Object_Textblock_Item *it, Evas_Coord x, Evas_Coo
5327{ 5321{
5328 int pos = -1; 5322 int pos = -1;
5329 Evas_Object_Textblock_Text_Item *ti; 5323 Evas_Object_Textblock_Text_Item *ti;
5330 Evas_Object_Protected_Data *obj = efl_data_scope_get(c->obj, EFL_CANVAS_OBJECT_CLASS); 5324 Evas_Object_Protected_Data *obj = c->evas_o;
5331 5325
5332 ti = (it->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(it) : NULL; 5326 ti = (it->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(it) : NULL;
5333 if (ti && ti->parent.format->font.font) 5327 if (ti && ti->parent.format->font.font)
@@ -5513,7 +5507,7 @@ _layout_par(Ctxt *c)
5513 { 5507 {
5514 Eina_List *itr, *itr_next; 5508 Eina_List *itr, *itr_next;
5515 Evas_Object_Textblock_Item *ititr, *prev_it = NULL; 5509 Evas_Object_Textblock_Item *ititr, *prev_it = NULL;
5516 _paragraph_clear(c->obj, c->par); 5510 _paragraph_clear(c->evas, c->o, c->evas_o, c->par);
5517 EINA_LIST_FOREACH_SAFE(c->par->logical_items, itr, itr_next, ititr) 5511 EINA_LIST_FOREACH_SAFE(c->par->logical_items, itr, itr_next, ititr)
5518 { 5512 {
5519 if (ititr->merge && prev_it && 5513 if (ititr->merge && prev_it &&
@@ -5587,7 +5581,7 @@ _layout_par(Ctxt *c)
5587 it->x = c->x; 5581 it->x = c->x;
5588 if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT) 5582 if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
5589 { 5583 {
5590 _layout_item_ascent_descent_adjust(c->obj, &c->ascent, 5584 _layout_item_ascent_descent_adjust(c->evas_o, &c->ascent,
5591 &c->descent, it, it->format); 5585 &c->descent, it, it->format);
5592 } 5586 }
5593 else 5587 else
@@ -5600,10 +5594,10 @@ _layout_par(Ctxt *c)
5600 /* If there are no text items yet, calc ascent/descent 5594 /* If there are no text items yet, calc ascent/descent
5601 * according to the current format. */ 5595 * according to the current format. */
5602 if (c->ascent + c->descent == 0) 5596 if (c->ascent + c->descent == 0)
5603 _layout_item_ascent_descent_adjust(c->obj, &c->ascent, 5597 _layout_item_ascent_descent_adjust(c->evas_o, &c->ascent,
5604 &c->descent, it, it->format); 5598 &c->descent, it, it->format);
5605 5599
5606 _layout_calculate_format_item_size(c->obj, fi, &c->ascent, 5600 _layout_calculate_format_item_size(c->evas_o, fi, &c->ascent,
5607 &c->descent, &fi->y, &fi->parent.w, &fi->parent.h); 5601 &c->descent, &fi->y, &fi->parent.w, &fi->parent.h);
5608 fi->parent.adv = fi->parent.w; 5602 fi->parent.adv = fi->parent.w;
5609 } 5603 }
@@ -5633,14 +5627,14 @@ _layout_par(Ctxt *c)
5633 { 5627 {
5634 int ascent = 0, descent = 0, maxasc = 0, maxdesc = 0; 5628 int ascent = 0, descent = 0, maxasc = 0, maxdesc = 0;
5635 5629
5636 _layout_item_ascent_descent_adjust(c->obj, &ascent, &descent, 5630 _layout_item_ascent_descent_adjust(c->evas_o, &ascent, &descent,
5637 it, it->format); 5631 it, it->format);
5638 5632
5639 if (c->position == TEXTBLOCK_POSITION_START) 5633 if (c->position == TEXTBLOCK_POSITION_START)
5640 _layout_item_max_ascent_descent_calc(c->obj, &maxasc, &maxdesc, 5634 _layout_item_max_ascent_descent_calc(c->evas_o, &maxasc, &maxdesc,
5641 it, TEXTBLOCK_POSITION_SINGLE); 5635 it, TEXTBLOCK_POSITION_SINGLE);
5642 else 5636 else
5643 _layout_item_max_ascent_descent_calc(c->obj, &maxasc, &maxdesc, 5637 _layout_item_max_ascent_descent_calc(c->evas_o, &maxasc, &maxdesc,
5644 it, TEXTBLOCK_POSITION_END); 5638 it, TEXTBLOCK_POSITION_END);
5645 5639
5646 if (ascent > maxasc) maxasc = ascent; 5640 if (ascent > maxasc) maxasc = ascent;
@@ -6062,7 +6056,7 @@ static void
6062_layout_text_append_item_free(Ctxt *c, Layout_Text_Append_Queue *item) 6056_layout_text_append_item_free(Ctxt *c, Layout_Text_Append_Queue *item)
6063{ 6057{
6064 if (item->format) 6058 if (item->format)
6065 _format_unref_free(c->obj, item->format); 6059 _format_unref_free(c->evas_o, item->format);
6066 free(item); 6060 free(item);
6067} 6061}
6068 6062
@@ -6141,7 +6135,7 @@ _layout_pre(Ctxt *c, int *style_pad_l, int *style_pad_r, int *style_pad_t,
6141 c->paragraphs = (Evas_Object_Textblock_Paragraph *) 6135 c->paragraphs = (Evas_Object_Textblock_Paragraph *)
6142 eina_inlist_remove(EINA_INLIST_GET(c->paragraphs), 6136 eina_inlist_remove(EINA_INLIST_GET(c->paragraphs),
6143 EINA_INLIST_GET(c->par)); 6137 EINA_INLIST_GET(c->par));
6144 _paragraph_free(eo_obj, c->par); 6138 _paragraph_free(c->evas, c->o, c->evas_o, c->par);
6145 6139
6146 c->par = tmp_par; 6140 c->par = tmp_par;
6147 } 6141 }
@@ -6157,7 +6151,7 @@ _layout_pre(Ctxt *c, int *style_pad_l, int *style_pad_r, int *style_pad_t,
6157 c->paragraphs = (Evas_Object_Textblock_Paragraph *) 6151 c->paragraphs = (Evas_Object_Textblock_Paragraph *)
6158 eina_inlist_remove(EINA_INLIST_GET(c->paragraphs), 6152 eina_inlist_remove(EINA_INLIST_GET(c->paragraphs),
6159 EINA_INLIST_GET(prev_par)); 6153 EINA_INLIST_GET(prev_par));
6160 _paragraph_free(eo_obj, prev_par); 6154 _paragraph_free(c->evas, c->o, c->evas_o, prev_par);
6161 } 6155 }
6162 else 6156 else
6163 { 6157 {
@@ -6231,7 +6225,7 @@ _layout_pre(Ctxt *c, int *style_pad_l, int *style_pad_r, int *style_pad_t,
6231 _layout_text_append_commit(c, &queue, n, rel); 6225 _layout_text_append_commit(c, &queue, n, rel);
6232 } 6226 }
6233 6227
6234 _format_unref_free(c->obj, pfmt); 6228 _format_unref_free(c->evas_o, pfmt);
6235 6229
6236 if ((c->have_underline2) || (c->have_underline)) 6230 if ((c->have_underline2) || (c->have_underline))
6237 { 6231 {
@@ -6279,7 +6273,7 @@ _layout_pre(Ctxt *c, int *style_pad_l, int *style_pad_r, int *style_pad_t,
6279 c->paragraphs = (Evas_Object_Textblock_Paragraph *) 6273 c->paragraphs = (Evas_Object_Textblock_Paragraph *)
6280 eina_inlist_remove(EINA_INLIST_GET(c->paragraphs), 6274 eina_inlist_remove(EINA_INLIST_GET(c->paragraphs),
6281 EINA_INLIST_GET(c->par)); 6275 EINA_INLIST_GET(c->par));
6282 _paragraph_free(eo_obj, c->par); 6276 _paragraph_free(c->evas, c->o, c->evas_o, c->par);
6283 6277
6284 c->par = tmp_par; 6278 c->par = tmp_par;
6285 } 6279 }
@@ -6312,6 +6306,7 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret)
6312 Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); 6306 Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
6313 Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS); 6307 Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
6314 Ctxt ctxt, *c; 6308 Ctxt ctxt, *c;
6309 Evas *eo_e;
6315 int style_pad_l = 0, style_pad_r = 0, style_pad_t = 0, style_pad_b = 0; 6310 int style_pad_l = 0, style_pad_r = 0, style_pad_t = 0, style_pad_b = 0;
6316 6311
6317 LYDBG("ZZ: layout %p %4ix%4i | w=%4i | last_w=%4i --- '%s'\n", eo_obj, w, h, obj->cur->geometry.w, o->last_w, o->markup_text); 6312 LYDBG("ZZ: layout %p %4ix%4i | w=%4i | last_w=%4i --- '%s'\n", eo_obj, w, h, obj->cur->geometry.w, o->last_w, o->markup_text);
@@ -6346,6 +6341,11 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret)
6346 _layout_obstacles_update(c); 6341 _layout_obstacles_update(c);
6347 c->handle_obstacles = EINA_TRUE; 6342 c->handle_obstacles = EINA_TRUE;
6348 } 6343 }
6344
6345 c->evas_o = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
6346 eo_e = evas_object_evas_get(eo_obj);
6347 c->evas = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
6348
6349 /* Start of logical layout creation */ 6349 /* Start of logical layout creation */
6350 /* setup default base style */ 6350 /* setup default base style */
6351 { 6351 {
@@ -6446,7 +6446,7 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret)
6446 while (c->par) 6446 while (c->par)
6447 { 6447 {
6448 c->par->visible = 0; 6448 c->par->visible = 0;
6449 _paragraph_clear(c->obj, c->par); 6449 _paragraph_clear(c->evas, c->o, c->evas_o, c->par);
6450 c->par = (Evas_Object_Textblock_Paragraph *) 6450 c->par = (Evas_Object_Textblock_Paragraph *)
6451 EINA_INLIST_GET(c->par)->next; 6451 EINA_INLIST_GET(c->par)->next;
6452 } 6452 }
@@ -6469,7 +6469,7 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret)
6469 { 6469 {
6470 c->fmt = c->format_stack->data; 6470 c->fmt = c->format_stack->data;
6471 c->format_stack = eina_list_remove_list(c->format_stack, c->format_stack); 6471 c->format_stack = eina_list_remove_list(c->format_stack, c->format_stack);
6472 _format_unref_free(c->obj, c->fmt); 6472 _format_unref_free(c->evas_o, c->fmt);
6473 } 6473 }
6474 6474
6475 if (w_ret) *w_ret = c->wmax; 6475 if (w_ret) *w_ret = c->wmax;
@@ -6493,7 +6493,7 @@ _layout(const Evas_Object *eo_obj, int w, int h, int *w_ret, int *h_ret)
6493 o->style_pad.r = style_pad_r; 6493 o->style_pad.r = style_pad_r;
6494 o->style_pad.t = style_pad_t; 6494 o->style_pad.t = style_pad_t;
6495 o->style_pad.b = style_pad_b; 6495 o->style_pad.b = style_pad_b;
6496 _paragraphs_clear(eo_obj, c->paragraphs); 6496 _paragraphs_clear(c);
6497 LYDBG("ZZ: ... layout #2\n"); 6497 LYDBG("ZZ: ... layout #2\n");
6498 _layout(eo_obj, w, h, w_ret, h_ret); 6498 _layout(eo_obj, w, h, w_ret, h_ret);
6499 efl_event_callback_call((Eo *) eo_obj, EFL_CANVAS_TEXT_EVENT_STYLE_INSETS_CHANGED, NULL); 6499 efl_event_callback_call((Eo *) eo_obj, EFL_CANVAS_TEXT_EVENT_STYLE_INSETS_CHANGED, NULL);
@@ -8083,7 +8083,7 @@ _layout_hyphen_item_new(Ctxt *c, const Evas_Object_Textblock_Text_Item *cur_ti)
8083 8083
8084 if (c->hyphen_ti) 8084 if (c->hyphen_ti)
8085 { 8085 {
8086 _item_free(c->obj, NULL, _ITEM(c->hyphen_ti)); 8086 _item_free(c->evas, c->o, c->evas_o, NULL, _ITEM(c->hyphen_ti));
8087 } 8087 }
8088 c->hyphen_ti = hyphen_ti = _layout_text_item_new(c, cur_ti->parent.format); 8088 c->hyphen_ti = hyphen_ti = _layout_text_item_new(c, cur_ti->parent.format);
8089 hyphen_ti->parent.text_node = cur_ti->parent.text_node; 8089 hyphen_ti->parent.text_node = cur_ti->parent.text_node;
@@ -8096,7 +8096,7 @@ _layout_hyphen_item_new(Ctxt *c, const Evas_Object_Textblock_Text_Item *cur_ti)
8096 8096
8097 if (hyphen_ti->parent.format->font.font) 8097 if (hyphen_ti->parent.format->font.font)
8098 { 8098 {
8099 Evas_Object_Protected_Data *obj = efl_data_scope_get(c->obj, EFL_CANVAS_OBJECT_CLASS); 8099 Evas_Object_Protected_Data *obj = c->evas_o;
8100 /* It's only 1 char anyway, we don't need the run end. */ 8100 /* It's only 1 char anyway, we don't need the run end. */
8101 (void) ENFN->font_run_end_get(ENDT, 8101 (void) ENFN->font_run_end_get(ENDT,
8102 hyphen_ti->parent.format->font.font, &script_fi, &cur_fi, 8102 hyphen_ti->parent.format->font.font, &script_fi, &cur_fi,
@@ -12528,13 +12528,17 @@ _evas_object_textblock_clear(Evas_Object *eo_obj)
12528 Eina_List *l; 12528 Eina_List *l;
12529 Efl_Text_Cursor_Cursor *cur; 12529 Efl_Text_Cursor_Cursor *cur;
12530 Efl_Text_Cursor_Cursor *co; 12530 Efl_Text_Cursor_Cursor *co;
12531 Evas *eo_e;
12532 Evas_Public_Data *evas;
12531 12533
12532 Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); 12534 Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
12535 eo_e = evas_object_evas_get(eo_obj);
12536 evas = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
12533 evas_object_async_block(obj); 12537 evas_object_async_block(obj);
12534 Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS); 12538 Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
12535 if (o->paragraphs) 12539 if (o->paragraphs)
12536 { 12540 {
12537 _paragraphs_free(eo_obj, o->paragraphs); 12541 _paragraphs_free(evas, o, obj, o->paragraphs);
12538 o->paragraphs = NULL; 12542 o->paragraphs = NULL;
12539 } 12543 }
12540 12544
@@ -12636,6 +12640,8 @@ _size_native_calc_line_finalize(const Evas_Object *eo_obj,
12636 Evas_Object_Textblock_Item *it, *last_it = NULL; 12640 Evas_Object_Textblock_Item *it, *last_it = NULL;
12637 Eina_List *i; 12641 Eina_List *i;
12638 Eina_Bool is_bidi = EINA_FALSE; 12642 Eina_Bool is_bidi = EINA_FALSE;
12643 Evas_Object_Protected_Data *obj =
12644 efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
12639 12645
12640 it = eina_list_data_get(items); 12646 it = eina_list_data_get(items);
12641 *w = 0; 12647 *w = 0;
@@ -12647,7 +12653,7 @@ _size_native_calc_line_finalize(const Evas_Object *eo_obj,
12647 * according to the current format. */ 12653 * according to the current format. */
12648 if (it->format) 12654 if (it->format)
12649 { 12655 {
12650 _layout_item_ascent_descent_adjust(eo_obj, &asc, &desc, 12656 _layout_item_ascent_descent_adjust(obj, &asc, &desc,
12651 it, it->format); 12657 it, it->format);
12652 } 12658 }
12653 12659
@@ -12683,15 +12689,15 @@ _size_native_calc_line_finalize(const Evas_Object *eo_obj,
12683 12689
12684 Evas_Object_Textblock_Format_Item *fi = _ITEM_FORMAT(it); 12690 Evas_Object_Textblock_Format_Item *fi = _ITEM_FORMAT(it);
12685 if (!fi->formatme) goto loop_advance; 12691 if (!fi->formatme) goto loop_advance;
12686 _layout_calculate_format_item_size(eo_obj, fi, ascent, 12692 _layout_calculate_format_item_size(obj, fi, ascent,
12687 descent, &fy, &fw, &fh); 12693 descent, &fy, &fw, &fh);
12688 } 12694 }
12689 else 12695 else
12690 { 12696 {
12691 Evas_Coord maxasc = 0, maxdesc = 0; 12697 Evas_Coord maxasc = 0, maxdesc = 0;
12692 _layout_item_ascent_descent_adjust(eo_obj, ascent, descent, 12698 _layout_item_ascent_descent_adjust(obj, ascent, descent,
12693 it, it->format); 12699 it, it->format);
12694 _layout_item_max_ascent_descent_calc(eo_obj, &maxasc, &maxdesc, 12700 _layout_item_max_ascent_descent_calc(obj, &maxasc, &maxdesc,
12695 it, position); 12701 it, position);
12696 12702
12697 if (maxasc > *ascent) 12703 if (maxasc > *ascent)
@@ -12725,6 +12731,8 @@ _size_native_calc_paragraph_size(const Evas_Object *eo_obj,
12725 Evas_Object_Textblock_Item *it; 12731 Evas_Object_Textblock_Item *it;
12726 Eina_List *line_items = NULL; 12732 Eina_List *line_items = NULL;
12727 Evas_Coord w = 0, y = 0, wmax = 0, h = 0, ascent = 0, descent = 0; 12733 Evas_Coord w = 0, y = 0, wmax = 0, h = 0, ascent = 0, descent = 0;
12734 Evas_Object_Protected_Data *obj =
12735 efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
12728 12736
12729#ifdef BIDI_SUPPORT 12737#ifdef BIDI_SUPPORT
12730 if (par->is_bidi) 12738 if (par->is_bidi)
@@ -12759,16 +12767,16 @@ _size_native_calc_paragraph_size(const Evas_Object *eo_obj,
12759 /* If there are no text items yet, calc ascent/descent 12767 /* If there are no text items yet, calc ascent/descent
12760 * according to the current format. */ 12768 * according to the current format. */
12761 if ((ascent + descent) == 0) 12769 if ((ascent + descent) == 0)
12762 _layout_item_ascent_descent_adjust(eo_obj, &ascent, 12770 _layout_item_ascent_descent_adjust(obj, &ascent,
12763 &descent, it, it->format); 12771 &descent, it, it->format);
12764 12772
12765 _layout_calculate_format_item_size(eo_obj, fi, &ascent, 12773 _layout_calculate_format_item_size(obj, fi, &ascent,
12766 &descent, &fy, &fw, &fh); 12774 &descent, &fy, &fw, &fh);
12767 } 12775 }
12768 } 12776 }
12769 else 12777 else
12770 { 12778 {
12771 _layout_item_ascent_descent_adjust(eo_obj, &ascent, 12779 _layout_item_ascent_descent_adjust(obj, &ascent,
12772 &descent, it, it->format); 12780 &descent, it, it->format);
12773 } 12781 }
12774 } 12782 }
@@ -12928,6 +12936,7 @@ static void
12928evas_object_textblock_free(Evas_Object *eo_obj) 12936evas_object_textblock_free(Evas_Object *eo_obj)
12929{ 12937{
12930 Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS); 12938 Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
12939 Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
12931 Efl_Canvas_Text_Filter_Program *prg; 12940 Efl_Canvas_Text_Filter_Program *prg;
12932 Evas_Filter_Data_Binding *db; 12941 Evas_Filter_Data_Binding *db;
12933 12942
@@ -12964,7 +12973,14 @@ evas_object_textblock_free(Evas_Object *eo_obj)
12964 free(cur); 12973 free(cur);
12965 } 12974 }
12966 if (o->repch) eina_stringshare_del(o->repch); 12975 if (o->repch) eina_stringshare_del(o->repch);
12967 if (o->ellip_ti) _item_free(eo_obj, NULL, _ITEM(o->ellip_ti)); 12976 if (o->ellip_ti)
12977 {
12978 Evas *eo_e;
12979 Evas_Public_Data *evas;
12980 eo_e = evas_object_evas_get(eo_obj);
12981 evas = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
12982 _item_free(evas, o, obj, NULL, _ITEM(o->ellip_ti));
12983 }
12968 if (o->bidi_delimiters) eina_stringshare_del(o->bidi_delimiters); 12984 if (o->bidi_delimiters) eina_stringshare_del(o->bidi_delimiters);
12969 _format_command_shutdown(); 12985 _format_command_shutdown();
12970 12986