cedric pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=43740741bcfe129af71e4d7718beaa2205e2276d

commit 43740741bcfe129af71e4d7718beaa2205e2276d
Author: Cedric BAIL <ced...@osg.samsung.com>
Date:   Tue Jan 26 15:51:49 2016 -0800

    interface_scrollable: drop use of ecore_animator in favor of 
efl.core.animator tick
---
 src/lib/elm_interface_scrollable.c | 192 ++++++++++++++++++++-----------------
 src/lib/elm_interface_scrollable.h |  13 +--
 2 files changed, 111 insertions(+), 94 deletions(-)

diff --git a/src/lib/elm_interface_scrollable.c 
b/src/lib/elm_interface_scrollable.c
index ab2db63..37451bc 100644
--- a/src/lib/elm_interface_scrollable.c
+++ b/src/lib/elm_interface_scrollable.c
@@ -30,6 +30,17 @@
        return val;                                              \
     }
 
+#define ELM_ANIMATOR_CONNECT(Obj, Bool, Callback, Data)                 \
+  eo_do(Obj,                                                            \
+        eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, Callback, 
Data), \
+        eo_event_callback_add(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, Callback, 
Data)); \
+  Bool = 1;
+
+#define ELM_ANIMATOR_DISCONNECT(Obj, Bool, Callback, Data)              \
+  eo_do(Obj,                                                            \
+        eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, Callback, 
Data)); \
+  Bool = 0;
+
 static const char SIG_CHANGED[] = "changed";
 static const Evas_Smart_Cb_Description _smart_callbacks[] = {
    {SIG_CHANGED, ""},
@@ -49,6 +60,15 @@ static void
 _elm_scroll_wanted_coordinates_update(Elm_Scrollable_Smart_Interface_Data *sid,
                                       Evas_Coord x,
                                       Evas_Coord y);
+
+static Eina_Bool _elm_scroll_hold_animator(void *data, Eo *o, const 
Eo_Event_Description *desc, void *event_info);
+static Eina_Bool _elm_scroll_on_hold_animator(void *data, Eo *o, const 
Eo_Event_Description *desc, void *event_info);
+static Eina_Bool _elm_scroll_scroll_to_y_animator(void *data, Eo *o, const 
Eo_Event_Description *desc, void *event_info);
+static Eina_Bool _elm_scroll_scroll_to_x_animator(void *data, Eo *o, const 
Eo_Event_Description *desc, void *event_info);
+static Eina_Bool _elm_scroll_bounce_y_animator(void *data, Eo *o, const 
Eo_Event_Description *desc, void *event_info);
+static Eina_Bool _elm_scroll_bounce_x_animator(void *data, Eo *o, const 
Eo_Event_Description *desc, void *event_info);
+static Eina_Bool _elm_scroll_momentum_animator(void *data, Eo *o, const 
Eo_Event_Description *desc, void *event_info);
+
 static double
 _round(double value, int pos)
 {
@@ -1269,7 +1289,7 @@ 
_elm_scroll_momentum_end(Elm_Scrollable_Smart_Interface_Data *sid)
         eo_do(sid->obj, elm_interface_scrollable_content_pos_get(&px, &py));
         _elm_scroll_wanted_coordinates_update(sid, px, py);
 
-        ELM_SAFE_FREE(sid->down.momentum_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.momentum_animator, 
_elm_scroll_momentum_animator, sid);
         sid->down.bounce_x_hold = EINA_FALSE;
         sid->down.bounce_y_hold = EINA_FALSE;
         sid->down.ax = 0;
@@ -1284,7 +1304,7 @@ 
_elm_scroll_momentum_end(Elm_Scrollable_Smart_Interface_Data *sid)
 }
 
 static Eina_Bool
-_elm_scroll_bounce_x_animator(void *data)
+_elm_scroll_bounce_x_animator(void *data, Eo *o EINA_UNUSED, const 
Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
 {
    ELM_SCROLL_IFACE_DATA_GET_OR_RETURN_VAL(data, sid, EINA_FALSE);
    Evas_Coord x, y, dx, w, odx, ed, md;
@@ -1327,20 +1347,19 @@ _elm_scroll_bounce_x_animator(void *data)
              if ((!sid->down.bounce_y_animator) &&
                  (!sid->scrollto.y.animator))
                _elm_scroll_anim_stop(sid);
-             sid->down.bounce_x_animator = NULL;
              sid->down.pdx = 0;
              sid->bouncemex = EINA_FALSE;
              _elm_scroll_momentum_end(sid);
              if (sid->content_info.resized)
                _elm_scroll_wanted_region_set(sid->obj);
-             return ECORE_CALLBACK_CANCEL;
+             ELM_ANIMATOR_CONNECT(sid->obj, sid->down.bounce_x_animator, 
_elm_scroll_bounce_x_animator, sid->obj);
           }
      }
-   return ECORE_CALLBACK_RENEW;
+   return EO_CALLBACK_CONTINUE;
 }
 
 static Eina_Bool
