From 5f8af66123e33447c5d8c24a7d01f4323ba83b08 Mon Sep 17 00:00:00 2001 From: Jaehwan Kim Date: Fri, 15 Mar 2013 18:53:17 +0900 Subject: [PATCH] Add the smart signals in scroller. "scroll,left", "scroll,right", "scroll,up", "scroll,down". --- legacy/elementary/ChangeLog | 4 + legacy/elementary/NEWS | 1 + .../src/lib/elm_interface_scrollable.c | 77 +++++++++++++++++-- .../src/lib/elm_interface_scrollable.h | 52 +++++++++++++ legacy/elementary/src/lib/elm_scroller.c | 40 ++++++++++ 5 files changed, 167 insertions(+), 7 deletions(-) diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index 911935600e..e4c6074882 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -1153,3 +1153,7 @@ 2013-03-13 Tae-Hwan Kim (bluezery) * Fix a memory leak in elm_genlist. Return value of elm_genlist_realized_items_get should be freed + +2013-03-15 Jaehwan Kim + + * Add the smart signals in scroller. "scroll,left", "scroll,right", "scroll,up", "scroll,down". diff --git a/legacy/elementary/NEWS b/legacy/elementary/NEWS index 0f80ddd0e4..94867f9b12 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/NEWS @@ -49,6 +49,7 @@ Additions: * Add the config ELM_THUMBSCROLL_HOLD_THRESHOLD. * Add elm_naviframe_item_pop_cb_set(). * Add elm_widget_newest_focus_order_get for knowing the last object(and its focus order) which got focus. + * Add the smart signals in scroller. "scroll,left", "scroll,right", "scroll,up", "scroll,down". Improvements: diff --git a/legacy/elementary/src/lib/elm_interface_scrollable.c b/legacy/elementary/src/lib/elm_interface_scrollable.c index 1d0da0de78..ae77a166df 100644 --- a/legacy/elementary/src/lib/elm_interface_scrollable.c +++ b/legacy/elementary/src/lib/elm_interface_scrollable.c @@ -1502,8 +1502,6 @@ _elm_scroll_content_pos_set(Eo *obj, void *_pd, va_list *list) edje_object_part_drag_value_set (sid->edje_obj, "elm.dragable.hbar", vx, 0.0); - if (sig && ((px != x) || (py != y))) - edje_object_signal_emit(sid->edje_obj, "elm,action,scroll", "elm"); if (!sid->down.bounce_x_animator) { if (((x < minx) && (0 <= sid->down.dx)) || @@ -1527,13 +1525,38 @@ _elm_scroll_content_pos_set(Eo *obj, void *_pd, va_list *list) sid->bouncemey = EINA_FALSE; } - if ((x != px) || (y != py)) - { - if (sid->cb_func.scroll) - sid->cb_func.scroll(obj, NULL); - } if (sig) { + if ((x != px) || (y != py)) + { + if (sid->cb_func.scroll) + sid->cb_func.scroll(obj, NULL); + edje_object_signal_emit(sid->edje_obj, "elm,action,scroll", "elm"); + if (x < px) + { + if (sid->cb_func.scroll_left) + sid->cb_func.scroll_left(obj, NULL); + edje_object_signal_emit(sid->edje_obj, "elm,action,scroll,left", "elm"); + } + if (x > px) + { + if (sid->cb_func.scroll_right) + sid->cb_func.scroll_right(obj, NULL); + edje_object_signal_emit(sid->edje_obj, "elm,action,scroll,right", "elm"); + } + if (y < py) + { + if (sid->cb_func.scroll_up) + sid->cb_func.scroll_up(obj, NULL); + edje_object_signal_emit(sid->edje_obj, "elm,action,scroll,up", "elm"); + } + if (y > py) + { + if (sid->cb_func.scroll_down) + sid->cb_func.scroll_down(obj, NULL); + edje_object_signal_emit(sid->edje_obj, "elm,action,scroll,down", "elm"); + } + } if (x != px) { if (x == minx) @@ -3573,6 +3596,38 @@ _elm_scroll_scroll_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) sid->cb_func.scroll = scroll_cb; } +static void +_elm_scroll_scroll_left_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + Elm_Scrollable_Smart_Interface_Data *sid = _pd; + Elm_Interface_Scrollable_Cb scroll_left_cb = va_arg(*list, Elm_Interface_Scrollable_Cb); + sid->cb_func.scroll_left = scroll_left_cb; +} + +static void +_elm_scroll_scroll_right_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + Elm_Scrollable_Smart_Interface_Data *sid = _pd; + Elm_Interface_Scrollable_Cb scroll_right_cb = va_arg(*list, Elm_Interface_Scrollable_Cb); + sid->cb_func.scroll_right = scroll_right_cb; +} + +static void +_elm_scroll_scroll_up_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + Elm_Scrollable_Smart_Interface_Data *sid = _pd; + Elm_Interface_Scrollable_Cb scroll_up_cb = va_arg(*list, Elm_Interface_Scrollable_Cb); + sid->cb_func.scroll_up = scroll_up_cb; +} + +static void +_elm_scroll_scroll_down_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + Elm_Scrollable_Smart_Interface_Data *sid = _pd; + Elm_Interface_Scrollable_Cb scroll_down_cb = va_arg(*list, Elm_Interface_Scrollable_Cb); + sid->cb_func.scroll_down = scroll_down_cb; +} + static void _elm_scroll_edge_left_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) { @@ -4165,6 +4220,10 @@ _elm_scrollable_interface_constructor(Eo_Class *klass) EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_ANIMATE_START_CB_SET), _elm_scroll_animate_start_cb_set), EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_ANIMATE_STOP_CB_SET), _elm_scroll_animate_stop_cb_set), EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_CB_SET), _elm_scroll_scroll_cb_set), + EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_LEFT_CB_SET), _elm_scroll_scroll_left_cb_set), + EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_RIGHT_CB_SET), _elm_scroll_scroll_right_cb_set), + EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_UP_CB_SET), _elm_scroll_scroll_up_cb_set), + EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_DOWN_CB_SET), _elm_scroll_scroll_down_cb_set), EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_EDGE_LEFT_CB_SET), _elm_scroll_edge_left_cb_set), EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_EDGE_RIGHT_CB_SET), _elm_scroll_edge_right_cb_set), EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_EDGE_TOP_CB_SET), _elm_scroll_edge_top_cb_set), @@ -4227,6 +4286,10 @@ static const Eo_Op_Description op_desc[] = { EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_ANIMATE_START_CB_SET, "description here"), EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_ANIMATE_STOP_CB_SET, "description here"), EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_CB_SET, "description here"), + EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_LEFT_CB_SET, "description here"), + EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_RIGHT_CB_SET, "description here"), + EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_UP_CB_SET, "description here"), + EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_DOWN_CB_SET, "description here"), EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_EDGE_LEFT_CB_SET, "description here"), EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_EDGE_RIGHT_CB_SET, "description here"), EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_EDGE_TOP_CB_SET, "description here"), diff --git a/legacy/elementary/src/lib/elm_interface_scrollable.h b/legacy/elementary/src/lib/elm_interface_scrollable.h index de5db2664e..1a001e7a86 100644 --- a/legacy/elementary/src/lib/elm_interface_scrollable.h +++ b/legacy/elementary/src/lib/elm_interface_scrollable.h @@ -157,6 +157,10 @@ enum ELM_SCROLLABLE_INTERFACE_SUB_ID_ANIMATE_START_CB_SET, ELM_SCROLLABLE_INTERFACE_SUB_ID_ANIMATE_STOP_CB_SET, ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_CB_SET, + ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_LEFT_CB_SET, + ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_RIGHT_CB_SET, + ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_UP_CB_SET, + ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_DOWN_CB_SET, ELM_SCROLLABLE_INTERFACE_SUB_ID_EDGE_LEFT_CB_SET, ELM_SCROLLABLE_INTERFACE_SUB_ID_EDGE_RIGHT_CB_SET, ELM_SCROLLABLE_INTERFACE_SUB_ID_EDGE_TOP_CB_SET, @@ -298,6 +302,50 @@ enum */ #define elm_scrollable_interface_scroll_cb_set(scroll_cb) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_CB_SET), EO_TYPECHECK(Elm_Interface_Scrollable_Cb, scroll_cb) +/** + * @def elm_scrollable_interface_scroll_left_cb_set + * @since 1.8 + * + * No description supplied by the EAPI. + * + * @param[in] scroll_left_cb + * + */ +#define elm_scrollable_interface_scroll_left_cb_set(scroll_left_cb) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_LEFT_CB_SET), EO_TYPECHECK(Elm_Interface_Scrollable_Cb, scroll_left_cb) + +/** + * @def elm_scrollable_interface_scroll_right_cb_set + * @since 1.8 + * + * No description supplied by the EAPI. + * + * @param[in] scroll_right_cb + * + */ +#define elm_scrollable_interface_scroll_right_cb_set(scroll_right_cb) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_RIGHT_CB_SET), EO_TYPECHECK(Elm_Interface_Scrollable_Cb, scroll_right_cb) + +/** + * @def elm_scrollable_interface_scroll_up_cb_set + * @since 1.8 + * + * No description supplied by the EAPI. + * + * @param[in] scroll_up_cb + * + */ +#define elm_scrollable_interface_scroll_up_cb_set(scroll_up_cb) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_UP_CB_SET), EO_TYPECHECK(Elm_Interface_Scrollable_Cb, scroll_up_cb) + +/** + * @def elm_scrollable_interface_scroll_down_cb_set + * @since 1.8 + * + * No description supplied by the EAPI. + * + * @param[in] scroll_down_cb + * + */ +#define elm_scrollable_interface_scroll_down_cb_set(scroll_down_cb) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_SCROLL_DOWN_CB_SET), EO_TYPECHECK(Elm_Interface_Scrollable_Cb, scroll_down_cb) + /** * @def elm_scrollable_interface_edge_left_cb_set * @since 1.8 @@ -951,6 +999,10 @@ struct _Elm_Scrollable_Smart_Interface_Data Elm_Interface_Scrollable_Cb animate_start; Elm_Interface_Scrollable_Cb animate_stop; Elm_Interface_Scrollable_Cb scroll; + Elm_Interface_Scrollable_Cb scroll_left; + Elm_Interface_Scrollable_Cb scroll_right; + Elm_Interface_Scrollable_Cb scroll_up; + Elm_Interface_Scrollable_Cb scroll_down; Elm_Interface_Scrollable_Cb edge_left; Elm_Interface_Scrollable_Cb edge_right; Elm_Interface_Scrollable_Cb edge_top; diff --git a/legacy/elementary/src/lib/elm_scroller.c b/legacy/elementary/src/lib/elm_scroller.c index f78a809d41..b56c2a67da 100644 --- a/legacy/elementary/src/lib/elm_scroller.c +++ b/legacy/elementary/src/lib/elm_scroller.c @@ -11,6 +11,10 @@ EAPI Eo_Op ELM_OBJ_SCROLLER_BASE_ID = EO_NOOP; #define MY_CLASS_NAME "elm_scroller" static const char SIG_SCROLL[] = "scroll"; +static const char SIG_SCROLL_LEFT[] = "scroll,left"; +static const char SIG_SCROLL_RIGHT[] = "scroll,right"; +static const char SIG_SCROLL_UP[] = "scroll,up"; +static const char SIG_SCROLL_DOWN[] = "scroll,down"; static const char SIG_SCROLL_ANIM_START[] = "scroll,anim,start"; static const char SIG_SCROLL_ANIM_STOP[] = "scroll,anim,stop"; static const char SIG_SCROLL_DRAG_START[] = "scroll,drag,start"; @@ -28,6 +32,10 @@ static const char SIG_HBAR_UNPRESS[] = "hbar,unpress"; static const Evas_Smart_Cb_Description _smart_callbacks[] = { {SIG_SCROLL, ""}, + {SIG_SCROLL_LEFT, ""}, + {SIG_SCROLL_RIGHT, ""}, + {SIG_SCROLL_UP, ""}, + {SIG_SCROLL_DOWN, ""}, {SIG_SCROLL_ANIM_START, ""}, {SIG_SCROLL_ANIM_STOP, ""}, {SIG_SCROLL_DRAG_START, ""}, @@ -535,6 +543,34 @@ _scroll_cb(Evas_Object *obj, evas_object_smart_callback_call(obj, SIG_SCROLL, NULL); } +static void +_scroll_left_cb(Evas_Object *obj, + void *data __UNUSED__) +{ + evas_object_smart_callback_call(obj, SIG_SCROLL_LEFT, NULL); +} + +static void +_scroll_right_cb(Evas_Object *obj, + void *data __UNUSED__) +{ + evas_object_smart_callback_call(obj, SIG_SCROLL_RIGHT, NULL); +} + +static void +_scroll_up_cb(Evas_Object *obj, + void *data __UNUSED__) +{ + evas_object_smart_callback_call(obj, SIG_SCROLL_UP, NULL); +} + +static void +_scroll_down_cb(Evas_Object *obj, + void *data __UNUSED__) +{ + evas_object_smart_callback_call(obj, SIG_SCROLL_DOWN, NULL); +} + static void _scroll_anim_start_cb(Evas_Object *obj, void *data __UNUSED__) @@ -735,6 +771,10 @@ _elm_scroller_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) elm_scrollable_interface_edge_top_cb_set(_edge_top_cb), elm_scrollable_interface_edge_bottom_cb_set(_edge_bottom_cb), elm_scrollable_interface_scroll_cb_set(_scroll_cb), + elm_scrollable_interface_scroll_left_cb_set(_scroll_left_cb), + elm_scrollable_interface_scroll_right_cb_set(_scroll_right_cb), + elm_scrollable_interface_scroll_up_cb_set(_scroll_up_cb), + elm_scrollable_interface_scroll_down_cb_set(_scroll_down_cb), elm_scrollable_interface_animate_start_cb_set(_scroll_anim_start_cb), elm_scrollable_interface_animate_stop_cb_set(_scroll_anim_stop_cb), elm_scrollable_interface_drag_start_cb_set(_scroll_drag_start_cb),