raster pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=e52ddca9b0d424c5e1dfeeec501f4a95544e3dbb
commit e52ddca9b0d424c5e1dfeeec501f4a95544e3dbb Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com> Date: Tue Oct 22 11:01:00 2013 +0100 elm scroller - also allow animator still to ALSO drive scroll for smoothing --- src/lib/elm_interface_scrollable.c | 22 +++++++++++++++++++++- src/lib/elm_interface_scrollable.h | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_interface_scrollable.c b/src/lib/elm_interface_scrollable.c index 30f19d1..0a21041 100644 --- a/src/lib/elm_interface_scrollable.c +++ b/src/lib/elm_interface_scrollable.c @@ -1449,6 +1449,7 @@ _elm_scroll_bounce_eval(Elm_Scrollable_Smart_Interface_Data *sid) if (sid->down.hold_active) { sid->down.hold_active = EINA_FALSE; + ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del); ELM_SAFE_FREE(sid->down.hold_job, ecore_job_del); if (sid->content_info.resized) _elm_scroll_wanted_region_set(sid->obj); @@ -1772,6 +1773,7 @@ _elm_scroll_content_region_show_internal(Evas_Object *obj, if (sid->down.hold_active) { sid->down.hold_active = EINA_FALSE; + ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del); ELM_SAFE_FREE(sid->down.hold_job, ecore_job_del); _elm_scroll_drag_stop(sid); if (sid->content_info.resized) @@ -2587,6 +2589,7 @@ _elm_scroll_mouse_up_event_cb(void *data, if (sid->down.hold_active) { sid->down.hold_active = EINA_FALSE; + ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del); ELM_SAFE_FREE(sid->down.hold_job, ecore_job_del); if (sid->content_info.resized) _elm_scroll_wanted_region_set(sid->obj); @@ -2672,6 +2675,7 @@ _elm_scroll_mouse_down_event_cb(void *data, } if (sid->down.hold_active) { + ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del); ELM_SAFE_FREE(sid->down.hold_job, ecore_job_del); _elm_scroll_drag_stop(sid); if (sid->content_info.resized) @@ -2875,7 +2879,7 @@ _elm_scroll_hold_job(void *data) Evas_Coord ox = 0, oy = 0, fx = 0, fy = 0; sid->down.hold_active = EINA_FALSE; - + fx = sid->down.hold_x; fy = sid->down.hold_y; @@ -2985,6 +2989,18 @@ _elm_scroll_hold_job(void *data) } static Eina_Bool +_elm_scroll_hold_animator(void *data) +{ + Elm_Scrollable_Smart_Interface_Data *sid = data; + + if (!sid->down.hold_job) + ecore_job_del(sid->down.hold_job); + sid->down.hold_job = + ecore_job_add(_elm_scroll_hold_job, sid); + return ECORE_CALLBACK_RENEW; +} + +static Eina_Bool _elm_scroll_on_hold_animator(void *data) { double t, td; @@ -3279,6 +3295,9 @@ _elm_scroll_mouse_move_event_cb(void *data, sid->down.hold_x = x; sid->down.hold_y = y; + if (!sid->down.hold_animator) + sid->down.hold_animator = + ecore_animator_add(_elm_scroll_hold_animator, sid); if (!sid->down.hold_job) ecore_job_del(sid->down.hold_job); sid->down.hold_job = @@ -4579,6 +4598,7 @@ _elm_scroll_interface_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) if (!sid->extern_pan) evas_object_del(sid->pan_obj); if (sid->down.hold_job) ecore_job_del(sid->down.hold_job); + 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.momentum_animator) ecore_animator_del(sid->down.momentum_animator); if (sid->down.bounce_x_animator) ecore_animator_del(sid->down.bounce_x_animator); diff --git a/src/lib/elm_interface_scrollable.h b/src/lib/elm_interface_scrollable.h index 5b03313..49865c1 100644 --- a/src/lib/elm_interface_scrollable.h +++ b/src/lib/elm_interface_scrollable.h @@ -1120,6 +1120,7 @@ struct _Elm_Scrollable_Smart_Interface_Data int hdir, vdir; Ecore_Job *hold_job; + Ecore_Animator *hold_animator; Ecore_Animator *onhold_animator; Ecore_Animator *momentum_animator; Ecore_Animator *bounce_x_animator; --