diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c index 5e1ce0bcae..cadadb5f72 100644 --- a/src/lib/edje/edje_calc.c +++ b/src/lib/edje/edje_calc.c @@ -1003,30 +1003,6 @@ _edje_recalc_table_parts(Edje *ed #endif } -// Defined in edje_textblock.c -Eina_Bool -_edje_part_textblock_style_text_set(Edje *ed, - Edje_Real_Part *ep, - Edje_Part_Description_Text *chosen_desc); - -void -_edje_recalc_textblock_style_text_set(Edje *ed) -{ - unsigned short i; - Edje_Real_Part *ep; - - for (i = 0; i < ed->table_parts_size; i++) - { - ep = ed->table_parts[i]; - - if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK) - { - _edje_part_textblock_style_text_set - (ed, ep, (Edje_Part_Description_Text *)ep->chosen_description); - } - } -} - void _edje_recalc_do(Edje *ed) { @@ -1037,14 +1013,9 @@ _edje_recalc_do(Edje *ed) #endif - //Do nothing if the edje has no size, Regardless of the edje part size calc, - //the text and style has to be set. + //Do nothing if the edje has no size, if ((EINA_UNLIKELY(!ed->has_size)) && (!ed->calc_only) && (ed->w == 0) && (ed->h == 0)) - { - _edje_recalc_textblock_style_text_set(ed); - - return; - } + return; ed->has_size = EINA_TRUE; need_calc = evas_object_smart_need_recalculate_get(ed->obj); diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c index 38de6f3c3f..2acfce3282 100644 --- a/src/lib/edje/edje_util.c +++ b/src/lib/edje/edje_util.c @@ -4,6 +4,20 @@ #include "../evas/canvas/evas_line_eo.h" #include "../evas/canvas/evas_text_eo.h" +//In implementations that gets properties for user-created edje, +//edje calculation should be performed regardless of the size of edje. +#define EDJE_RECALC_DO(ed) \ + do { \ + Eina_Bool calc_flag = EINA_FALSE; \ + if (!ed->has_size) \ + { \ + ed->has_size = EINA_TRUE; \ + calc_flag = EINA_TRUE; \ + } \ + _edje_recalc_do(ed); \ + if (calc_flag) ed->has_size = EINA_FALSE; \ + } while (0) + typedef struct _Edje_Box_Layout Edje_Box_Layout; struct _Edje_Box_Layout { @@ -1945,7 +1959,7 @@ edje_object_part_object_get(const Eo *obj, const char *part) if ((!ed) || (!part)) return NULL; /* Need to recalc before providing the object. */ - if (!ed->freeze) _edje_recalc_do(ed); + if (!ed->freeze) EDJE_RECALC_DO(ed); rp = _edje_real_part_recursive_get(&ed, part); if (!rp) return NULL; @@ -2187,7 +2201,7 @@ _edje_efl_text_text_get(const Eo *obj EINA_UNUSED, Edje *ed, const char *part, #else if (ed->dirty) #endif - _edje_recalc_do(ed); + EDJE_RECALC_DO(ed); entry = evas_object_textblock_text_markup_get(rp->object); } } @@ -2200,7 +2214,7 @@ _edje_efl_text_text_get(const Eo *obj EINA_UNUSED, Edje *ed, const char *part, #else if (ed->dirty) #endif - _edje_recalc_do(ed); + EDJE_RECALC_DO(ed); entry = efl_text_markup_get(rp->object); } else @@ -3580,7 +3594,7 @@ _efl_canvas_layout_efl_layout_group_group_size_max_get(const Eo *obj EINA_UNUSED return EINA_SIZE2D(0, 0); /* Need to recalc before providing the object. */ - if (!ed->freeze) _edje_recalc_do(ed); + if (!ed->freeze) EDJE_RECALC_DO(ed); sz = ed->collection->prop.max;