rimmed pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=715a66ed119538983e89864b86d14e76e71aca3b

commit 715a66ed119538983e89864b86d14e76e71aca3b
Author: Vyacheslav Reutskiy <v.reuts...@samsung.com>
Date:   Wed Dec 21 13:57:41 2016 +0200

    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 864750c..94eff48 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -4370,6 +4370,63 @@ _filter_copy(Edje_Part_Description_Spec_Filter *ed, 
const Edje_Part_Description_
 }
 
 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)
 {
    Edje_Part_Collection *pc;
@@ -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 13c809e..6717508 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);
               }
          }

-- 


Reply via email to