hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=e960a0df12f512b4ff10d3d06198ada31bfb1fed
commit e960a0df12f512b4ff10d3d06198ada31bfb1fed Author: Mykyta Biliavskyi <m.biliavs...@samsung.com> Date: Tue Jun 9 10:00:39 2015 +0000 Edj viewer: support SPACER part highlighting. In edje library SPACER doesnt have Evas_Object, that represent part on canvas. Calculation position and size of the SPACER highlight should be corrected. For correcting geometry of highlight, uses current state of scroller(that contain layout object) and layout object. @fix T2464 --- src/lib/edj_viewer.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/src/lib/edj_viewer.c b/src/lib/edj_viewer.c index def547e..b7b739e 100644 --- a/src/lib/edj_viewer.c +++ b/src/lib/edj_viewer.c @@ -101,14 +101,52 @@ part_obj_geom_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, } Evas_Coord x, y, w , h; - evas_object_geometry_get(obj, &x, &y, &w, &h); - evas_object_move(part_highlight, x, y); - evas_object_resize(part_highlight, w, h); + if (edje_edit_part_type_get(vd->layout, vd->part_name) == EDJE_PART_TYPE_SPACER) + { + Evas_Coord scroller_x, scroller_y; + Evas_Coord scroller_region_x, scroller_region_y; + Evas_Object *scroller_edje = elm_layout_edje_get(vd->scroller); + // Clipper need, to clip the highlight object for the part SPACER, + // because position of the highlight object is calculated here, + // not in edje. In case, when the SPACER is placed outside of + // scroller region view, the highlight should be hided. + Evas_Object *clipper = + (Evas_Object *)edje_object_part_object_get(scroller_edje, "clipper"); + + elm_scroller_region_get(vd->scroller, &scroller_region_x, + &scroller_region_y, NULL, NULL); + evas_object_geometry_get(vd->scroller, &scroller_x, &scroller_y, + NULL, NULL); + evas_object_smart_member_add(part_highlight, vd->scroller); + edje_object_part_geometry_get(vd->layout, vd->part_name, &x, &y, &w, &h); + + evas_object_move(part_highlight, x + scroller_x - scroller_region_x + 1, + y + scroller_y - scroller_region_y + 1); + evas_object_resize(part_highlight, w, h); + evas_object_clip_set(part_highlight, clipper); + } + else + { + evas_object_geometry_get(obj, &x, &y, &w, &h); + evas_object_move(part_highlight, x, y); + evas_object_resize(part_highlight, w, h); + } vd->part_highlight = part_highlight; } static void +event_highlight_geom_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + view_data *vd = (view_data *) data; + if (!vd) return; + + if (edje_edit_part_type_get(vd->layout, vd->part_name) == EDJE_PART_TYPE_SPACER) + part_obj_geom_cb(vd, evas_object_evas_get(vd->layout), vd->part_obj, NULL); +} + +static void part_obj_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -281,6 +319,8 @@ event_layer_set(view_data *vd) layout_del_cb, rect); evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_MOVE, rect_mouse_move_cb, vd); + evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_WHEEL, + event_highlight_geom_cb, vd); vd->event_rect = rect; } @@ -433,7 +473,6 @@ view_part_highlight_set(view_data *vd, const char *part_name) Evas_Object *part_obj = (Evas_Object *) edje_object_part_object_get(vd->layout, part_name); - if (!part_obj) return; //Delete the previous part callbacks if (vd->part_obj) @@ -452,6 +491,19 @@ view_part_highlight_set(view_data *vd, const char *part_name) evas_object_event_callback_add(part_obj, EVAS_CALLBACK_DEL, part_obj_del_cb, vd); + evas_object_event_callback_del(vd->layout, EVAS_CALLBACK_RESIZE, + event_highlight_geom_cb); + evas_object_event_callback_del(vd->layout, EVAS_CALLBACK_MOVE, + event_highlight_geom_cb); + + if (!part_obj) + { + evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_RESIZE, + event_highlight_geom_cb, vd); + evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_MOVE, + event_highlight_geom_cb, vd); + } + vd->part_obj = part_obj; eina_stringshare_replace(&vd->part_name, part_name); part_obj_geom_cb(vd, evas_object_evas_get(vd->layout), part_obj, NULL); --