-_elm_scroll_bounce_y_animator(void *data)
+_elm_scroll_bounce_y_animator(void *data, Eo *o EINA_UNUSED, const 
Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
 {
    ELM_SCROLL_IFACE_DATA_GET_OR_RETURN_VAL(data, sid, EINA_FALSE);
    Evas_Coord x, y, dy, h, ody, ed, md;
@@ -1383,17 +1402,16 @@ _elm_scroll_bounce_y_animator(void *data)
              if ((!sid->down.bounce_x_animator) &&
                  (!sid->scrollto.y.animator))
                _elm_scroll_anim_stop(sid);
-             sid->down.bounce_y_animator = NULL;
              sid->down.pdy = 0;
              sid->bouncemey = EINA_FALSE;
              _elm_scroll_momentum_end(sid);
              if (sid->content_info.resized)
                _elm_scroll_wanted_region_set(sid->obj);
-             return ECORE_CALLBACK_CANCEL;
+             ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_y_animator, 
_elm_scroll_bounce_y_animator, sid->obj);
           }
      }
 
-   return ECORE_CALLBACK_RENEW;
+   return EO_CALLBACK_CONTINUE;
 }
 
 static void
@@ -1408,13 +1426,13 @@ 
_elm_scroll_bounce_eval(Elm_Scrollable_Smart_Interface_Data *sid)
    if (sid->down.now) return;  // down bounce while still held down
    if (sid->down.onhold_animator)
      {
-        ELM_SAFE_FREE(sid->down.onhold_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.onhold_animator, 
_elm_scroll_on_hold_animator, sid);
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
      }
    if (sid->down.hold_animator)
      {
-        ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.hold_animator, 
_elm_scroll_hold_animator, sid);
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
      }
