From 715a66ed119538983e89864b86d14e76e71aca3b Mon Sep 17 00:00:00 2001 From: Vyacheslav Reutskiy Date: Wed, 21 Dec 2016 13:57:41 +0200 Subject: [PATCH] edje_cc: calculate and save the parts count in "edje/file" --- src/bin/edje/edje_cc_handlers.c | 65 ++++++++++++++++++++++++++++++++- src/bin/edje/edje_cc_out.c | 26 +++++++++++++ 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c index 864750cddd..94eff486de 100644 --- a/src/bin/edje/edje_cc_handlers.c +++ b/src/bin/edje/edje_cc_handlers.c @@ -4369,6 +4369,63 @@ _filter_copy(Edje_Part_Description_Spec_Filter *ed, const Edje_Part_Description_ else memset(ed, 0, sizeof(*ed)); } +static void +_parts_count_update(unsigned int type, int inc) +{ + switch (type) + { + case EDJE_PART_TYPE_RECTANGLE: + current_de->count.RECTANGLE += inc; + break; + case EDJE_PART_TYPE_TEXT: + current_de->count.TEXT += inc; + break; + case EDJE_PART_TYPE_IMAGE: + current_de->count.IMAGE += inc; + break; + case EDJE_PART_TYPE_SWALLOW: + current_de->count.SWALLOW += inc; + break; + case EDJE_PART_TYPE_TEXTBLOCK: + current_de->count.TEXTBLOCK += inc; + break; + case EDJE_PART_TYPE_GROUP: + current_de->count.GROUP += inc; + break; + case EDJE_PART_TYPE_BOX: + current_de->count.BOX += inc; + break; + case EDJE_PART_TYPE_TABLE: + current_de->count.TABLE += inc; + break; + case EDJE_PART_TYPE_EXTERNAL: + current_de->count.EXTERNAL += inc; + break; + case EDJE_PART_TYPE_PROXY: + current_de->count.PROXY += inc; + break; + case EDJE_PART_TYPE_MESH_NODE: + current_de->count.MESH_NODE += inc; + break; + case EDJE_PART_TYPE_LIGHT: + current_de->count.LIGHT += inc; + break; + case EDJE_PART_TYPE_CAMERA: + current_de->count.CAMERA += inc; + break; + case EDJE_PART_TYPE_SPACER: + current_de->count.SPACER += inc; + break; + case EDJE_PART_TYPE_SNAPSHOT: + current_de->count.SNAPSHOT += inc; + break; + case EDJE_PART_TYPE_VECTOR: + current_de->count.VECTOR += inc; + break; + } + current_de->count.part += inc; +} + static void _part_copy(Edje_Part *ep, Edje_Part *ep2) { @@ -4492,6 +4549,8 @@ _part_copy(Edje_Part *ep, Edje_Part *ep2) pitem = (Edje_Pack_Element_Parser *)item; pitem->can_override = EINA_TRUE; + + _parts_count_update(item->type, 1); } ep->api.name = STRDUP(ep2->api.name); @@ -5984,6 +6043,8 @@ _part_type_set(unsigned int type) free(dummy); current_desc = cur; } + + _parts_count_update(current_part->type, 1); } static void @@ -6312,7 +6373,7 @@ _part_name_check(void) static void st_collections_group_part_remove(void) { - unsigned int n, argc, orig_count; + unsigned int n, argc, orig_count, part_type; Edje_Part_Collection *pc; check_min_arg_count(1); @@ -6339,6 +6400,7 @@ st_collections_group_part_remove(void) if (strcmp(pc->parts[j]->name, name)) continue; + part_type = pc->parts[j]->type; pc->parts[j] = _part_free(pc, pc->parts[j]); for (i = j; i < pc->parts_count - 1; i++) { @@ -6346,6 +6408,7 @@ st_collections_group_part_remove(void) pc->parts[i] = pc->parts[i + 1]; } pc->parts_count--; + _parts_count_update(part_type, -1); break; } if (cur_count == pc->parts_count) diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c index 13c809e8b5..67175089d8 100644 --- a/src/bin/edje/edje_cc_out.c +++ b/src/bin/edje/edje_cc_out.c @@ -660,6 +660,31 @@ check_program(Edje_Part_Collection *pc, Edje_Program *ep, Eet_File *ef) } } +/* reset part counters for alias */ +static void +_alias_clean(Edje_Part_Collection_Directory_Entry *ce) +{ + if (ce) + { + ce->count.RECTANGLE = 0; + ce->count.TEXT = 0; + ce->count.IMAGE = 0; + ce->count.SWALLOW = 0; + ce->count.TEXTBLOCK = 0; + ce->count.GROUP = 0; + ce->count.BOX = 0; + ce->count.TABLE = 0; + ce->count.EXTERNAL = 0; + ce->count.PROXY = 0; + ce->count.MESH_NODE = 0; + ce->count.LIGHT = 0; + ce->count.CAMERA = 0; + ce->count.SPACER = 0; + ce->count.VECTOR = 0; + ce->count.part = 0; + } +} + static void data_thread_head(void *data, Ecore_Thread *thread EINA_UNUSED) { @@ -699,6 +724,7 @@ data_thread_head(void *data, Ecore_Thread *thread EINA_UNUSED) return; } + _alias_clean(ce); eina_hash_direct_add(edje_file->collection, ce->entry, ce); } }