From 6c58680691e04ce418e5247f995a16ac9c1436f5 Mon Sep 17 00:00:00 2001 From: Jaehwan Kim Date: Mon, 1 Jul 2013 20:28:23 +0900 Subject: [PATCH] Add the elm_scrollable_interface_content_viewport_resize_cb_set. When the viewport is resized, the enrolled function is called. Change-Id: I77ebbf7cf54d13130689f7e31f8880de6bfad219 --- src/lib/elm_interface_scrollable.c | 34 ++++++++++++++++++++++++++++++++++ src/lib/elm_interface_scrollable.h | 7 +++++++ src/lib/elm_scroller.c | 10 ++++++++++ 3 files changed, 51 insertions(+) diff --git a/src/lib/elm_interface_scrollable.c b/src/lib/elm_interface_scrollable.c index aea6abf..35e8784 100644 --- a/src/lib/elm_interface_scrollable.c +++ b/src/lib/elm_interface_scrollable.c @@ -3342,6 +3342,22 @@ _elm_scroll_pan_changed_cb(void *data, } static void +_elm_scroll_pan_resized_cb(void *data, + Evas *e __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Coord w, h; + Elm_Scrollable_Smart_Interface_Data *sid = data; + + if (sid->cb_func.content_viewport_resize) + { + _elm_scroll_content_viewport_size_get(sid->obj, &w, &h); + sid->cb_func.content_viewport_resize(sid->obj, w, h); + } +} + +static void _elm_scroll_content_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, @@ -3385,6 +3401,8 @@ _elm_scroll_content_set(Evas_Object *obj, sid->pan_obj = o; evas_object_smart_callback_add (o, SIG_CHANGED, _elm_scroll_pan_changed_cb, sid); + evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, + _elm_scroll_pan_resized_cb, sid); edje_object_part_swallow(sid->edje_obj, "elm.swallow.content", o); } @@ -3416,6 +3434,8 @@ _elm_scroll_extern_pan_set(Evas_Object *obj, { evas_object_smart_callback_del (sid->pan_obj, SIG_CHANGED, _elm_scroll_pan_changed_cb); + evas_object_event_callback_del(sid->pan_obj, EVAS_CALLBACK_RESIZE, + _elm_scroll_pan_resized_cb); } if (sid->extern_pan) @@ -3446,6 +3466,8 @@ _elm_scroll_extern_pan_set(Evas_Object *obj, sid->extern_pan = EINA_TRUE; evas_object_smart_callback_add (sid->pan_obj, SIG_CHANGED, _elm_scroll_pan_changed_cb, sid); + evas_object_event_callback_add(sid->pan_obj, EVAS_CALLBACK_RESIZE, + _elm_scroll_pan_resized_cb, sid); edje_object_part_swallow (sid->edje_obj, "elm.swallow.content", sid->pan_obj); } @@ -3651,6 +3673,17 @@ _elm_scroll_content_min_limit_cb_set(Evas_Object *obj, sid->cb_func.content_min_limit = c_min_limit_cb; } +static void +_elm_scroll_content_viewport_resize_cb_set(Evas_Object *obj, + void (*c_viewport_resize_cb)(Evas_Object *obj, + Evas_Coord w, + Evas_Coord h)) +{ + ELM_SCROLL_IFACE_DATA_GET_OR_RETURN(obj, sid); + + sid->cb_func.content_viewport_resize = c_viewport_resize_cb; +} + static Eina_Bool _elm_scroll_momentum_animator_disabled_get(const Evas_Object *obj) { @@ -4237,6 +4270,7 @@ EAPI const Elm_Scrollable_Smart_Interface ELM_SCROLLABLE_IFACE = _elm_scroll_hbar_press_cb_set, _elm_scroll_hbar_unpress_cb_set, _elm_scroll_content_min_limit_cb_set, + _elm_scroll_content_viewport_resize_cb_set, _elm_scroll_content_pos_set, _elm_scroll_content_pos_get, _elm_scroll_content_region_show, diff --git a/src/lib/elm_interface_scrollable.h b/src/lib/elm_interface_scrollable.h index 1e2857b..b355f12 100644 --- a/src/lib/elm_interface_scrollable.h +++ b/src/lib/elm_interface_scrollable.h @@ -293,6 +293,9 @@ struct _Elm_Scrollable_Smart_Interface_Data void (*content_min_limit)(Evas_Object *obj, Eina_Bool w, Eina_Bool h); + void (*content_viewport_resize)(Evas_Object *obj, + Evas_Coord w, + Evas_Coord h); } cb_func; struct @@ -408,6 +411,10 @@ struct _Elm_Scrollable_Smart_Interface void (*c_limit_cb)(Evas_Object *obj, Eina_Bool w, Eina_Bool h)); + void (*content_viewport_resize_cb_set)(Evas_Object *obj, + void (*c_viewport_resize_cb)(Evas_Object *obj, + Evas_Coord w, + Evas_Coord h)); /* set the position of content object inside the scrolling region, * immediately */ diff --git a/src/lib/elm_scroller.c b/src/lib/elm_scroller.c index 49ed4e2..e11ff5a 100644 --- a/src/lib/elm_scroller.c +++ b/src/lib/elm_scroller.c @@ -763,6 +763,14 @@ _elm_scroller_content_min_limit_cb(Evas_Object *obj, } static void +_elm_scroller_content_viewport_resize_cb(Evas_Object *obj, + Evas_Coord w __UNUSED__, + Evas_Coord h __UNUSED__) +{ + elm_layout_sizing_eval(obj); +} + +static void _elm_scroller_smart_add(Evas_Object *obj) { Evas_Coord minw, minh; @@ -818,6 +826,8 @@ _elm_scroller_smart_add(Evas_Object *obj) priv->s_iface->content_min_limit_cb_set (obj, _elm_scroller_content_min_limit_cb); + priv->s_iface->content_viewport_resize_cb_set + (obj, _elm_scroller_content_viewport_resize_cb); } static void -- 2.7.4