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
This commit is contained in:
Mykyta Biliavskyi 2015-06-09 10:00:39 +00:00 committed by ChunEon Park
parent 4e4dd4400c
commit e960a0df12
1 changed files with 56 additions and 4 deletions

View File

@ -101,13 +101,51 @@ 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,
@ -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);