edje: factorize call to eo_do to reduce eo_do_start cost.

This commit is contained in:
Cedric BAIL 2014-07-07 13:43:42 +02:00
parent 142a0ceb48
commit b95165201c
2 changed files with 67 additions and 45 deletions

View File

@ -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));
}

View File

@ -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)
{