@@ -1438,9 +1456,8 @@ 
_elm_scroll_bounce_eval(Elm_Scrollable_Smart_Interface_Data *sid)
           {
              if (sid->bouncemex)
                {
-                  ELM_SAFE_FREE(sid->scrollto.x.animator, ecore_animator_del);
-                  sid->down.bounce_x_animator =
-                    ecore_animator_add(_elm_scroll_bounce_x_animator, 
sid->obj);
+                  ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.x.animator, 
_elm_scroll_scroll_to_x_animator, sid);
+                  ELM_ANIMATOR_CONNECT(sid->obj, sid->down.bounce_x_animator, 
_elm_scroll_bounce_x_animator, sid->obj);
                   sid->down.anim_start2 = ecore_loop_time_get();
                   sid->down.bx = bx;
                   sid->down.bx0 = bx;
@@ -1458,9 +1475,8 @@ 
_elm_scroll_bounce_eval(Elm_Scrollable_Smart_Interface_Data *sid)
           {
              if (sid->bouncemey)
                {
-                  ELM_SAFE_FREE(sid->scrollto.y.animator, ecore_animator_del);
-                  sid->down.bounce_y_animator =
-                    ecore_animator_add(_elm_scroll_bounce_y_animator, 
sid->obj);
+                  ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.y.animator, 
_elm_scroll_scroll_to_y_animator, sid);
+                  ELM_ANIMATOR_CONNECT(sid->obj, sid->down.bounce_y_animator, 
_elm_scroll_bounce_y_animator, sid->obj);
                   sid->down.anim_start3 = ecore_loop_time_get();
                   sid->down.by = by;
                   sid->down.by0 = by;
@@ -1720,18 +1736,18 @@ _elm_scroll_content_region_show_internal(Evas_Object 
*obj,
    if ((sid->down.bounce_x_animator) || (sid->down.bounce_y_animator) ||
        (sid->scrollto.x.animator) || (sid->scrollto.y.animator))
      {
-        ELM_SAFE_FREE(sid->scrollto.x.animator, ecore_animator_del);
-        ELM_SAFE_FREE(sid->scrollto.y.animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.x.animator, 
_elm_scroll_scroll_to_x_animator, sid);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.y.animator, 
_elm_scroll_scroll_to_y_animator, sid);
         if (sid->down.bounce_x_animator)
           {
-             ELM_SAFE_FREE(sid->down.bounce_x_animator, ecore_animator_del);
+             ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_x_animator, 
_elm_scroll_bounce_x_animator, sid->obj);
              sid->bouncemex = EINA_FALSE;
              if (sid->content_info.resized)
                _elm_scroll_wanted_region_set(sid->obj);
           }
         if (sid->down.bounce_y_animator)
           {
-             ELM_SAFE_FREE(sid->down.bounce_y_animator, ecore_animator_del);
+             ELM_ANIMATOR_CONNECT(sid->obj, sid->down.bounce_y_animator, 
_elm_scroll_bounce_y_animator, sid->obj);
              sid->bouncemey = EINA_FALSE;
              if (sid->content_info.resized)
                _elm_scroll_wanted_region_set(sid->obj);
@@ -1741,7 +1757,7 @@ _elm_scroll_content_region_show_internal(Evas_Object *obj,
      }
    if (sid->down.hold_animator)
      {
-        ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.hold_animator, 
_elm_scroll_hold_animator, sid);
         _elm_scroll_drag_stop(sid);
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
@@ -1749,7 +1765,7 @@ _elm_scroll_content_region_show_internal(Evas_Object *obj,
    ELM_SAFE_FREE(sid->down.hold_enterer, ecore_idle_enterer_del);
    if (sid->down.momentum_animator)
      {
-        ELM_SAFE_FREE(sid->down.momentum_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.momentum_animator, 
_elm_scroll_momentum_animator, sid);
         sid->down.bounce_x_hold = EINA_FALSE;
         sid->down.bounce_y_hold = EINA_FALSE;
         sid->down.ax = 0;
@@ -1905,18 +1921,18 @@ _scroll_wheel_post_event_cb(void *data, Evas *e 
EINA_UNUSED)
      {
         _elm_scroll_anim_stop(sid);
      }
-   ELM_SAFE_FREE(sid->scrollto.x.animator, ecore_animator_del);
-   ELM_SAFE_FREE(sid->scrollto.y.animator, ecore_animator_del);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.x.animator, 
_elm_scroll_scroll_to_x_animator, sid);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.y.animator, 
_elm_scroll_scroll_to_y_animator, sid);
    if (sid->down.bounce_x_animator)
      {
-        ELM_SAFE_FREE(sid->down.bounce_x_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_x_animator, 
_elm_scroll_bounce_x_animator, sid->obj);
         sid->bouncemex = EINA_FALSE;
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
      }
    if (sid->down.bounce_y_animator)
      {
-        ELM_SAFE_FREE(sid->down.bounce_y_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_y_animator, 
_elm_scroll_bounce_y_animator, sid->obj);
         sid->bouncemey = EINA_FALSE;
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
@@ -2067,7 +2083,7 @@ _paging_is_enabled(Elm_Scrollable_Smart_Interface_Data 
*sid)
 }
 
 static Eina_Bool
-_elm_scroll_momentum_animator(void *data)
+_elm_scroll_momentum_animator(void *data, Eo *o EINA_UNUSED, const 
Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
 {
    double t, at, dt, p, r;
    Elm_Scrollable_Smart_Interface_Data *sid = data;
@@ -2076,8 +2092,8 @@ _elm_scroll_momentum_animator(void *data)
 
    if (!sid->pan_obj)
      {
-        sid->down.momentum_animator = NULL;
-        return ECORE_CALLBACK_CANCEL;
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.momentum_animator, 
_elm_scroll_momentum_animator, sid);
+        return EO_CALLBACK_CONTINUE;
      }
 
    t = ecore_loop_time_get();
@@ -2136,7 +2152,7 @@ _elm_scroll_momentum_animator(void *data)
           {
              _elm_scroll_anim_stop(sid);
 
-             sid->down.momentum_animator = NULL;
+             ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.momentum_animator, 
_elm_scroll_momentum_animator, sid);
              sid->down.bounce_x_hold = EINA_FALSE;
              sid->down.bounce_y_hold = EINA_FALSE;
              sid->down.ax = 0;
@@ -2145,12 +2161,10 @@ _elm_scroll_momentum_animator(void *data)
              sid->down.pdy = 0;
              if (sid->content_info.resized)
                _elm_scroll_wanted_region_set(sid->obj);
-
-             return ECORE_CALLBACK_CANCEL;
           }
      }
 
-   return ECORE_CALLBACK_RENEW;
+   return EO_CALLBACK_CONTINUE;
 }
 
 static Evas_Coord
@@ -2248,17 +2262,13 @@ 
_elm_scroll_page_y_get(Elm_Scrollable_Smart_Interface_Data *sid,
 }
 
 static Eina_Bool
-_elm_scroll_scroll_to_x_animator(void *data)
+_elm_scroll_scroll_to_x_animator(void *data, Eo *o EINA_UNUSED, const 
Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
 {
    Elm_Scrollable_Smart_Interface_Data *sid = data;
    Evas_Coord px, py;
    double t, tt;
 
-   if (!sid->pan_obj)
-     {
-        sid->scrollto.x.animator = NULL;
-        return ECORE_CALLBACK_CANCEL;
-     }
+   if (!sid->pan_obj) goto on_end;
 
    t = ecore_loop_time_get();
    tt = (t - sid->scrollto.x.t_start) /
@@ -2276,24 +2286,27 @@ _elm_scroll_scroll_to_x_animator(void *data)
         sid->down.x = sid->down.history[0].x;
         sid->down.pdx = 0;
         _elm_scroll_wanted_coordinates_update(sid, px, py);
-        sid->scrollto.x.animator = NULL;
         if ((!sid->scrollto.y.animator) && (!sid->down.bounce_y_animator))
           _elm_scroll_anim_stop(sid);
-        return ECORE_CALLBACK_CANCEL;
+        goto on_end;
      }
    eo_do(sid->obj, elm_interface_scrollable_content_pos_set(px, py, 
EINA_TRUE));
    _elm_scroll_wanted_coordinates_update(sid, px, py);
-   return ECORE_CALLBACK_RENEW;
+   return EO_CALLBACK_CONTINUE;
+
+ on_end:
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.x.animator, 
_elm_scroll_scroll_to_x_animator, sid);
+   return EO_CALLBACK_CONTINUE;
 }
 
 static Eina_Bool
