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 <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D9444
This commit is contained in:
Jaehyun Cho 2019-07-30 07:05:02 +00:00 committed by Marcel Hollerbach
parent e092878d11
commit 959c68ca2e
3 changed files with 78 additions and 0 deletions

View File

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

View File

@ -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"

View File

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