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
This commit is contained in:
Taehyub Kim 2016-08-05 17:01:48 +09:00 committed by Hermet Park
parent b663b04096
commit 4f3e016ca9
3 changed files with 98 additions and 9 deletions

View File

@ -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);
}

View File

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

View File

@ -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 */
/*****************************************************************************/
@ -163,6 +249,14 @@ wireframes_obj_update(Evas_Object *layout)
wireframes_objs_update(wireframes);
}
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)
{
@ -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)