-_elm_scroll_scroll_to_y_animator(void *data)
+_elm_scroll_scroll_to_y_animator(void *data, Eo *o EINA_UNUSED, const 
Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
 {
    Elm_Scrollable_Smart_Interface_Data *sid = data;
    Evas_Coord px, py;
    double t, tt;
 
-   if (!sid->pan_obj) return EINA_FALSE;
+   if (!sid->pan_obj) goto on_end;
 
    t = ecore_loop_time_get();
    tt = (t - sid->scrollto.y.t_start) /
@@ -2311,15 +2324,18 @@ _elm_scroll_scroll_to_y_animator(void *data)
         sid->down.y = sid->down.history[0].y;
         sid->down.pdy = 0;
         _elm_scroll_wanted_coordinates_update(sid, px, py);
-        sid->scrollto.y.animator = NULL;
         if ((!sid->scrollto.x.animator) && (!sid->down.bounce_x_animator))
           _elm_scroll_anim_stop(sid);
-        return ECORE_CALLBACK_CANCEL;
+        goto on_end;
      }
    eo_do(sid->obj, elm_interface_scrollable_content_pos_set(px, py, 
EINA_TRUE));
    _elm_scroll_wanted_coordinates_update(sid, px, py);
 
-   return ECORE_CALLBACK_RENEW;
+   return EO_CALLBACK_CONTINUE;
+
+ on_end:
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.y.animator, 
_elm_scroll_scroll_to_y_animator, sid);
+   return EO_CALLBACK_CONTINUE;
 }
 
 static void
