rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=5c6a3d57a576dc043e3e0c723fec7b1c2f359cf6

commit 5c6a3d57a576dc043e3e0c723fec7b1c2f359cf6
Author: Vitalii Vorobiov <vi.vorob...@samsung.com>
Date:   Thu Sep 1 16:56:20 2016 +0300

    resource_manager2: list of tweens and save normal image name as well
    
    @fix
---
 src/bin/project_manager/resource_manager2.c | 70 ++++++++++++++++++-----------
 src/bin/project_manager/resource_manager2.h |  3 ++
 2 files changed, 47 insertions(+), 26 deletions(-)

diff --git a/src/bin/project_manager/resource_manager2.c 
b/src/bin/project_manager/resource_manager2.c
index e4019ea..8aa031d 100644
--- a/src/bin/project_manager/resource_manager2.c
+++ b/src/bin/project_manager/resource_manager2.c
@@ -498,9 +498,12 @@ _resource_group_edit_object_unload(Group2 *group)
 }
 
 State2 *
-_gm_state_add(Project *pro, Part2 *part, const char *state_name, double 
state_value)
+_gm_state_add(Project *pro, Group2 *group, Part2 *part, const char 
*state_name, double state_value)
 {
    State2 *state;
+   Eina_Stringshare *image_name;
+   Eina_List *tween_list, *l;
+   Resource2 *res;
 
    assert(pro != NULL);
    assert(part != NULL);
@@ -517,6 +520,31 @@ _gm_state_add(Project *pro, Part2 *part, const char 
*state_name, double state_va
    if (part->current_state == NULL)
      part->current_state = state;
 
+   if (part->type == EDJE_PART_TYPE_IMAGE)
+     {
+        image_name = edje_edit_state_image_get(group->edit_object,
+                                               part->common.name,
+                                               state->common.name,
+                                               state->val);
+        if (strcmp(image_name, EFLETE_DUMMY_IMAGE_NAME))
+          state->normal = eina_stringshare_add(image_name);
+        edje_edit_string_free(image_name);
+
+        tween_list = edje_edit_state_tweens_list_get(group->edit_object,
+                                                     part->common.name,
+                                                     state->common.name,
+                                                     state->val);
+        EINA_LIST_FOREACH(tween_list, l, image_name)
+          {
+             if (edje_edit_image_set_exists(group->edit_object, image_name))
+               res = resource_manager_find(pro->image_sets, image_name);
+             else
+               res = resource_manager_find(pro->images, image_name);
+             state->tweens = eina_list_append(state->tweens, res);
+          }
+        edje_edit_string_list_free(tween_list);
+     }
+
    return state;
 }
 
@@ -546,7 +574,7 @@ _gm_part_add(Project *pro, Group2 *group, const char 
*part_name)
    EINA_LIST_FOREACH(states, l, state_name)
      {
         state_name_split(state_name, &parsed_state_name, &val);
-        _gm_state_add(pro, part, parsed_state_name, val);
+        _gm_state_add(pro, group, part, parsed_state_name, val);
         eina_stringshare_del(parsed_state_name);
      }
    edje_edit_string_list_free(states);
@@ -685,10 +713,10 @@ _item_dependency_load(Project *pro __UNUSED__, Group2 
*group __UNUSED__, Part2 *
 void
 _state_dependency_load(Project *pro, Group2 *group, Part2 *part)
 {
-   Eina_List *l2, *l, *tween_list;
+   Eina_List *l2, *l;
    State2 *state;
    Resource2 *res;
-   Eina_Stringshare *source, *image_name, *tween_name;
+   Eina_Stringshare *source;
    Eina_Stringshare *font_name, *color_class, *style_name;
 
    EINA_LIST_FOREACH(part->states, l, state)
@@ -707,34 +735,19 @@ _state_dependency_load(Project *pro, Group2 *group, Part2 
*part)
 
         if (part->type == EDJE_PART_TYPE_IMAGE)
           {
-             image_name = edje_edit_state_image_get(group->edit_object,
-                                                    part->common.name,
-                                                    state->common.name,
-                                                    state->val);
-
-             if (strcmp(image_name, EFLETE_DUMMY_IMAGE_NAME))
+             if (strcmp(state->normal, EFLETE_DUMMY_IMAGE_NAME))
                {
-                  if (edje_edit_image_set_exists(group->edit_object, 
image_name))
-                    res = resource_manager_find(pro->image_sets, image_name);
+                  if (edje_edit_image_set_exists(group->edit_object, 
state->normal))
+                    res = resource_manager_find(pro->image_sets, 
state->normal);
                   else
-                    res = resource_manager_find(pro->images, image_name);
+                    res = resource_manager_find(pro->images, state->normal);
                   _resource_usage_resource_add((Resource2 *)state, res);
                }
-             edje_edit_string_free(image_name);
 
-             tween_list = edje_edit_state_tweens_list_get(group->edit_object,
-                                                          part->common.name,
-                                                          state->common.name,
-                                                          state->val);
-             EINA_LIST_FOREACH(tween_list, l2, tween_name)
+             EINA_LIST_FOREACH(state->tweens, l2, res)
                {
-                  if (edje_edit_image_set_exists(group->edit_object, 
tween_name))
-                    res = resource_manager_find(pro->image_sets, tween_name);
-                  else
-                    res = resource_manager_find(pro->images, tween_name);
                   _resource_usage_resource_add((Resource2 *)state, res);
                }
-             edje_edit_string_list_free(tween_list);
           }
 
         color_class = edje_edit_state_color_class_get(group->edit_object,
@@ -957,8 +970,13 @@ void
 _resource_part_free(Part2 *res)
 {
    Resource2 *part_res;
-   EINA_LIST_FREE(res->states, part_res)
-      _resource_free(part_res);
+   State2 *state;
+   EINA_LIST_FREE(res->states, state)
+     {
+        eina_stringshare_del(state->normal);
+        eina_list_free(state->tweens);
+        _resource_free((Resource2 *)state);
+     }
    EINA_LIST_FREE(res->items, part_res)
       _resource_free(part_res);
    _resource_free((Resource2 *)res);
diff --git a/src/bin/project_manager/resource_manager2.h 
b/src/bin/project_manager/resource_manager2.h
index 58bd0b4..7d546c2 100644
--- a/src/bin/project_manager/resource_manager2.h
+++ b/src/bin/project_manager/resource_manager2.h
@@ -120,6 +120,9 @@ struct _State2
 {
    Resource2_Internal common;
    double val;                /**< parsed state value */
+
+   Eina_Stringshare *normal;   /* normal image being used (could be NONE) */
+   Eina_List *tweens;          /* list of tweens in correct order */
    Part2 *part;                /**< pointer to part */
 };
 

-- 


Reply via email to