forked from enlightenment/efl
elm scroller - try a simpler approach - animator queues idle enterer
this allows the idle enterer to pick up all prior stored events like move coords etc. just before going idle (and rendering).
This commit is contained in:
parent
8dab5200ea
commit
c09a0d9ea3
|
@ -1452,6 +1452,11 @@ _elm_scroll_bounce_eval(Elm_Scrollable_Smart_Interface_Data *sid)
|
||||||
if (sid->content_info.resized)
|
if (sid->content_info.resized)
|
||||||
_elm_scroll_wanted_region_set(sid->obj);
|
_elm_scroll_wanted_region_set(sid->obj);
|
||||||
}
|
}
|
||||||
|
if (sid->down.hold_enterer)
|
||||||
|
{
|
||||||
|
ELM_SAFE_FREE(sid->down.hold_enterer, ecore_idle_enterer_del);
|
||||||
|
}
|
||||||
|
|
||||||
eo_do(sid->pan_obj, elm_obj_pan_pos_max_get(&mx, &my));
|
eo_do(sid->pan_obj, elm_obj_pan_pos_max_get(&mx, &my));
|
||||||
eo_do(sid->pan_obj, elm_obj_pan_pos_min_get(&minx, &miny));
|
eo_do(sid->pan_obj, elm_obj_pan_pos_min_get(&minx, &miny));
|
||||||
eo_do(sid->pan_obj, elm_obj_pan_pos_get(&px, &py));
|
eo_do(sid->pan_obj, elm_obj_pan_pos_get(&px, &py));
|
||||||
|
@ -1775,6 +1780,10 @@ _elm_scroll_content_region_show_internal(Evas_Object *obj,
|
||||||
if (sid->content_info.resized)
|
if (sid->content_info.resized)
|
||||||
_elm_scroll_wanted_region_set(sid->obj);
|
_elm_scroll_wanted_region_set(sid->obj);
|
||||||
}
|
}
|
||||||
|
if (sid->down.hold_enterer)
|
||||||
|
{
|
||||||
|
ELM_SAFE_FREE(sid->down.hold_enterer, ecore_idle_enterer_del);
|
||||||
|
}
|
||||||
if (sid->down.momentum_animator)
|
if (sid->down.momentum_animator)
|
||||||
{
|
{
|
||||||
ELM_SAFE_FREE(sid->down.momentum_animator, ecore_animator_del);
|
ELM_SAFE_FREE(sid->down.momentum_animator, ecore_animator_del);
|
||||||
|
@ -2588,6 +2597,10 @@ _elm_scroll_mouse_up_event_cb(void *data,
|
||||||
if (sid->content_info.resized)
|
if (sid->content_info.resized)
|
||||||
_elm_scroll_wanted_region_set(sid->obj);
|
_elm_scroll_wanted_region_set(sid->obj);
|
||||||
}
|
}
|
||||||
|
if (sid->down.hold_enterer)
|
||||||
|
{
|
||||||
|
ELM_SAFE_FREE(sid->down.hold_enterer, ecore_idle_enterer_del);
|
||||||
|
}
|
||||||
if (sid->down.scroll)
|
if (sid->down.scroll)
|
||||||
{
|
{
|
||||||
ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
|
ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
|
||||||
|
@ -2674,6 +2687,10 @@ _elm_scroll_mouse_down_event_cb(void *data,
|
||||||
if (sid->content_info.resized)
|
if (sid->content_info.resized)
|
||||||
_elm_scroll_wanted_region_set(sid->obj);
|
_elm_scroll_wanted_region_set(sid->obj);
|
||||||
}
|
}
|
||||||
|
if (sid->down.hold_enterer)
|
||||||
|
{
|
||||||
|
ELM_SAFE_FREE(sid->down.hold_enterer, ecore_idle_enterer_del);
|
||||||
|
}
|
||||||
if (sid->down.momentum_animator)
|
if (sid->down.momentum_animator)
|
||||||
{
|
{
|
||||||
ELM_SAFE_FREE(sid->down.momentum_animator, ecore_animator_del);
|
ELM_SAFE_FREE(sid->down.momentum_animator, ecore_animator_del);
|
||||||
|
@ -2866,11 +2883,13 @@ _elm_scroll_down_coord_eval(Elm_Scrollable_Smart_Interface_Data *sid,
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_elm_scroll_hold_animator(void *data)
|
_elm_scroll_hold_enterer(void *data)
|
||||||
{
|
{
|
||||||
Elm_Scrollable_Smart_Interface_Data *sid = data;
|
Elm_Scrollable_Smart_Interface_Data *sid = data;
|
||||||
Evas_Coord ox = 0, oy = 0, fx = 0, fy = 0;
|
Evas_Coord ox = 0, oy = 0, fx = 0, fy = 0;
|
||||||
|
|
||||||
|
sid->down.hold_enterer = NULL;
|
||||||
|
|
||||||
fx = sid->down.hold_x;
|
fx = sid->down.hold_x;
|
||||||
fy = sid->down.hold_y;
|
fy = sid->down.hold_y;
|
||||||
|
|
||||||
|
@ -2978,6 +2997,17 @@ _elm_scroll_hold_animator(void *data)
|
||||||
|
|
||||||
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(ox, oy, EINA_TRUE));
|
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(ox, oy, EINA_TRUE));
|
||||||
|
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_elm_scroll_hold_animator(void *data)
|
||||||
|
{
|
||||||
|
Elm_Scrollable_Smart_Interface_Data *sid = data;
|
||||||
|
|
||||||
|
if (sid->down.hold_enterer) ecore_idle_enterer_del(sid->down.hold_enterer);
|
||||||
|
sid->down.hold_enterer =
|
||||||
|
ecore_idle_enterer_before_add(_elm_scroll_hold_enterer, sid);
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4573,6 +4603,7 @@ _elm_scroll_interface_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
||||||
eo_do(obj, elm_scrollable_interface_content_set(NULL));
|
eo_do(obj, elm_scrollable_interface_content_set(NULL));
|
||||||
if (!sid->extern_pan) evas_object_del(sid->pan_obj);
|
if (!sid->extern_pan) evas_object_del(sid->pan_obj);
|
||||||
|
|
||||||
|
if (sid->down.hold_enterer) ecore_idle_enterer_del(sid->down.hold_enterer);
|
||||||
if (sid->down.hold_animator) ecore_animator_del(sid->down.hold_animator);
|
if (sid->down.hold_animator) ecore_animator_del(sid->down.hold_animator);
|
||||||
if (sid->down.onhold_animator) ecore_animator_del(sid->down.onhold_animator);
|
if (sid->down.onhold_animator) ecore_animator_del(sid->down.onhold_animator);
|
||||||
if (sid->down.momentum_animator) ecore_animator_del(sid->down.momentum_animator);
|
if (sid->down.momentum_animator) ecore_animator_del(sid->down.momentum_animator);
|
||||||
|
|
|
@ -1119,6 +1119,7 @@ struct _Elm_Scrollable_Smart_Interface_Data
|
||||||
Evas_Coord locked_x, locked_y;
|
Evas_Coord locked_x, locked_y;
|
||||||
int hdir, vdir;
|
int hdir, vdir;
|
||||||
|
|
||||||
|
Ecore_Idle_Enterer *hold_enterer;
|
||||||
Ecore_Animator *hold_animator;
|
Ecore_Animator *hold_animator;
|
||||||
Ecore_Animator *onhold_animator;
|
Ecore_Animator *onhold_animator;
|
||||||
Ecore_Animator *momentum_animator;
|
Ecore_Animator *momentum_animator;
|
||||||
|
|
Loading…
Reference in New Issue