@@ -2350,14 +2366,13 @@ 
_elm_scroll_scroll_to_y(Elm_Scrollable_Smart_Interface_Data *sid,
    sid->scrollto.y.t_end = t + t_in;
    if (!sid->scrollto.y.animator)
      {
-        sid->scrollto.y.animator =
-          ecore_animator_add(_elm_scroll_scroll_to_y_animator, sid);
+        ELM_ANIMATOR_CONNECT(sid->obj, sid->scrollto.y.animator, 
_elm_scroll_scroll_to_y_animator, sid);
         if (!sid->scrollto.x.animator)
           _elm_scroll_anim_start(sid);
      }
    if (sid->down.bounce_y_animator)
      {
-        ELM_SAFE_FREE(sid->down.bounce_y_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_y_animator, 
_elm_scroll_bounce_y_animator, sid->obj);
         _elm_scroll_momentum_end(sid);
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
@@ -2394,14 +2409,13 @@ 
_elm_scroll_scroll_to_x(Elm_Scrollable_Smart_Interface_Data *sid,
    sid->scrollto.x.t_end = t + t_in;
    if (!sid->scrollto.x.animator)
      {
-        sid->scrollto.x.animator =
-          ecore_animator_add(_elm_scroll_scroll_to_x_animator, sid);
+        ELM_ANIMATOR_CONNECT(sid->obj, sid->scrollto.x.animator, 
_elm_scroll_scroll_to_x_animator, sid);
         if (!sid->scrollto.y.animator)
           _elm_scroll_anim_start(sid);
      }
    if (sid->down.bounce_x_animator)
      {
-        ELM_SAFE_FREE(sid->down.bounce_x_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_x_animator, 
_elm_scroll_bounce_x_animator, sid->obj);
         _elm_scroll_momentum_end(sid);
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
@@ -2442,7 +2456,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
      {
         if (sid->down.onhold_animator)
           {
-             ELM_SAFE_FREE(sid->down.onhold_animator, ecore_animator_del);
+             ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.onhold_animator, 
_elm_scroll_on_hold_animator, sid);
              if (sid->content_info.resized)
                _elm_scroll_wanted_region_set(sid->obj);
           }
@@ -2573,9 +2587,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
                                      (!elm_widget_drag_child_locked_y_get
                                         (sid->obj)))
                                    {
-                                      sid->down.momentum_animator =
-                                        ecore_animator_add
-                                          (_elm_scroll_momentum_animator, sid);
+                                      ELM_ANIMATOR_CONNECT(sid->obj, 
sid->down.momentum_animator, _elm_scroll_momentum_animator, sid);
                                       ev->event_flags |=
                                         EVAS_EVENT_FLAG_ON_SCROLL;
                                       _elm_scroll_anim_start(sid);
@@ -2665,7 +2677,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
           }
         if (sid->down.hold_animator)
           {
-             ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del);
+             ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.hold_animator, 
_elm_scroll_hold_animator, sid);
              if (sid->content_info.resized)
                _elm_scroll_wanted_region_set(sid->obj);
           }
@@ -2733,25 +2745,25 @@ _elm_scroll_mouse_down_event_cb(void *data,
         sid->down.hold = EINA_TRUE;
         _elm_scroll_anim_stop(sid);
      }
-   ELM_SAFE_FREE(sid->scrollto.x.animator, ecore_animator_del);
-   ELM_SAFE_FREE(sid->scrollto.y.animator, ecore_animator_del);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.x.animator, 
_elm_scroll_scroll_to_x_animator, sid);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.y.animator, 
_elm_scroll_scroll_to_y_animator, sid);
    if (sid->down.bounce_x_animator)
      {
-        ELM_SAFE_FREE(sid->down.bounce_x_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_x_animator, 
_elm_scroll_bounce_x_animator, sid->obj);
         sid->bouncemex = EINA_FALSE;
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
      }
    if (sid->down.bounce_y_animator)
      {
-        ELM_SAFE_FREE(sid->down.bounce_y_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_y_animator, 
_elm_scroll_bounce_y_animator, sid->obj);
         sid->bouncemey = EINA_FALSE;
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
      }
    if (sid->down.hold_animator)
      {
-        ELM_SAFE_FREE(sid->down.hold_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.hold_animator, 
_elm_scroll_hold_animator, sid);
         _elm_scroll_drag_stop(sid);
         if (sid->content_info.resized)
           _elm_scroll_wanted_region_set(sid->obj);
@@ -2759,7 +2771,7 @@ _elm_scroll_mouse_down_event_cb(void *data,
    ELM_SAFE_FREE(sid->down.hold_enterer, ecore_idle_enterer_del);
    if (sid->down.momentum_animator)
      {
-        ELM_SAFE_FREE(sid->down.momentum_animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.momentum_animator, 
_elm_scroll_momentum_animator, sid);
         sid->down.bounce_x_hold = EINA_FALSE;
         sid->down.bounce_y_hold = EINA_FALSE;
         sid->down.ax = 0;
@@ -3084,18 +3096,24 @@ _elm_scroll_hold_enterer(void *data)
 }
 
 static Eina_Bool
-_elm_scroll_hold_animator(void *data)
+_elm_scroll_hold_animator(void *data,
+                          Eo *o EINA_UNUSED,
+                          const Eo_Event_Description *desc EINA_UNUSED,
+                          void *event_info EINA_UNUSED)
 {
    Elm_Scrollable_Smart_Interface_Data *sid = data;
 
    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 EO_CALLBACK_CONTINUE;
 }
 
 static Eina_Bool
-_elm_scroll_on_hold_animator(void *data)
+_elm_scroll_on_hold_animator(void *data,
+                             Eo *o EINA_UNUSED,
+                             const Eo_Event_Description *desc EINA_UNUSED,
+                             void *event_info EINA_UNUSED)
 {
    double t, td;
    double vx, vy;
@@ -3141,7 +3159,7 @@ _elm_scroll_on_hold_animator(void *data)
      }
    sid->down.onhold_tlast = t;
 
-   return ECORE_CALLBACK_RENEW;
+   return EO_CALLBACK_CONTINUE;
 }
 
 static void
@@ -3175,7 +3193,7 @@ _elm_scroll_mouse_move_event_cb(void *data,
        !(sid->block & ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL))
      {
         Evas_Coord px = 0;
-        ELM_SAFE_FREE(sid->scrollto.x.animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.x.animator, 
_elm_scroll_scroll_to_x_animator, sid);
         eo_do(sid->pan_obj, elm_obj_pan_pos_get(&px, NULL));
         sid->down.sx = px;
         sid->down.x = sid->down.history[0].x;
@@ -3185,7 +3203,7 @@ _elm_scroll_mouse_move_event_cb(void *data,
        !(sid->block & ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL))
      {
         Evas_Coord py = 0;
-        ELM_SAFE_FREE(sid->scrollto.y.animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.y.animator, 
_elm_scroll_scroll_to_y_animator, sid);
         eo_do(sid->pan_obj, elm_obj_pan_pos_get(NULL, &py));
         sid->down.sy = py;
         sid->down.y = sid->down.history[0].y;
@@ -3394,9 +3412,7 @@ _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);
+             ELM_ANIMATOR_CONNECT(sid->obj, sid->down.hold_animator, 
_elm_scroll_hold_animator, sid);
           }
         else
           {
@@ -3465,15 +3481,15 @@ _elm_scroll_mouse_move_event_cb(void *data,
                   sid->down.onhold_vxe = 0.0;
                   sid->down.onhold_vye = 0.0;
                   sid->down.onhold_tlast = 0.0;
-                  sid->down.onhold_animator = ecore_animator_add
-                      (_elm_scroll_on_hold_animator, sid);
+
+                  ELM_ANIMATOR_CONNECT(sid->obj, sid->down.onhold_animator, 
_elm_scroll_on_hold_animator, sid);
                }
           }
         else
           {
              if (sid->down.onhold_animator)
                {
-                  ELM_SAFE_FREE(sid->down.onhold_animator, ecore_animator_del);
+                  ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.onhold_animator, 
_elm_scroll_on_hold_animator, sid);
                   if (sid->content_info.resized)
                     _elm_scroll_wanted_region_set(sid->obj);
                }
@@ -4080,7 +4096,7 @@ 
_elm_interface_scrollable_momentum_animator_disabled_set(Eo *obj EINA_UNUSED, El
      {
         if (sid->down.momentum_animator)
           {
-             ELM_SAFE_FREE(sid->down.momentum_animator, ecore_animator_del);
+             ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.momentum_animator, 
_elm_scroll_momentum_animator, sid);
              if (sid->content_info.resized)
                _elm_scroll_wanted_region_set(sid->obj);
           }
@@ -4099,8 +4115,8 @@ _elm_interface_scrollable_bounce_animator_disabled_set(Eo 
*obj EINA_UNUSED, Elm_
    sid->bounce_animator_disabled = disabled;
    if (sid->bounce_animator_disabled)
      {
-        ELM_SAFE_FREE(sid->scrollto.x.animator, ecore_animator_del);
-        ELM_SAFE_FREE(sid->scrollto.y.animator, ecore_animator_del);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.x.animator, 
_elm_scroll_scroll_to_x_animator, sid);
+        ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.y.animator, 
_elm_scroll_scroll_to_y_animator, sid);
      }
 }
 
