From 07a8d6a5da40516323d518254bd8be3ae9561c2f Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Mon, 29 Feb 2016 18:41:28 +0900 Subject: [PATCH] Edje calc: Simplify code readability with eo_do This removes an absolutely crazy use of eo_do where all calls to the efl_gfx_filter functions where factorized in an unreadable manner. Hopefully eo_do will disappear soon. --- src/lib/edje/edje_calc.c | 240 +++++++++++++++++++-------------------- 1 file changed, 119 insertions(+), 121 deletions(-) diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c index ea416c9170..7a0fbcee13 100644 --- a/src/lib/edje/edje_calc.c +++ b/src/lib/edje/edje_calc.c @@ -2588,129 +2588,127 @@ _edje_part_recalc_single_filter(Edje *ed, prev_sources = NULL; } - eo_do(obj, - /* pass extra data items */ - if (filter->data) - { - unsigned int k; - for (k = 0; k < filter->data_count; k++) - { - Edje_Part_Description_Spec_Filter_Data *data = &(filter->data[k]); - if (data->invalid_cc) - continue; - if (!data->value) - { - efl_gfx_filter_data_set(data->name, NULL, EINA_FALSE); - } - else if (!strncmp(data->value, "color_class('", sizeof("color_class('") - 1)) - { - /* special handling for color classes even tho they're not that great */ - char *ccname, *buffer, *r; - Edje_Color_Class *cc; + /* pass extra data items */ + if (filter->data) + { + unsigned int k; + for (k = 0; k < filter->data_count; k++) + { + Edje_Part_Description_Spec_Filter_Data *data = &(filter->data[k]); + if (data->invalid_cc) + continue; + if (!data->value) + { + eo_do(obj, efl_gfx_filter_data_set(data->name, NULL, EINA_FALSE)); + } + else if (!strncmp(data->value, "color_class('", sizeof("color_class('") - 1)) + { + /* special handling for color classes even tho they're not that great */ + char *ccname, *buffer, *r; + Edje_Color_Class *cc; - ccname = strdup(data->value + sizeof("color_class('") - 1); - if (ccname) - { - r = strchr(ccname, '\''); - if (r && (r[1] == ')') && (r[2] == '\0')) - { - *r = '\0'; - cc = _edje_color_class_find(ed, ccname); - if (cc) - { - static const char fmt[] = - "%s={r=%d,g=%d,b=%d,a=%d," - "r2=%d,g2=%d,b2=%d,a2=%d," - "r3=%d,g3=%d,b3=%d,a3=%d}"; - int len = sizeof(fmt) + 20; - len += strlen(data->name); - buffer = alloca(len); - snprintf(buffer, len - 1, fmt, data->name, - (int) cc->r, (int) cc->g, (int) cc->b, (int) cc->a, - (int) cc->r2, (int) cc->g2, (int) cc->b2, (int) cc->a2, - (int) cc->r3, (int) cc->g3, (int) cc->b3, (int) cc->a3); - buffer[len - 1] = 0; - efl_gfx_filter_data_set(data->name, buffer, EINA_TRUE); - } - else - { - ERR("Unknown color class: %s", ccname); - data->invalid_cc = EINA_TRUE; - } - } - else - { - ERR("Failed to parse color class: %s", data->value); - data->invalid_cc = EINA_TRUE; - } - free(ccname); - } - } - else - efl_gfx_filter_data_set(data->name, data->value, EINA_FALSE); - } - } - efl_gfx_filter_program_set(code, filter->name); - if (prev_sources != filter_sources) - { - /* remove sources that are not there anymore + ccname = strdup(data->value + sizeof("color_class('") - 1); + if (ccname) + { + r = strchr(ccname, '\''); + if (r && (r[1] == ')') && (r[2] == '\0')) + { + *r = '\0'; + cc = _edje_color_class_find(ed, ccname); + if (cc) + { + static const char fmt[] = + "%s={r=%d,g=%d,b=%d,a=%d," + "r2=%d,g2=%d,b2=%d,a2=%d," + "r3=%d,g3=%d,b3=%d,a3=%d}"; + int len = sizeof(fmt) + 20; + len += strlen(data->name); + buffer = alloca(len); + snprintf(buffer, len - 1, fmt, data->name, + (int) cc->r, (int) cc->g, (int) cc->b, (int) cc->a, + (int) cc->r2, (int) cc->g2, (int) cc->b2, (int) cc->a2, + (int) cc->r3, (int) cc->g3, (int) cc->b3, (int) cc->a3); + buffer[len - 1] = 0; + eo_do(obj, efl_gfx_filter_data_set(data->name, buffer, EINA_TRUE)); + } + else + { + ERR("Unknown color class: %s", ccname); + data->invalid_cc = EINA_TRUE; + } + } + else + { + ERR("Failed to parse color class: %s", data->value); + data->invalid_cc = EINA_TRUE; + } + free(ccname); + } + } + else + eo_do(obj, efl_gfx_filter_data_set(data->name, data->value, EINA_FALSE)); + } + } + eo_do(obj, efl_gfx_filter_program_set(code, filter->name)); + if (prev_sources != filter_sources) + { + /* remove sources that are not there anymore * this O(n^2) loop assumes a very small number of sources */ - EINA_LIST_FOREACH(prev_sources, li1, src1) - { - Eina_Bool found = 0; - EINA_LIST_FOREACH(filter_sources, li2, src2) - { - if (!strcmp(src1, src2)) - { - found = 1; - break; - } - } - if (!found) - { - part = strchr(src1, ':'); - if (!part) - efl_gfx_filter_source_set(src1, NULL); - else - { - char *name = strdup(src1); - name[part - src1] = 0; - efl_gfx_filter_source_set(name, NULL); - free(name); - } - } - } - /* add all sources by part name */ - EINA_LIST_FOREACH(filter_sources, li1, src1) - { - Edje_Real_Part *rp; - char *name = NULL; - if ((part = strchr(src1, ':')) != NULL) - { - name = strdup(src1); - name[part - src1] = 0; - part++; - } - else - part = src1; - rp = _edje_real_part_get(ed, part); - efl_gfx_filter_source_set(name ? name : part, rp ? rp->object : NULL); - free(name); - } - } - /* pass edje state for transitions */ - if (ep->param2) - { - efl_gfx_filter_state_set(chosen_desc->state.name, chosen_desc->state.value, - ep->param2->description->state.name, ep->param2->description->state.value, - pos); - } - else - { - efl_gfx_filter_state_set(chosen_desc->state.name, chosen_desc->state.value, - NULL, 0.0, pos); - } - ); + EINA_LIST_FOREACH(prev_sources, li1, src1) + { + Eina_Bool found = 0; + EINA_LIST_FOREACH(filter_sources, li2, src2) + { + if (!strcmp(src1, src2)) + { + found = 1; + break; + } + } + if (!found) + { + part = strchr(src1, ':'); + if (!part) + eo_do(obj, efl_gfx_filter_source_set(src1, NULL)); + else + { + char *name = strdup(src1); + name[part - src1] = 0; + eo_do(obj, efl_gfx_filter_source_set(name, NULL)); + free(name); + } + } + } + /* add all sources by part name */ + EINA_LIST_FOREACH(filter_sources, li1, src1) + { + Edje_Real_Part *rp; + char *name = NULL; + if ((part = strchr(src1, ':')) != NULL) + { + name = strdup(src1); + name[part - src1] = 0; + part++; + } + else + part = src1; + rp = _edje_real_part_get(ed, part); + eo_do(obj, efl_gfx_filter_source_set(name ? name : part, rp ? rp->object : NULL)); + free(name); + } + } + /* pass edje state for transitions */ + if (ep->param2) + { + eo_do(obj, efl_gfx_filter_state_set(chosen_desc->state.name, chosen_desc->state.value, + ep->param2->description->state.name, ep->param2->description->state.value, + pos)); + } + else + { + eo_do(obj, efl_gfx_filter_state_set(chosen_desc->state.name, chosen_desc->state.value, + NULL, 0.0, pos)); + } } static void