hermet pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=4f3e016ca9668e8bc2bcc18af77eac96398224a6

commit 4f3e016ca9668e8bc2bcc18af77eac96398224a6
Author: Taehyub Kim <taehyub....@samsung.com>
Date:   Fri Aug 5 17:01:48 2016 +0900

    wirefrmaes_obj: update wireframe when it is animated
    
    Summary:
    when animation is working, wire frame is not updated.
    so I fixed it.
    
    Test Plan:
    1. launch enventor.
    2. run animation template
    3. see the result about update of wireframe
    
    Reviewers: Jaehyun_Cho, NikaWhite, Hermet
    
    Differential Revision: https://phab.enlightenment.org/D4214
---
 src/lib/edj_viewer.c       |   2 +-
 src/lib/enventor_private.h |   1 +
 src/lib/wireframes_obj.c   | 104 +++++++++++++++++++++++++++++++++++++++++----
 3 files changed, 98 insertions(+), 9 deletions(-)

diff --git a/src/lib/edj_viewer.c b/src/lib/edj_viewer.c
index 73fa1ec..80002e0 100644
--- a/src/lib/edj_viewer.c
+++ b/src/lib/edj_viewer.c
@@ -379,6 +379,7 @@ update_edj_file_internal(view_data *vd)
                                      vd->changed_part.state);
 
    view_obj_parts_callbacks_set(vd);
+   wireframes_obj_callbacks_set(vd->layout);
    vd->edj_reload_need = EINA_FALSE;
    vd->file_set_finished = EINA_TRUE;
 
@@ -928,6 +929,5 @@ view_mirror_mode_update(view_data *vd)
    edje_object_mirrored_set(vd->layout,
                             enventor_obj_mirror_mode_get(vd->enventor));
    dummy_obj_update(vd->layout);
-   wireframes_obj_update(vd->layout);
    part_obj_geom_cb(vd, evas_object_evas_get(vd->layout), vd->part_obj, NULL);
 }
diff --git a/src/lib/enventor_private.h b/src/lib/enventor_private.h
index 502add4..f7e6b09 100644
--- a/src/lib/enventor_private.h
+++ b/src/lib/enventor_private.h
@@ -163,6 +163,7 @@ void dummy_obj_update(Evas_Object *layout);
 void wireframes_obj_new(Evas_Object *layout);
 void wireframes_obj_del(Evas_Object *layout);
 void wireframes_obj_update(Evas_Object *layout);
+void wireframes_obj_callbacks_set(Evas_Object *layout);
 
 /* edj_mgr */
 void edj_mgr_init(Enventor_Object *enventor);
diff --git a/src/lib/wireframes_obj.c b/src/lib/wireframes_obj.c
index 248c33e..38dfaf4 100644
--- a/src/lib/wireframes_obj.c
+++ b/src/lib/wireframes_obj.c
@@ -151,6 +151,92 @@ layout_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, 
Evas_Object *obj,
    wireframes_obj_del(obj);
 }
 