@@ -4224,7 +4240,7 @@ _elm_interface_scrollable_freeze_set(Eo *obj EINA_UNUSED, 
Elm_Scrollable_Smart_I
      {
         if (sid->down.onhold_animator)
           {
-             ELM_SAFE_FREE(sid->down.onhold_animator, ecore_animator_del);
+             ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.onhold_animator, 
_elm_scroll_on_hold_animator, sid);
              if (sid->content_info.resized)
                _elm_scroll_wanted_region_set(sid->obj);
           }
@@ -4524,13 +4540,13 @@ _elm_interface_scrollable_evas_object_smart_del(Eo 
*obj, Elm_Scrollable_Smart_In
    if (!sid->extern_pan) evas_object_del(sid->pan_obj);
 
    ecore_idle_enterer_del(sid->down.hold_enterer);
-   ecore_animator_del(sid->down.hold_animator);
-   ecore_animator_del(sid->down.onhold_animator);
-   ecore_animator_del(sid->down.momentum_animator);
-   ecore_animator_del(sid->down.bounce_x_animator);
-   ecore_animator_del(sid->down.bounce_y_animator);
-   ecore_animator_del(sid->scrollto.x.animator);
-   ecore_animator_del(sid->scrollto.y.animator);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.hold_animator, 
_elm_scroll_hold_animator, sid);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.onhold_animator, 
_elm_scroll_on_hold_animator, sid);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.momentum_animator, 
_elm_scroll_momentum_animator, sid);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_x_animator, 
_elm_scroll_bounce_x_animator, sid->obj);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->down.bounce_y_animator, 
_elm_scroll_bounce_y_animator, sid->obj);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.x.animator, 
_elm_scroll_scroll_to_x_animator, sid);
+   ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.y.animator, 
_elm_scroll_scroll_to_y_animator, sid);
 }
 
 EOLIAN static void
