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) --