+static void
+update_wireframe_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
+                    void *event_info EINA_UNUSED)
+{
+   wireframes_obj *wireframes = data;
+
+   Eina_List *part_l;
+   part_obj *po;
+   Evas_Object *pobj = NULL;
+
+   const char *part_name = evas_object_data_get(obj, "part_name");
+
+   //Find the wireframe matched to the part name.
+   EINA_LIST_FOREACH(wireframes->part_list, part_l, po)
+     {
+        if (po->name != part_name) continue;
+        pobj = po->obj;
+        break;
+     }
+
+   //Update the wireframe of the part name.
+   if (pobj)
+     {
+        Evas_Coord part_lx = 0, part_ly = 0;
+        Evas_Coord part_x = 0, part_y = 0, part_w = 0, part_h = 0;
+
+        Evas_Object *part_obj = (Evas_Object *)
+                                edje_object_part_object_get(wireframes->layout,
+                                                            part_name);
+
+        evas_object_geometry_get(part_obj, &part_x, &part_y, &part_w, &part_h);
+
+        evas_object_resize(pobj, part_w, part_h);
+        evas_object_move(pobj, part_x, part_y);
+     }
+}
+
+static void
+wireframes_callbacks_set(wireframes_obj *wireframes, Evas_Object *layout)
+{
+   Eina_List *l = NULL;
+   Eina_Stringshare *part_name = NULL;
+   Eina_List *parts = edje_edit_parts_list_get(layout);
+
+   //Set resize and move callback to the edje part in layout to update 
wireframe.
+   EINA_LIST_FOREACH(parts, l, part_name)
+     {
+        Evas_Object *edje_part =
+              (Evas_Object *)edje_object_part_object_get(layout, part_name);
+        if (edje_part)
+          {
+             evas_object_event_callback_del(edje_part, EVAS_CALLBACK_RESIZE,
+                                            update_wireframe_cb);
+             evas_object_event_callback_del(edje_part, EVAS_CALLBACK_MOVE,
+                                            update_wireframe_cb);
+             evas_object_event_callback_add(edje_part, EVAS_CALLBACK_RESIZE,
+                                            update_wireframe_cb, wireframes);
+             evas_object_event_callback_add(edje_part, EVAS_CALLBACK_MOVE,
+                                            update_wireframe_cb, wireframes);
+          }
+     }
+}
+
+static void
+wireframes_callbacks_del(wireframes_obj *wireframes, Evas_Object *layout)
+{
+   Eina_List *l = NULL;
+   Eina_Stringshare *part_name = NULL;
+   Eina_List *parts = edje_edit_parts_list_get(layout);
+
+   //Remove the callback of wireframe
+   EINA_LIST_FOREACH(parts, l, part_name)
+     {
+        Evas_Object *edje_part =
+              (Evas_Object *)edje_object_part_object_get(layout, part_name);
+        if (edje_part)
+          {
+             evas_object_event_callback_del(edje_part, EVAS_CALLBACK_RESIZE,
+                                            update_wireframe_cb);
+             evas_object_event_callback_del(edje_part, EVAS_CALLBACK_MOVE,
+                                            update_wireframe_cb);
+          }
+     }
+
+}
+
 /*****************************************************************************/
 /* Externally accessible calls                                               */
 /*****************************************************************************/
@@ -164,6 +250,14 @@ wireframes_obj_update(Evas_Object *layout)
 }
 
 void
+wireframes_obj_callbacks_set(Evas_Object *layout)
+{
+   wireframes_obj *wireframes = evas_object_data_get(layout, OUTLINEOBJ);
+   if (!wireframes) return;
+   wireframes_callbacks_set(wireframes, layout);
+}
+
+void
 wireframes_obj_new(Evas_Object *layout)
 {
    if (!layout) return;
@@ -184,12 +278,9 @@ wireframes_obj_new(Evas_Object *layout)
    evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, layout_del_cb,
                                   wireframes);
 
-   evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE,
-                                  layout_geom_changed_cb, wireframes);
-   evas_object_event_callback_add(layout, EVAS_CALLBACK_MOVE,
-                                  layout_geom_changed_cb, wireframes);
    wireframes->layout = layout;
    wireframes->animator = animator;
+   wireframes_callbacks_set(wireframes, layout);
 }
 
 void
@@ -198,10 +289,7 @@ wireframes_obj_del(Evas_Object *layout)
    wireframes_obj *wireframes = evas_object_data_get(layout, OUTLINEOBJ);
    if (!wireframes) return;
 
-   evas_object_event_callback_del_full(layout, EVAS_CALLBACK_RESIZE,
-                                       layout_geom_changed_cb, wireframes);
-   evas_object_event_callback_del_full(layout, EVAS_CALLBACK_MOVE,
-                                       layout_geom_changed_cb, wireframes);
+   wireframes_callbacks_del(wireframes, layout);
 
    part_obj *po;
    EINA_LIST_FREE(wireframes->part_list, po)

-- 


Reply via email to