From 959c68ca2e607c19c2b3e9c43decf8db0a41f4fb Mon Sep 17 00:00:00 2001 From: Jaehyun Cho Date: Tue, 30 Jul 2019 07:05:02 +0000 Subject: [PATCH] efl_ui_spotlight: add scroll_block to Manager_Scroll To support blocking of scrolling movement, @property scroll_block has been added to Manager_Scroll. If scroll_block is set to be true, then scrolling movement by mouse input is blocked. Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D9444 --- src/bin/elementary/test_ui_spotlight.c | 36 +++++++++++++++++++ .../efl_ui_spotlight_manager_scroll.c | 25 +++++++++++++ .../efl_ui_spotlight_manager_scroll.eo | 17 +++++++++ 3 files changed, 78 insertions(+) diff --git a/src/bin/elementary/test_ui_spotlight.c b/src/bin/elementary/test_ui_spotlight.c index 428ea52066..9f1f9a2ab2 100644 --- a/src/bin/elementary/test_ui_spotlight.c +++ b/src/bin/elementary/test_ui_spotlight.c @@ -494,6 +494,40 @@ view_animation_cb(void *data, efl_gfx_entity_visible_set(ck, 1); } +static void +_scroll_block_check_cb(void *data, const Efl_Event *ev) +{ + Params *params = data; + + efl_ui_spotlight_manager_scroll_block_set(efl_ui_spotlight_manager_get(params->spotlight), efl_ui_check_selected_get(ev->object)); +} + +static void +scroll_block_cb(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Params *params = data; + Evas_Object *navi = params->navi; + Eo *btn, *box, *ck; + + btn = efl_add(EFL_UI_BUTTON_CLASS, navi, + efl_text_set(efl_added, "Back"), + efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, + back_btn_cb, navi)); + + box = efl_add(EFL_UI_BOX_CLASS, navi, + elm_naviframe_item_push(navi, "Scroll Block", btn, NULL, + efl_added, NULL)); + + ck = efl_add(EFL_UI_CHECK_CLASS, box); + efl_event_callback_add(ck, EFL_UI_CHECK_EVENT_SELECTED_CHANGED, _scroll_block_check_cb, params); + efl_ui_check_selected_set(ck, efl_ui_spotlight_manager_scroll_block_get(efl_ui_spotlight_manager_get(params->spotlight))); + efl_text_set(ck, "Scroll Block"); + efl_pack_end(box, ck); + efl_gfx_entity_visible_set(ck, 1); +} + static void pack_cb(void *data, Evas_Object *obj EINA_UNUSED, @@ -835,6 +869,7 @@ test_ui_spotlight_stack(void *data EINA_UNUSED, elm_list_item_append(list, "Active Index", NULL, NULL, active_index_cb, params); elm_list_item_append(list, "Indicator", NULL, NULL, indicator_cb, params); elm_list_item_append(list, "Animation", NULL, NULL, view_animation_cb, params); + elm_list_item_append(list, "Scroll Block", NULL, NULL, scroll_block_cb, params); elm_list_go(list); efl_event_callback_add(list, EFL_EVENT_DEL, list_del_cb, params); @@ -1036,6 +1071,7 @@ test_ui_spotlight_scroll(void *data EINA_UNUSED, elm_list_item_append(list, "Active Index", NULL, NULL, active_index_cb, params); elm_list_item_append(list, "Indicator", NULL, NULL, indicator_cb, params); elm_list_item_append(list, "Animation", NULL, NULL, view_animation_cb, params); + elm_list_item_append(list, "Scroll Block", NULL, NULL, scroll_block_cb, params); elm_list_go(list); efl_event_callback_add(list, EFL_EVENT_DEL, list_del_cb, params); diff --git a/src/lib/elementary/efl_ui_spotlight_manager_scroll.c b/src/lib/elementary/efl_ui_spotlight_manager_scroll.c index 778079d864..bd0000faa8 100644 --- a/src/lib/elementary/efl_ui_spotlight_manager_scroll.c +++ b/src/lib/elementary/efl_ui_spotlight_manager_scroll.c @@ -22,6 +22,7 @@ typedef struct { Eina_Position2D mouse_start; } mouse_move; Eina_Bool animation; + Eina_Bool scroll_block; } Efl_Ui_Spotlight_Manager_Scroll_Data; #define MY_CLASS EFL_UI_SPOTLIGHT_MANAGER_SCROLL_CLASS @@ -100,6 +101,8 @@ _mouse_down_cb(void *data, if (efl_content_count(pd->container) == 0) return; + if (pd->scroll_block) return; + efl_event_callback_del(pd->container, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _page_set_animation, obj); pd->mouse_move.active = EINA_TRUE; @@ -123,6 +126,7 @@ _mouse_move_cb(void *data, if (efl_input_event_flags_get(ev) & EFL_INPUT_FLAGS_PROCESSED) return; if (!pd->mouse_move.active) return; + if (pd->scroll_block) return; pos = efl_input_pointer_position_get(ev); pos_y_diff = pd->mouse_move.mouse_start.x - pos.x; @@ -149,6 +153,7 @@ _mouse_up_cb(void *data, if (efl_input_event_flags_get(ev) & EFL_INPUT_FLAGS_PROCESSED) return; if (!pd->mouse_move.active) return; + if (pd->scroll_block) return; double absolut_current_position = (double)pd->transition.from + pd->transition.progress; int result = round(absolut_current_position); @@ -332,5 +337,25 @@ _efl_ui_spotlight_manager_scroll_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight efl_invalidate(efl_super(obj, MY_CLASS)); } +EOLIAN static void +_efl_ui_spotlight_manager_scroll_scroll_block_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, Eina_Bool scroll_block) +{ + if (pd->scroll_block == scroll_block) return; + + pd->scroll_block = scroll_block; + if (scroll_block && pd->mouse_move.active) + { + pd->mouse_move.active = EINA_FALSE; + pd->transition.active = EINA_FALSE; + pd->transition.progress = 0.0; + _apply_box_properties(obj, pd); + } +} + +EOLIAN static Eina_Bool +_efl_ui_spotlight_manager_scroll_scroll_block_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd) +{ + return pd->scroll_block; +} #include "efl_ui_spotlight_manager_scroll.eo.c" diff --git a/src/lib/elementary/efl_ui_spotlight_manager_scroll.eo b/src/lib/elementary/efl_ui_spotlight_manager_scroll.eo index 942ad192ca..2ac04924c6 100644 --- a/src/lib/elementary/efl_ui_spotlight_manager_scroll.eo +++ b/src/lib/elementary/efl_ui_spotlight_manager_scroll.eo @@ -1,5 +1,22 @@ class @beta Efl.Ui.Spotlight.Manager_Scroll extends Efl.Ui.Spotlight.Manager { + methods { + @property scroll_block { + [[Blocking of scrolling + + This function will block scrolling movement (by input of a user). + You can disable scrolling movement. The default value is $false, + where the scrolling movement is allowed. + ]] + set { + } + get { + } + values { + scroll_block: bool; [[$true if block scrolling movement, $false otherwise]] + } + } + } implements { Efl.Ui.Spotlight.Manager.bind; Efl.Ui.Spotlight.Manager.content_add;