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

-- 


Reply via email to