From cb47271ff6dd44b512f3d3bfd12a50742b0719a2 Mon Sep 17 00:00:00 2001 From: Taehyub Kim Date: Mon, 15 Aug 2016 14:08:39 +0900 Subject: [PATCH] wireframes_obj: restore resize and move callback for layout Summary: restore resize and move callabck for layout Test Plan: 1. launch enventor 2. open a basic edc 3. add spacer part 4. turn on wireframe 5. resize the view 6. see the result of wireframe Reviewers: Jaehyun_Cho, NikaWhite, bowonryu, Hermet Differential Revision: https://phab.enlightenment.org/D4216 Conflicts: src/lib/wireframes_obj.c --- src/lib/wireframes_obj.c | 62 +++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/src/lib/wireframes_obj.c b/src/lib/wireframes_obj.c index 218e821..ccad980 100644 --- a/src/lib/wireframes_obj.c +++ b/src/lib/wireframes_obj.c @@ -114,7 +114,6 @@ end: edje_edit_string_list_free(parts); } -#if 0 static void layout_geom_changed_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj, void *ei EINA_UNUSED) @@ -128,14 +127,23 @@ layout_geom_changed_cb(void *data, Evas *evas EINA_UNUSED, evas_object_geometry_get(obj, &lx, &ly, NULL, NULL); EINA_LIST_FOREACH(wireframes->part_list, spacer_l, po) - if (edje_object_part_exists(obj, po->name)) - { - edje_object_part_geometry_get(obj, po->name, &x, &y, &w, &h); - evas_object_resize(po->obj, w, h); - evas_object_move(po->obj, lx + x, ly + y); - } + { + const char *sel_part = edje_edit_part_selected_state_get(obj, + po->name, NULL); + // In case of spacer and text, it should be updated + // since spacer part can not receive the resize callback and + // text is part has delay in update_wireframe_cb. + if (edje_object_part_exists(obj, po->name) + && ((edje_edit_part_type_get(obj, po->name) == EDJE_PART_TYPE_SPACER) + || (edje_edit_part_type_get(obj, po->name) == EDJE_PART_TYPE_TEXT) + || !edje_edit_state_visible_get(obj, po->name, sel_part, 0.0))) + { + edje_object_part_geometry_get(obj, po->name, &x, &y, &w, &h); + evas_object_resize(po->obj, w, h); + evas_object_move(po->obj, lx + x, ly + y); + } + } } -#endif static Eina_Bool animator_cb(void *data) @@ -178,14 +186,30 @@ update_wireframe_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, { 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); + //Case 1: If Part is the TEXT, the geometry information is different + //between edje_object_part_geometry_get and evas_object_geometry_get. + //So here, it should be considered. + if (edje_edit_part_type_get(wireframes->layout, part_name) + == EDJE_PART_TYPE_TEXT) + { + evas_object_geometry_get(wireframes->layout, &part_lx, &part_ly, + NULL, NULL); + edje_object_part_geometry_get(wireframes->layout, part_name, + &part_x, &part_y, &part_w, &part_h); + } + //Case 2: In case of not text case, evas_object_geomtry_get is more + //precise than edje_object_part_geometry_get. + else + { + 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); + evas_object_move(pobj, part_lx + part_x, part_ly + part_y); } } @@ -279,6 +303,11 @@ 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); @@ -290,6 +319,11 @@ 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;