diff --git a/src/lib/elm_interface_scrollable.h 
b/src/lib/elm_interface_scrollable.h
index 4038eb9..d5a38c3 100644
--- a/src/lib/elm_interface_scrollable.h
+++ b/src/lib/elm_interface_scrollable.h
@@ -112,11 +112,12 @@ struct _Elm_Scrollable_Smart_Interface_Data
       int             hdir, vdir;
 
       Ecore_Idle_Enterer *hold_enterer;
-      Ecore_Animator *hold_animator;
-      Ecore_Animator *onhold_animator;
-      Ecore_Animator *momentum_animator; /**< an animator which is called 
whenever a scroller is moving due to a flick action(mouse down, move, up) */
-      Ecore_Animator *bounce_x_animator; /**< an animator to express the 
bouncing animation on x axis. */
-      Ecore_Animator *bounce_y_animator; /**< an animator to express the 
bouncing animation on y axis. */
+
+      Eina_Bool       hold_animator : 1;
+      Eina_Bool       onhold_animator : 1;
+      Eina_Bool       momentum_animator : 1; /**< an animator which is called 
whenever a scroller is moving due to a flick action(mouse down, move, up) */
+      Eina_Bool       bounce_x_animator : 1; /**< an animator to express the 
bouncing animation on x axis. */
+      Eina_Bool       bounce_y_animator : 1; /**< an animator to express the 
bouncing animation on y axis. */
 
       Eina_Bool       last_hold_x_wheel : 1;
       Eina_Bool       last_hold_y_wheel : 1;
@@ -180,7 +181,7 @@ struct _Elm_Scrollable_Smart_Interface_Data
       {
          Evas_Coord      start, end;
          double          t_start, t_end;
-         Ecore_Animator *animator;
+         Eina_Bool       animator;
       } x, y;
    } scrollto;
 

-- 


Reply via email to