jackdanielz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=355176e17cc06f028fef5f3ce7ed986b5096f73a
commit 355176e17cc06f028fef5f3ce7ed986b5096f73a Author: Daniel Zaoui <daniel.za...@samsung.com> Date: Wed Mar 26 10:54:49 2014 +0200 Eolian: Integration of Scroller --- src/lib/Makefile.am | 10 +- src/lib/elm_scroller.c | 388 +++++++++++------------------------------- src/lib/elm_scroller.eo | 105 ++++++++++++ src/lib/elm_scroller_eo.h | 4 + src/lib/elm_widget_scroller.h | 6 +- 5 files changed, 219 insertions(+), 294 deletions(-) diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 25ba481..9080307 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -638,7 +638,9 @@ BUILT_SOURCES = \ elm_radio.eo.c \ elm_radio.eo.h \ elm_route.eo.c \ - elm_route.eo.h + elm_route.eo.h \ + elm_scroller.eo.c \ + elm_scroller.eo.h EXTRA_DIST += \ elm_widget.eo \ @@ -697,7 +699,8 @@ EXTRA_DIST += \ elm_prefs.eo \ elm_progressbar.eo \ elm_radio.eo \ - elm_route.eo + elm_route.eo \ + elm_scroller.eo nodist_includesunstable_HEADERS = \ elm_widget.eo.h \ @@ -756,5 +759,6 @@ nodist_includesunstable_HEADERS = \ elm_prefs.eo.h \ elm_progressbar.eo.h \ elm_radio.eo.h \ - elm_route.eo.h + elm_route.eo.h \ + elm_scroller.eo.h diff --git a/src/lib/elm_scroller.c b/src/lib/elm_scroller.c index a09e007..71ff35a 100644 --- a/src/lib/elm_scroller.c +++ b/src/lib/elm_scroller.c @@ -9,8 +9,6 @@ #include "elm_widget_layout.h" #include "elm_widget_scroller.h" -EAPI Eo_Op ELM_OBJ_SCROLLER_BASE_ID = EO_NOOP; - #define MY_CLASS ELM_OBJ_SCROLLER_CLASS #define MY_CLASS_NAME "Elm_Scroller" @@ -48,17 +46,11 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = { }; #undef ELM_PRIV_SCROLLER_SIGNALS -static void -_elm_scroller_smart_event(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_scroller_elm_widget_event(Eo *obj, Elm_Scroller_Data *sd, Evas_Object *src, Evas_Callback_Type type, void *event_info) { - Evas_Object *src = va_arg(*list, Evas_Object *); - Evas_Callback_Type type = va_arg(*list, Evas_Callback_Type); - Evas_Event_Key_Down *ev = va_arg(*list, void *); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Elm_Scroller_Smart_Data *sd = _pd; - - if (ret) *ret = EINA_FALSE; (void) src; + Evas_Event_Key_Down *ev = event_info; Evas_Coord x = 0; Evas_Coord y = 0; @@ -73,9 +65,9 @@ _elm_scroller_smart_event(Eo *obj, void *_pd, va_list *list) Evas_Coord step_x = 0; Evas_Coord step_y = 0; - if (elm_widget_disabled_get(obj)) return; - if (type != EVAS_CALLBACK_KEY_DOWN) return; - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; + if (elm_widget_disabled_get(obj)) return EINA_FALSE; + if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE; + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE; eo_do(obj, elm_interface_scrollable_content_pos_get(&x, &y), @@ -130,8 +122,7 @@ _elm_scroller_smart_event(Eo *obj, void *_pd, va_list *list) { elm_widget_focus_steal(cur); ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (ret) *ret = EINA_TRUE; - return; + return EINA_TRUE; } cur_weight = 1.0 / cur_weight; if (cur_weight > weight) @@ -145,8 +136,7 @@ _elm_scroller_smart_event(Eo *obj, void *_pd, va_list *list) { elm_widget_focus_steal(new_focus); ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (ret) *ret = EINA_TRUE; - return; + return EINA_TRUE; } } else @@ -183,8 +173,7 @@ _elm_scroller_smart_event(Eo *obj, void *_pd, va_list *list) { elm_widget_focus_steal(new_focus); ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (ret) *ret = EINA_TRUE; - return; + return EINA_TRUE; } } } @@ -192,25 +181,25 @@ _elm_scroller_smart_event(Eo *obj, void *_pd, va_list *list) if ((!strcmp(ev->key, "Left")) || ((!strcmp(ev->key, "KP_Left")) && (!ev->string))) { - if (x <= 0) return; + if (x <= 0) return EINA_FALSE; x -= step_x; } else if ((!strcmp(ev->key, "Right")) || ((!strcmp(ev->key, "KP_Right")) && (!ev->string))) { - if (x >= (max_x - v_w)) return; + if (x >= (max_x - v_w)) return EINA_FALSE; x += step_x; } else if ((!strcmp(ev->key, "Up")) || ((!strcmp(ev->key, "KP_Up")) && (!ev->string))) { - if (y == 0) return; + if (y == 0) return EINA_FALSE; y -= step_y; } else if ((!strcmp(ev->key, "Down")) || ((!strcmp(ev->key, "KP_Down")) && (!ev->string))) { - if (y >= (max_y - v_h)) return; + if (y >= (max_y - v_h)) return EINA_FALSE; y += step_y; } else if ((!strcmp(ev->key, "Home")) || @@ -239,21 +228,17 @@ _elm_scroller_smart_event(Eo *obj, void *_pd, va_list *list) else y += page_y; } - else return; + else return EINA_FALSE; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; eo_do(obj, elm_interface_scrollable_content_pos_set(x, y, EINA_TRUE)); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_scroller_smart_activate(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_scroller_elm_widget_activate(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED, Elm_Activate act) { - Elm_Activate act = va_arg(*list, Elm_Activate); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; - Evas_Coord x = 0; Evas_Coord y = 0; Evas_Coord v_w = 0; @@ -261,8 +246,8 @@ _elm_scroller_smart_activate(Eo *obj, void *_pd EINA_UNUSED, va_list *list) Evas_Coord page_x = 0; Evas_Coord page_y = 0; - if (elm_widget_disabled_get(obj)) return; - if (act == ELM_ACTIVATE_DEFAULT) return; + if (elm_widget_disabled_get(obj)) return EINA_FALSE; + if (act == ELM_ACTIVATE_DEFAULT) return EINA_FALSE; eo_do(obj, elm_interface_scrollable_content_pos_get(&x, &y), @@ -299,17 +284,17 @@ _elm_scroller_smart_activate(Eo *obj, void *_pd EINA_UNUSED, va_list *list) } eo_do(obj, elm_interface_scrollable_content_pos_set(x, y, EINA_TRUE)); - if (ret) *ret = EINA_TRUE; + + return EINA_TRUE; } -static void -_elm_scroller_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_scroller_elm_layout_sizing_eval(Eo *obj, Elm_Scroller_Data *sd) { Evas_Coord vw = 0, vh = 0, minw = 0, minh = 0, maxw = 0, maxh = 0, w, h, vmw, vmh; double xw = 0.0, yw = 0.0; - Elm_Scroller_Smart_Data *sd = _pd; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); if (sd->content) @@ -364,43 +349,32 @@ _mirrored_set(Evas_Object *obj, eo_do(obj, elm_interface_scrollable_mirrored_set(mirrored)); } -static void -_elm_scroller_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_scroller_elm_widget_theme_apply(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; Eina_Bool int_ret; - eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret)); - if (!int_ret) return; + if (!int_ret) return EINA_FALSE; _mirrored_set(obj, elm_widget_mirrored_get(obj)); elm_layout_sizing_eval(obj); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_scroller_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_scroller_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Scroller_Data *_pd EINA_UNUSED) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_scroller_smart_focus_next(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_scroller_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Scroller_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) { - Elm_Focus_Direction dir = va_arg(*list, Elm_Focus_Direction); - Evas_Object **next = va_arg(*list, Evas_Object **); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; - Eina_Bool int_ret; Evas_Object *cur; - Elm_Scroller_Smart_Data *sd = _pd; - - if (!sd->content) return; + if (!sd->content) return EINA_FALSE; cur = sd->content; @@ -410,12 +384,10 @@ _elm_scroller_smart_focus_next(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_li if ((elm_widget_can_focus_get(cur)) || (elm_widget_child_can_focus_get(cur))) { - int_ret = elm_widget_focus_next_get(cur, dir, next); - if (ret) *ret = int_ret; - return; + return elm_widget_focus_next_get(cur, dir, next); } - return; + return EINA_FALSE; } /* Try focus cycle in subitem */ @@ -424,24 +396,20 @@ _elm_scroller_smart_focus_next(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_li if ((elm_widget_can_focus_get(cur)) || (elm_widget_child_can_focus_get(cur))) { - int_ret = elm_widget_focus_next_get(cur, dir, next); - if (ret) *ret = int_ret; - return; + return elm_widget_focus_next_get(cur, dir, next); } } /* Return */ *next = (Evas_Object *)obj; - int_ret = !elm_widget_focus_get(obj); - if (ret) *ret = int_ret; + return !elm_widget_focus_get(obj); } -static void -_elm_scroller_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_scroller_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Scroller_Data *_pd EINA_UNUSED) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - *ret = EINA_FALSE; + return EINA_FALSE; } static void @@ -463,17 +431,12 @@ _changed_size_hints_cb(void *data, elm_layout_sizing_eval(data); } -static void -_elm_scroller_smart_sub_object_del(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_scroller_elm_widget_sub_object_del(Eo *obj, Elm_Scroller_Data *sd, Evas_Object *sobj) { - Evas_Object *sobj = va_arg(*list, Evas_Object *); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; Eina_Bool int_ret; - Elm_Scroller_Smart_Data *sd = _pd; - eo_do_super(obj, MY_CLASS, elm_obj_widget_sub_object_del(sobj, &int_ret)); - if (!int_ret) return; + if (!int_ret) return EINA_FALSE; if (sobj == sd->content) { @@ -483,7 +446,7 @@ _elm_scroller_smart_sub_object_del(Eo *obj, void *_pd, va_list *list) sd->content = NULL; } - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } static void @@ -635,25 +598,17 @@ _page_change_cb(Evas_Object *obj, evas_object_smart_callback_call(obj, SIG_SCROLL_PAGE_CHANGE, NULL); } -static void -_elm_scroller_smart_content_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_scroller_elm_container_content_set(Eo *obj, Elm_Scroller_Data *sd, const char *part, Evas_Object *content) { - const char *part = va_arg(*list, const char *); - Evas_Object *content = va_arg(*list, Evas_Object *); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_TRUE; - Eina_Bool int_ret; - - Elm_Scroller_Smart_Data *sd = _pd; - if (part && strcmp(part, "default")) { + Eina_Bool int_ret; eo_do_super(obj, MY_CLASS, elm_obj_container_content_set(part, content, &int_ret)); - if (ret) *ret = int_ret; - return; + return int_ret; } - if (sd->content == content) return; + if (sd->content == content) return EINA_TRUE; evas_object_del(sd->content); sd->content = content; @@ -669,49 +624,40 @@ _elm_scroller_smart_content_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) elm_layout_sizing_eval(obj); - return; + return EINA_TRUE; } -static void -_elm_scroller_smart_content_get(Eo *obj, void *_pd, va_list *list) +EOLIAN static Evas_Object* +_elm_scroller_elm_container_content_get(Eo *obj, Elm_Scroller_Data *sd, const char *part) { - const char *part = va_arg(*list, const char *); - Evas_Object **ret = va_arg(*list, Evas_Object **); - - Elm_Scroller_Smart_Data *sd = _pd; - if (part && strcmp(part, "default")) { - eo_do_super(obj, MY_CLASS, elm_obj_container_content_get(part, ret)); - return; + Evas_Object *ret; + eo_do_super(obj, MY_CLASS, elm_obj_container_content_get(part, &ret)); + return ret; } - *ret = sd->content; + return sd->content; } -static void -_elm_scroller_smart_content_unset(Eo *obj, void *_pd, va_list *list) +EOLIAN static Evas_Object* +_elm_scroller_elm_container_content_unset(Eo *obj, Elm_Scroller_Data *sd, const char *part) { - const char *part = va_arg(*list, const char *); - Evas_Object **ret = va_arg(*list, Evas_Object **); - if (ret) *ret = NULL; - Evas_Object *int_ret; - - Elm_Scroller_Smart_Data *sd = _pd; - + Evas_Object *ret = NULL; if (part && strcmp(part, "default")) { - eo_do_super(obj, MY_CLASS, elm_obj_container_content_unset(part, &int_ret)); - return; + eo_do_super(obj, MY_CLASS, elm_obj_container_content_unset(part, &ret)); + return ret; } - if (!sd->content) return; + if (!sd->content) return NULL; - int_ret = sd->content; - if (ret) *ret = int_ret; + ret = sd->content; elm_widget_sub_object_del(obj, sd->content); eo_do(obj, elm_interface_scrollable_content_set(NULL)); sd->content = NULL; + + return ret; } static void @@ -735,10 +681,9 @@ _elm_scroller_content_viewport_resize_cb(Evas_Object *obj, elm_layout_sizing_eval(obj); } -static void -_elm_scroller_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_scroller_evas_smart_add(Eo *obj, Elm_Scroller_Data *priv) { - Elm_Scroller_Smart_Data *priv = _pd; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); Evas_Coord minw, minh; @@ -794,36 +739,25 @@ _elm_scroller_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) (_elm_scroller_content_viewport_resize_cb)); } -static void -_elm_scroller_smart_move(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_scroller_evas_smart_move(Eo *obj, Elm_Scroller_Data *sd, Evas_Coord x, Evas_Coord y) { - Evas_Coord x = va_arg(*list, Evas_Coord); - Evas_Coord y = va_arg(*list, Evas_Coord); - Elm_Scroller_Smart_Data *sd = _pd; - eo_do_super(obj, MY_CLASS, evas_obj_smart_move(x, y)); evas_object_move(sd->hit_rect, x, y); } -static void -_elm_scroller_smart_resize(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_scroller_evas_smart_resize(Eo *obj, Elm_Scroller_Data *sd, Evas_Coord w, Evas_Coord h) { - Evas_Coord w = va_arg(*list, Evas_Coord); - Evas_Coord h = va_arg(*list, Evas_Coord); - Elm_Scroller_Smart_Data *sd = _pd; - eo_do_super(obj, MY_CLASS, evas_obj_smart_resize(w, h)); evas_object_resize(sd->hit_rect, w, h); } -static void -_elm_scroller_smart_member_add(Eo *obj, void *_pd, va_list *list) +EOLIAN static void +_elm_scroller_evas_smart_member_add(Eo *obj, Elm_Scroller_Data *sd, Evas_Object *member) { - Evas_Object *member = va_arg(*list, Evas_Object *); - Elm_Scroller_Smart_Data *sd = _pd; - eo_do_super(obj, MY_CLASS, evas_obj_smart_member_add(member)); if (sd->hit_rect) @@ -839,8 +773,8 @@ elm_scroller_add(Evas_Object *parent) return obj; } -static void -_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_scroller_eo_base_constructor(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED) { eo_do_super(obj, MY_CLASS, eo_constructor()); eo_do(obj, @@ -849,20 +783,9 @@ _constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) } /* deprecated */ -EAPI void -elm_scroller_custom_widget_base_theme_set(Evas_Object *obj, - const char *klass, - const char *group) +EOLIAN static void +_elm_scroller_custom_widget_base_theme_set(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED, const char *klass, const char *group) { - ELM_SCROLLER_CHECK(obj); - eo_do(obj, elm_obj_scroller_custom_widget_base_theme_set(klass, group)); -} - -static void -_custom_widget_base_theme_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) -{ - const char *klass = va_arg(*list, const char *); - const char *group = va_arg(*list, const char *); ELM_LAYOUT_DATA_GET(obj, ld); EINA_SAFETY_ON_NULL_RETURN(klass); @@ -904,12 +827,9 @@ elm_scroller_policy_set(Evas_Object *obj, eo_do(obj, elm_interface_scrollable_policy_set(policy_h, policy_v)); } -static void -_policy_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_scroller_elm_interface_scrollable_policy_set(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) { - Elm_Scroller_Policy policy_h = va_arg(*list, Elm_Scroller_Policy); - Elm_Scroller_Policy policy_v = va_arg(*list, Elm_Scroller_Policy); - if ((policy_h >= ELM_SCROLLER_POLICY_LAST) || (policy_v >= ELM_SCROLLER_POLICY_LAST)) return; @@ -935,11 +855,9 @@ elm_scroller_single_direction_set(Evas_Object *obj, eo_do(obj, elm_interface_scrollable_single_direction_set(single_dir)); } -static void -_single_direction_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_scroller_elm_interface_scrollable_single_direction_set(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED, Elm_Scroller_Single_Direction single_dir) { - Elm_Scroller_Single_Direction single_dir = va_arg(*list, Elm_Scroller_Single_Direction); - if (single_dir >= ELM_SCROLLER_SINGLE_DIRECTION_LAST) return; @@ -957,14 +875,13 @@ elm_scroller_single_direction_get(const Evas_Object *obj) return single_dir; } -static void -_single_direction_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Elm_Scroller_Single_Direction +_elm_scroller_elm_interface_scrollable_single_direction_get(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED) { - Elm_Scroller_Single_Direction *ret = - va_arg(*list, Elm_Scroller_Single_Direction *); - + Elm_Scroller_Single_Direction ret = ELM_SCROLLER_SINGLE_DIRECTION_NONE; eo_do_super(obj, MY_CLASS, - elm_interface_scrollable_single_direction_get(ret)); + elm_interface_scrollable_single_direction_get(&ret)); + return ret; } EAPI void @@ -1059,14 +976,11 @@ elm_scroller_page_size_set(Evas_Object *obj, eo_do(obj, elm_interface_scrollable_page_size_set(h_pagesize, v_pagesize)); } -static void -_page_size_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_scroller_elm_interface_scrollable_page_size_set(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED, Evas_Coord h_pagesize, Evas_Coord v_pagesize) { double pagerel_h, pagerel_v; - Evas_Coord h_pagesize = va_arg(*list, Evas_Coord); - Evas_Coord v_pagesize = va_arg(*list, Evas_Coord); - eo_do(obj, elm_interface_scrollable_paging_get(&pagerel_h, &pagerel_v, NULL, NULL)); eo_do(obj, elm_interface_scrollable_paging_set(pagerel_h, pagerel_v, h_pagesize, v_pagesize)); @@ -1082,22 +996,9 @@ elm_scroller_page_size_get(const Evas_Object *obj, eo_do((Eo *)obj, elm_interface_scrollable_paging_get(NULL, NULL, h_pagesize, v_pagesize)); } -EAPI void -elm_scroller_page_scroll_limit_set(const Evas_Object *obj, - int page_limit_h, - int page_limit_v) +EOLIAN static void +_elm_scroller_page_scroll_limit_set(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED, int page_limit_h, int page_limit_v) { - ELM_SCROLLABLE_CHECK(obj); - eo_do((Eo *)obj, elm_obj_scroller_page_scroll_limit_set - (page_limit_h, page_limit_v)); -} - -static void -_page_scroll_limit_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) -{ - int page_limit_h = va_arg(*list, int); - int page_limit_v = va_arg(*list, int); - if (page_limit_h < 1) page_limit_h = 9999; if (page_limit_v < 1) @@ -1107,22 +1008,9 @@ _page_scroll_limit_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) (page_limit_h, page_limit_v)); } -EAPI void -elm_scroller_page_scroll_limit_get(const Evas_Object *obj, - int *page_limit_h, - int *page_limit_v) +EOLIAN static void +_elm_scroller_page_scroll_limit_get(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED, int *page_limit_h, int *page_limit_v) { - ELM_SCROLLABLE_CHECK(obj); - eo_do((Eo *)obj, elm_obj_scroller_page_scroll_limit_get - (page_limit_h, page_limit_v)); -} - -static void -_page_scroll_limit_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) -{ - int *page_limit_h = va_arg(*list, int *); - int *page_limit_v = va_arg(*list, int *); - eo_do(obj, elm_interface_scrollable_page_scroll_limit_get (page_limit_h, page_limit_v)); } @@ -1220,101 +1108,25 @@ elm_scroller_movement_block_get(const Evas_Object *obj) return block; } -EAPI void -elm_scroller_propagate_events_set(Evas_Object *obj, - Eina_Bool propagation) -{ - ELM_SCROLLABLE_CHECK(obj); - eo_do(obj, elm_obj_scroller_propagate_events_set(propagation)); -} - -static void -_propagate_events_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_scroller_propagate_events_set(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED, Eina_Bool propagation) { - Eina_Bool propagation = va_arg(*list, int); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); evas_object_propagate_events_set(wd->resize_obj, propagation); } -EAPI Eina_Bool -elm_scroller_propagate_events_get(const Evas_Object *obj) +EOLIAN static Eina_Bool +_elm_scroller_propagate_events_get(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED) { - ELM_SCROLLABLE_CHECK(obj, EINA_FALSE); - - Eina_Bool ret; - eo_do((Eo *) obj, elm_obj_scroller_propagate_events_get(&ret)); - return ret; + ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); + return evas_object_propagate_events_get(wd->resize_obj); } static void -_propagate_events_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +_elm_scroller_class_constructor(Eo_Class *klass) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); - *ret = evas_object_propagate_events_get(wd->resize_obj); -} - -static void -_class_constructor(Eo_Class *klass) -{ - const Eo_Op_Func_Description func_desc[] = { - EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), - - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MEMBER_ADD), _elm_scroller_smart_member_add), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_scroller_smart_add), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_RESIZE), _elm_scroller_smart_resize), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MOVE), _elm_scroller_smart_move), - - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_scroller_smart_theme), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_EVENT), _elm_scroller_smart_event), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS), _elm_scroller_smart_focus_next_manager_is), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT), _elm_scroller_smart_focus_next), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS), _elm_scroller_smart_focus_direction_manager_is), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_SUB_OBJECT_DEL), _elm_scroller_smart_sub_object_del), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_ACTIVATE), _elm_scroller_smart_activate), - - EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_SET), _elm_scroller_smart_content_set), - EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_GET), _elm_scroller_smart_content_get), - EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_UNSET), _elm_scroller_smart_content_unset), - - EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL), _elm_scroller_smart_sizing_eval), - - EO_OP_FUNC(ELM_INTERFACE_SCROLLABLE_ID(ELM_INTERFACE_SCROLLABLE_SUB_ID_POLICY_SET), _policy_set), - EO_OP_FUNC(ELM_INTERFACE_SCROLLABLE_ID(ELM_INTERFACE_SCROLLABLE_SUB_ID_SINGLE_DIRECTION_SET), _single_direction_set), - EO_OP_FUNC(ELM_INTERFACE_SCROLLABLE_ID(ELM_INTERFACE_SCROLLABLE_SUB_ID_SINGLE_DIRECTION_GET), _single_direction_get), - EO_OP_FUNC(ELM_INTERFACE_SCROLLABLE_ID(ELM_INTERFACE_SCROLLABLE_SUB_ID_PAGE_SIZE_SET), _page_size_set), - - EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_CUSTOM_WIDGET_BASE_THEME_SET), _custom_widget_base_theme_set), - EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_SET), _page_scroll_limit_set), - EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_GET), _page_scroll_limit_get), - EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_SET), _propagate_events_set), - EO_OP_FUNC(ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_GET), _propagate_events_get), - EO_OP_FUNC_SENTINEL - }; - eo_class_funcs_set(klass, func_desc); - evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); } -static const Eo_Op_Description op_desc[] = { - EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_CUSTOM_WIDGET_BASE_THEME_SET, "DEPRECATED: Set custom theme elements for the scroller"), - EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_SET, "Set the maxium of the movable page at a flicking."), - EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_PAGE_SCROLL_LIMIT_GET, "Get the maxium of the movable page at a flicking."), - EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_SET, "Set event propagation on a scroller."), - EO_OP_DESCRIPTION(ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_GET, "Get event propagation for a scroller."), - EO_OP_DESCRIPTION_SENTINEL -}; - -static const Eo_Class_Description class_desc = { - EO_VERSION, - MY_CLASS_NAME, - EO_CLASS_TYPE_REGULAR, - EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_SCROLLER_BASE_ID, op_desc, ELM_OBJ_SCROLLER_SUB_ID_LAST), - NULL, - sizeof(Elm_Scroller_Smart_Data), - _class_constructor, - NULL -}; - -EO_DEFINE_CLASS(elm_obj_scroller_class_get, &class_desc, ELM_OBJ_LAYOUT_CLASS, ELM_INTERFACE_SCROLLABLE_CLASS, NULL); +#include "elm_scroller.eo.c" diff --git a/src/lib/elm_scroller.eo b/src/lib/elm_scroller.eo new file mode 100644 index 0000000..829cb9e --- /dev/null +++ b/src/lib/elm_scroller.eo @@ -0,0 +1,105 @@ +class Elm_Scroller (Elm_Layout, Elm_Interface_Scrollable) +{ + eo_prefix: elm_obj_scroller; + properties { + propagate_events { + set { + /*@ + @brief Set event propagation on a scroller + + This enables or disables event propagation from the scroller + content to the scroller and its parent. By default event + propagation is @b enabled. + + @ingroup Scroller */ + } + get { + /*@ + @brief Get event propagation for a scroller + + @return The propagation state + + This gets the event propagation for a scroller. + + @see elm_scroller_propagate_events_set() + + @ingroup Scroller */ + } + values { + Eina_Bool propagation; /*@ If propagation is enabled or not */ + } + } + custom_widget_base_theme { + set { + /*@ Set custom theme elements for the scroller */ + } + values { + const char *klass; + const char *group; + } + } + } + methods { + page_scroll_limit_set { + /*@ + @brief Set the maxium of the movable page at a flicking. + + The value of maxium movable page should be more than 1. + + @see elm_scroller_page_scroll_limit_get() + + @since 1.8 + + @ingroup Scroller */ + + const; + params { + @in int page_limit_h; /*@ The maxium of the movable horizontal page */ + @in int page_limit_v; /*@ The maxium of the movable vertical page */ + } + } + page_scroll_limit_get { + /*@ + @brief Get the maxium of the movable page at a flicking. + + @see elm_scroller_page_scroll_limit_set() + + @since 1.8 + + @ingroup Scroller */ + + const; + params { + @in int *page_limit_h; /*@ The maxium of the movable horizontal page */ + @in int *page_limit_v; /*@ The maxium of the movable vertical page */ + } + } + } + implements { + class::constructor; + Eo_Base::constructor; + Evas_Smart::move; + Evas_Smart::add; + Evas_Smart::member_add; + Evas_Smart::resize; + Elm_Widget::theme_apply; + Elm_Widget::activate; + Elm_Widget::focus_next_manager_is; + Elm_Widget::focus_direction_manager_is; + Elm_Widget::focus_next; + Elm_Widget::sub_object_del; + Elm_Widget::event; + Elm_Container::content_get; + Elm_Container::content_set; + Elm_Container::content_unset; + Elm_Layout::sizing_eval; + Elm_Interface_Scrollable::page_size::set; + Elm_Interface_Scrollable::policy::set; + Elm_Interface_Scrollable::single_direction; + } + events { + focused; + unfocused; + } + +} diff --git a/src/lib/elm_scroller_eo.h b/src/lib/elm_scroller_eo.h index ac701c2..296518a 100644 --- a/src/lib/elm_scroller_eo.h +++ b/src/lib/elm_scroller_eo.h @@ -3,6 +3,9 @@ * * @{ */ +#include "elm_scroller.eo.h" + +#if 0 #define ELM_OBJ_SCROLLER_CLASS elm_obj_scroller_class_get() const Eo_Class *elm_obj_scroller_class_get(void) EINA_CONST; @@ -85,6 +88,7 @@ enum */ #define elm_obj_scroller_propagate_events_get(ret) ELM_OBJ_SCROLLER_ID(ELM_OBJ_SCROLLER_SUB_ID_PROPAGATE_EVENTS_GET), EO_TYPECHECK(Eina_Bool *, ret) +#endif /** * @} diff --git a/src/lib/elm_widget_scroller.h b/src/lib/elm_widget_scroller.h index 222999b..4ed7f43 100644 --- a/src/lib/elm_widget_scroller.h +++ b/src/lib/elm_widget_scroller.h @@ -17,8 +17,8 @@ /** * Base widget smart data extended with scroller instance data. */ -typedef struct _Elm_Scroller_Smart_Data Elm_Scroller_Smart_Data; -struct _Elm_Scroller_Smart_Data +typedef struct _Elm_Scroller_Data Elm_Scroller_Data; +struct _Elm_Scroller_Data { Evas_Object *hit_rect; Evas_Object *g_layer; @@ -34,7 +34,7 @@ struct _Elm_Scroller_Smart_Data */ #define ELM_SCROLLER_DATA_GET(o, sd) \ - Elm_Scroller_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_SCROLLER_CLASS) + Elm_Scroller_Data * sd = eo_data_scope_get(o, ELM_OBJ_SCROLLER_CLASS) #define ELM_SCROLLER_DATA_GET_OR_RETURN(o, ptr) \ ELM_SCROLLER_DATA_GET(o, ptr); \ --