From b95165201c89cdc304c0dcfaff9b0eaa9ad5e562 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 7 Jul 2014 13:43:42 +0200 Subject: [PATCH] edje: factorize call to eo_do to reduce eo_do_start cost. --- src/lib/edje/edje_text.c | 110 +++++++++++++++++++++++---------------- src/lib/edje/edje_util.c | 2 +- 2 files changed, 67 insertions(+), 45 deletions(-) diff --git a/src/lib/edje/edje_text.c b/src/lib/edje/edje_text.c index d791c8ffe1..7d53301b9e 100644 --- a/src/lib/edje/edje_text.c +++ b/src/lib/edje/edje_text.c @@ -18,7 +18,7 @@ static inline void part_get_geometry(Edje_Real_Part *rp, Evas_Coord *w, Evas_Coord *h) { if (!rp->part->use_alternate_font_metrics) - evas_object_geometry_get(rp->object, NULL, NULL, w, h); + eo_do(rp->object, evas_obj_size_get(w, h)); else { if (w) *w = evas_object_text_horiz_advance_get(rp->object); @@ -286,24 +286,31 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, ep->typedata.text->cache.in_size = size; if (chosen_desc->text.fit_x && (ep->typedata.text->cache.in_str && eina_stringshare_strlen(ep->typedata.text->cache.in_str) > 0)) { - if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); - else evas_object_text_font_source_set(ep->object, NULL); - - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); eo_do(ep->object, - evas_obj_text_font_set(font, size), + + if (inlined_font) evas_obj_text_font_source_set(ed->path); + else evas_obj_text_font_source_set(NULL); + + if (ep->part->scale) evas_obj_scale_set(TO_DOUBLE(sc)); + + evas_obj_text_font_set(font, size); evas_obj_text_set(text)); + part_get_geometry(ep, &tw, &th); /* Find the wanted font size */ if ((tw != sw) && (size > 0) && (tw != 0)) { size = (size * sw) / tw; - if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); - else evas_object_text_font_source_set(ep->object, NULL); + eo_do(ep->object, + + if (inlined_font) evas_obj_text_font_source_set(ed->path); + else evas_obj_text_font_source_set(NULL); + + if (ep->part->scale) evas_obj_scale_set(TO_DOUBLE(sc)); + + evas_obj_text_font_set(font, size)); - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); - evas_object_text_font_set(ep->object, font, size); part_get_geometry(ep, &tw, &th); } @@ -319,12 +326,14 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, */ if (!chosen_desc->text.fit_x) size = sh; - if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); - else evas_object_text_font_source_set(ep->object, NULL); - - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); eo_do(ep->object, - evas_obj_text_font_set(font, size), + + if (inlined_font) evas_obj_text_font_source_set(ed->path); + else evas_obj_text_font_source_set(NULL); + + if (ep->part->scale) evas_obj_scale_set(TO_DOUBLE(sc)); + + evas_obj_text_font_set(font, size); evas_obj_text_set(text)); part_get_geometry(ep, &tw, &th); @@ -341,11 +350,15 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, { size += dif; if (size <= 0) break; - if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); - else evas_object_text_font_source_set(ep->object, NULL); - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); - evas_object_text_font_set(ep->object, font, size); + eo_do(ep->object, + + if (inlined_font) evas_obj_text_font_source_set(ed->path); + else evas_obj_text_font_source_set(NULL); + + if (ep->part->scale) evas_obj_scale_set(TO_DOUBLE(sc)); + evas_obj_text_font_set(font, size)); + part_get_geometry(ep, &tw, &th); if ((size > 0) && (th == 0)) break; } @@ -355,8 +368,10 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, { int current; - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); - evas_object_text_font_set(ep->object, font, 10); + eo_do(ep->object, + if (ep->part->scale) evas_obj_scale_set(TO_DOUBLE(sc)); + evas_obj_text_font_set(font, 10)); + part_get_geometry(ep, &tw, &th); if (th == sh) @@ -375,8 +390,10 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, { current = (top + bottom) / 2; - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); - evas_object_text_font_set(ep->object, font, current); + eo_do(ep->object, + if (ep->part->scale) evas_obj_scale_set(TO_DOUBLE(sc)); + evas_obj_text_font_set(font, current)); + part_get_geometry(ep, &tw, &th); if (th < sh) bottom = current + 1; @@ -389,8 +406,10 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, { current++; - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); - evas_object_text_font_set(ep->object, font, current); + eo_do(ep->object, + if (ep->part->scale) evas_obj_scale_set(TO_DOUBLE(sc)); + evas_obj_text_font_set(font, current)); + part_get_geometry(ep, &tw, &th); } while (th <= sh); size = current - 1; @@ -409,8 +428,9 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, /* Handle ellipsis */ if (!chosen_desc->text.min_x) { - if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); - else evas_object_text_font_source_set(ep->object, NULL); + eo_do(ep->object, + if (inlined_font) evas_obj_text_font_source_set(ed->path); + else evas_obj_text_font_source_set(NULL)); text = _edje_text_fit_x(ed, ep, params, text, font, size, @@ -451,24 +471,27 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, ep->typedata.text->cache.fit_y = chosen_desc->text.fit_y; arrange_text: - if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); - else evas_object_text_font_source_set(ep->object, NULL); - - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); eo_do(ep->object, + if (inlined_font) evas_obj_text_font_source_set(ed->path); + else evas_obj_text_font_source_set(NULL); + + if (ep->part->scale) evas_obj_scale_set(TO_DOUBLE(sc)); + evas_obj_text_font_set(font, size), evas_obj_text_set(text)); part_get_geometry(ep, &tw, &th); /* filters */ - EINA_LIST_FOREACH(prev_sources, li, source_name) - eo_do(ep->object, evas_obj_text_filter_source_set(source_name, NULL)); - EINA_LIST_FOREACH(filter_sources, li, source_name) - { - Edje_Real_Part *rp = _edje_real_part_get(ed, source_name); - eo_do(ep->object, evas_obj_text_filter_source_set(source_name, rp ? rp->object : NULL)); - } - eo_do(ep->object, evas_obj_text_filter_program_set(filter)); + eo_do(ep->object, + EINA_LIST_FOREACH(prev_sources, li, source_name) + evas_obj_text_filter_source_set(source_name, NULL); + + EINA_LIST_FOREACH(filter_sources, li, source_name) + { + Edje_Real_Part *rp = _edje_real_part_get(ed, source_name); + evas_obj_text_filter_source_set(source_name, rp ? rp->object : NULL); + }; + evas_obj_text_filter_program_set(filter)); /* Handle alignment */ { @@ -495,12 +518,11 @@ arrange_text: if (!calc_only) { - evas_object_move(ep->object, - ed->x + TO_INT(params->eval.x) + ep->typedata.text->offset.x, - ed->y + TO_INT(params->eval.y) + ep->typedata.text->offset.y); + eo_do(ep->object, + evas_obj_position_set(ed->x + TO_INT(params->eval.x) + ep->typedata.text->offset.x, + ed->y + TO_INT(params->eval.y) + ep->typedata.text->offset.y); - if (params->visible) evas_object_show(ep->object); - else evas_object_hide(ep->object); + evas_obj_visibility_set(params->visible)); } diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c index fe78a422f6..795b3961e0 100644 --- a/src/lib/edje/edje_util.c +++ b/src/lib/edje/edje_util.c @@ -4653,7 +4653,7 @@ _edje_real_part_recursive_get_helper(Edje **ed, char **path) } } -/* Private Routines */ +/* Private Routines - do not call eo_do inside this one */ Edje_Real_Part * _edje_real_part_get(const Edje *ed, const char *part) {