forked from enlightenment/efl
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:
parent
e092878d11
commit
959c68ca2e
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue