cedric pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=1a80a9d4f922a494bbbdd7e60ed89255a8476f21
commit 1a80a9d4f922a494bbbdd7e60ed89255a8476f21 Author: Cedric BAIL <ced...@osg.samsung.com> Date: Tue Jan 26 16:13:23 2016 -0800 photocam: switch to use efl.core.animator. --- src/lib/elm_photocam.c | 172 ++++++++++++++++++++---------------------- src/lib/elm_widget_photocam.h | 2 - 2 files changed, 83 insertions(+), 91 deletions(-) diff --git a/src/lib/elm_photocam.c b/src/lib/elm_photocam.c index 991de5a..97d878e 100644 --- a/src/lib/elm_photocam.c +++ b/src/lib/elm_photocam.c @@ -766,10 +766,12 @@ _zoom_do(Evas_Object *obj, } static Eina_Bool -_zoom_anim_cb(void *data) +_zoom_anim_cb(void *data, + Eo *o EINA_UNUSED, + const Eo_Event_Description *desc EINA_UNUSED, + void *event_info EINA_UNUSED) { double t; - Eina_Bool go; Evas_Object *obj = data; ELM_PHOTOCAM_DATA_GET(obj, sd); @@ -783,16 +785,16 @@ _zoom_anim_cb(void *data) t = 1.0; t = 1.0 - t; t = 1.0 - (t * t); - go = _zoom_do(obj, t); - if (!go) + if (!_zoom_do(obj, t)) { sd->no_smooth--; if (!sd->no_smooth) _smooth_update(data); - sd->zoom_animator = NULL; + eo_do(obj, + eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _zoom_anim_cb, obj)); eo_do(obj, eo_event_callback_call(EVAS_ZOOMABLE_INTERFACE_EVENT_ZOOM_STOP, NULL)); } - return go; + return EO_CALLBACK_CONTINUE; } static Eina_Bool @@ -1037,8 +1039,11 @@ _elm_photocam_elm_widget_event(Eo *obj, Elm_Photocam_Data *_pd EINA_UNUSED, Evas return EINA_TRUE; } -Eina_Bool -_bounce_eval(void *data) +static Eina_Bool +_bounce_eval(void *data, + Eo *o EINA_UNUSED, + const Eo_Event_Description *desc EINA_UNUSED, + void *event_info EINA_UNUSED) { Evas_Object *obj = data; ELM_PHOTOCAM_DATA_GET(obj, sd); @@ -1046,16 +1051,7 @@ _bounce_eval(void *data) if ((sd->g_layer_zoom.imx == sd->g_layer_zoom.bounce.x_end) && (sd->g_layer_zoom.imy == sd->g_layer_zoom.bounce.y_end)) - { - sd->g_layer_zoom.imx = 0; - sd->g_layer_zoom.imy = 0; - sd->zoom_g_layer = EINA_FALSE; - sd->g_layer_zoom.bounce.animator = NULL; - - eo_do(obj, elm_interface_scrollable_freeze_set(EINA_FALSE)); - - return ECORE_CALLBACK_CANCEL; - } + goto on_end; t = ecore_loop_time_get(); tt = (t - sd->g_layer_zoom.bounce.t_start) / @@ -1066,15 +1062,8 @@ _bounce_eval(void *data) if (t > sd->g_layer_zoom.bounce.t_end) { - sd->g_layer_zoom.imx = 0; - sd->g_layer_zoom.imy = 0; - sd->zoom_g_layer = EINA_FALSE; - - eo_do(obj, elm_interface_scrollable_freeze_set(EINA_FALSE)); - _zoom_do(obj, 1.0); - sd->g_layer_zoom.bounce.animator = NULL; - return ECORE_CALLBACK_CANCEL; + goto on_end; } if (sd->g_layer_zoom.imx != sd->g_layer_zoom.bounce.x_end) @@ -1089,7 +1078,44 @@ _bounce_eval(void *data) _zoom_do(obj, 1.0 - (1.0 - tt)); - return ECORE_CALLBACK_RENEW; + return EO_CALLBACK_CONTINUE; + + on_end: + sd->g_layer_zoom.imx = 0; + sd->g_layer_zoom.imy = 0; + sd->zoom_g_layer = EINA_FALSE; + + eo_do(obj, elm_interface_scrollable_freeze_set(EINA_FALSE)); + + eo_do(obj, + eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _bounce_eval, obj)); + return EO_CALLBACK_CONTINUE; +} + +static void +_elm_photocam_bounce_reset(Eo *obj, Elm_Photocam_Data *sd EINA_UNUSED) +{ + Eina_Bool r; + + eo_do(obj, + r = eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _bounce_eval, obj)); + if (r) _zoom_do(obj, 1.0); +} + +static void +_elm_photocam_zoom_reset(Eo *obj, Elm_Photocam_Data *sd) +{ + Eina_Bool r; + + eo_do(obj, + r = eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _zoom_anim_cb, obj)); + if (r) + { + sd->no_smooth--; + if (!sd->no_smooth) _smooth_update(obj); + _zoom_do(obj, 1.0); + eo_do(obj, eo_event_callback_call(EVAS_ZOOMABLE_INTERFACE_EVENT_ZOOM_STOP, NULL)); + } } static void @@ -1165,7 +1191,7 @@ _g_layer_zoom_start_cb(void *data, Evas_Coord rw = 0, rh = 0; int x, y, w, h; - ELM_SAFE_FREE(sd->g_layer_zoom.bounce.animator, ecore_animator_del); + _elm_photocam_bounce_reset(obj, sd); sd->zoom_g_layer = EINA_TRUE; eo_do(obj, elm_interface_scrollable_freeze_set(EINA_TRUE)); @@ -1287,8 +1313,8 @@ _g_layer_zoom_end_cb(void *data, sd->g_layer_zoom.bounce.t_end = t + _elm_config->page_scroll_friction; - sd->g_layer_zoom.bounce.animator = - ecore_animator_add(_bounce_eval, obj); + eo_do(obj, + eo_event_callback_add(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _bounce_eval, obj)); } else { @@ -1457,8 +1483,9 @@ _elm_photocam_evas_object_smart_del(Eo *obj, Elm_Photocam_Data *sd) ecore_job_del(sd->calc_job); ecore_timer_del(sd->scr_timer); ecore_timer_del(sd->long_timer); - ecore_animator_del(sd->zoom_animator); - ecore_animator_del(sd->g_layer_zoom.bounce.animator); + eo_do(obj, + eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _zoom_anim_cb, obj), + eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _bounce_eval, obj)); eo_do_super(obj, MY_CLASS, evas_obj_smart_del()); } @@ -1645,14 +1672,11 @@ _elm_photocam_file_set_internal(Eo *obj, Elm_Photocam_Data *sd, const char *file unsigned int i; _grid_clear_all(obj); - ELM_SAFE_FREE(sd->g_layer_zoom.bounce.animator, ecore_animator_del); - if (sd->zoom_animator) - { - sd->no_smooth--; - if (sd->no_smooth == 0) _smooth_update(obj); - ecore_animator_del(sd->zoom_animator); - sd->zoom_animator = NULL; - } + _elm_photocam_zoom_reset(obj, sd); + _elm_photocam_bounce_reset(obj, sd); + sd->no_smooth--; + if (sd->no_smooth == 0) _smooth_update(obj); + ecore_job_del(sd->calc_job); evas_object_hide(sd->img); if (sd->f) eina_file_close(sd->f); @@ -1747,10 +1771,10 @@ _elm_photocam_zoom_set(Eo *obj, Elm_Photocam_Data *sd, double zoom) { double z; Eina_List *l; - Ecore_Animator *an; Elm_Phocam_Grid *g, *g_zoom = NULL; Evas_Coord pw, ph, rx, ry, rw, rh; int zoom_changed = 0, started = 0; + Eina_Bool an = EINA_FALSE; if (zoom <= (1.0 / 256.0)) zoom = (1.0 / 256.0); if (zoom == sd->zoom) return; @@ -1932,22 +1956,24 @@ done: } else { - if (!sd->zoom_animator) + eo_do(obj, + an = eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _zoom_anim_cb, obj), + eo_event_callback_add(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _zoom_anim_cb, obj)); + if (!an) { - sd->zoom_animator = ecore_animator_add(_zoom_anim_cb, obj); sd->no_smooth++; if (sd->no_smooth == 1) _smooth_update(obj); started = 1; } } - an = sd->zoom_animator; if (an) { - if (!_zoom_anim_cb(obj)) + // FIXME: If one day we do support partial animator in photocam, this would require change + if (!_zoom_anim_cb(obj, evas_object_evas_get(obj), NULL, NULL)) { - ecore_animator_del(an); - an = NULL; + _elm_photocam_bounce_reset(obj, sd); + an = 0; } } @@ -2060,20 +2086,10 @@ _elm_photocam_image_region_show(Eo *obj, Elm_Photocam_Data *sd, int x, int y, in if (rh < 1) rh = 1; if ((rx + rw) > sd->size.w) rx = sd->size.w - rw; if ((ry + rh) > sd->size.h) ry = sd->size.h - rh; - if (sd->g_layer_zoom.bounce.animator) - { - ecore_animator_del(sd->g_layer_zoom.bounce.animator); - sd->g_layer_zoom.bounce.animator = NULL; - _zoom_do(obj, 1.0); - } - if (sd->zoom_animator) - { - sd->no_smooth--; - ecore_animator_del(sd->zoom_animator); - sd->zoom_animator = NULL; - _zoom_do(obj, 1.0); - eo_do(obj, eo_event_callback_call(EVAS_ZOOMABLE_INTERFACE_EVENT_ZOOM_STOP, NULL)); - } + + _elm_photocam_bounce_reset(obj, sd); + _elm_photocam_zoom_reset(obj, sd); + eo_do(obj, elm_interface_scrollable_content_region_show(rx, ry, rw, rh)); } @@ -2102,21 +2118,10 @@ _elm_photocam_elm_interface_scrollable_region_bring_in(Eo *obj, Elm_Photocam_Dat if (rh < 1) rh = 1; if ((rx + rw) > sd->size.w) rx = sd->size.w - rw; if ((ry + rh) > sd->size.h) ry = sd->size.h - rh; - if (sd->g_layer_zoom.bounce.animator) - { - ecore_animator_del(sd->g_layer_zoom.bounce.animator); - sd->g_layer_zoom.bounce.animator = NULL; - _zoom_do(obj, 1.0); - } - if (sd->zoom_animator) - { - sd->no_smooth--; - if (!sd->no_smooth) _smooth_update(obj); - ecore_animator_del(sd->zoom_animator); - sd->zoom_animator = NULL; - _zoom_do(obj, 1.0); - eo_do(obj, eo_event_callback_call(EVAS_ZOOMABLE_INTERFACE_EVENT_ZOOM_STOP, NULL)); - } + + _elm_photocam_bounce_reset(obj, sd); + _elm_photocam_zoom_reset(obj, sd); + eo_do_super(obj, MY_CLASS, elm_interface_scrollable_region_bring_in(rx, ry, rw, rh)); } @@ -2129,19 +2134,8 @@ _elm_photocam_paused_set(Eo *obj, Elm_Photocam_Data *sd, Eina_Bool paused) sd->paused = paused; if (!sd->paused) return; - if (sd->g_layer_zoom.bounce.animator) - { - ecore_animator_del(sd->g_layer_zoom.bounce.animator); - sd->g_layer_zoom.bounce.animator = NULL; - _zoom_do(obj, 1.0); - } - if (sd->zoom_animator) - { - ecore_animator_del(sd->zoom_animator); - sd->zoom_animator = NULL; - _zoom_do(obj, 1.0); - eo_do(obj, eo_event_callback_call(EVAS_ZOOMABLE_INTERFACE_EVENT_ZOOM_STOP, NULL)); - } + _elm_photocam_bounce_reset(obj, sd); + _elm_photocam_zoom_reset(obj, sd); } EOLIAN static Eina_Bool diff --git a/src/lib/elm_widget_photocam.h b/src/lib/elm_widget_photocam.h index b255ec1..8c03e59 100644 --- a/src/lib/elm_widget_photocam.h +++ b/src/lib/elm_widget_photocam.h @@ -81,7 +81,6 @@ struct _Elm_Photocam_Data int x_end, y_end; double t_start; double t_end; - Ecore_Animator *animator; } bounce; } g_layer_zoom; @@ -94,7 +93,6 @@ struct _Elm_Photocam_Data Ecore_Job *calc_job; Ecore_Timer *scr_timer; Ecore_Timer *long_timer; - Ecore_Animator *zoom_animator; double t_start, t_end; struct --