summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric BAIL <cedric@osg.samsung.com>2016-01-27 16:46:16 -0800
committerCedric BAIL <cedric@osg.samsung.com>2016-02-01 14:21:27 -0800
commit2c22ce3aaa55201cf5f71765cfd740dda877e521 (patch)
tree21c922b27900d653741d7902b1dd02902575ed63
parent72eacc5086666d83f4f4701b73454d68f32d5385 (diff)
downloadelementary-2c22ce3aaa55201cf5f71765cfd740dda877e521.tar.gz
map: use per canvas animator.
-rw-r--r--src/lib/elm_map.c78
-rw-r--r--src/lib/elm_widget_map.h2
2 files changed, 46 insertions, 34 deletions
diff --git a/src/lib/elm_map.c b/src/lib/elm_map.c
index 35e01a9a0..f4b976e2c 100644
--- a/src/lib/elm_map.c
+++ b/src/lib/elm_map.c
@@ -55,6 +55,7 @@
static Eina_Bool _key_action_move(Evas_Object *obj, const char *params);
static Eina_Bool _key_action_zoom(Evas_Object *obj, const char *params);
+static Eina_Bool _zoom_animator_set(Elm_Map_Data *sd, void *callback);
static const Elm_Action key_actions[] = {
{"move", _key_action_move},
@@ -1142,55 +1143,41 @@ _zoom_do(Elm_Map_Data *sd,
}
static Eina_Bool
-_zoom_anim_cb(void *data)
+_zoom_anim_cb(void *data,
+ Eo *obj EINA_UNUSED,
+ const Eo_Event_Description *desc EINA_UNUSED,
+ void *event_info EINA_UNUSED)
{
ELM_MAP_DATA_GET(data, sd);
if (sd->ani.zoom_cnt <= 0)
{
- sd->zoom_animator = NULL;
+ _zoom_animator_set(sd, NULL);
evas_object_smart_changed(sd->pan_obj);
_calc_job(sd);
-
- return ECORE_CALLBACK_CANCEL;
}
else
{
sd->ani.zoom += sd->ani.zoom_diff;
sd->ani.zoom_cnt--;
_zoom_do(sd, sd->ani.zoom);
-
- return ECORE_CALLBACK_RENEW;
}
-}
-
-static void
-_zoom_with_animation(Elm_Map_Data *sd,
- double zoom,
- int cnt)
-{
- if (cnt == 0) return;
-
- sd->ani.zoom_cnt = cnt;
- sd->ani.zoom = sd->zoom;
- sd->ani.zoom_diff = (double)(zoom - sd->zoom) / cnt;
- ecore_animator_del(sd->zoom_animator);
- sd->zoom_animator = ecore_animator_add(_zoom_anim_cb, sd->obj);
+ return EO_CALLBACK_CONTINUE;
}
static Eina_Bool
-_zoom_bring_anim_cb(void *data)
+_zoom_bring_anim_cb(void *data,
+ Eo *obj EINA_UNUSED,
+ const Eo_Event_Description *desc EINA_UNUSED,
+ void *event_info EINA_UNUSED)
{
ELM_MAP_DATA_GET(data, sd);
if ((sd->ani.zoom_cnt <= 0) && (sd->ani.region_cnt <= 0))
{
- sd->zoom_animator = NULL;
-
+ _zoom_animator_set(sd, NULL);
evas_object_smart_changed(sd->pan_obj);
_calc_job(sd);
-
- return ECORE_CALLBACK_CANCEL;
}
else
{
@@ -1214,9 +1201,37 @@ _zoom_bring_anim_cb(void *data)
eo_do(sd->obj, elm_interface_scrollable_content_region_show(x, y, w, h));
sd->ani.region_cnt--;
}
-
- return ECORE_CALLBACK_RENEW;
}
+
+ return EO_CALLBACK_CONTINUE;
+}
+
+static Eina_Bool
+_zoom_animator_set(Elm_Map_Data *sd,
+ void *callback)
+{
+ Eina_Bool r = EINA_FALSE;
+
+ sd->zoom_animator = !!callback;
+ eo_do(evas_object_evas_get(sd->obj),
+ r = eo_event_callback_del(EVAS_CANVAS_EVENT_ANIMATOR_TICK, _zoom_anim_cb, sd->obj);
+ r |= eo_event_callback_del(EVAS_CANVAS_EVENT_ANIMATOR_TICK, _zoom_bring_anim_cb, sd->obj);
+ if (callback) eo_event_callback_add(EVAS_CANVAS_EVENT_ANIMATOR_TICK, callback, sd->obj));
+
+ return r;
+}
+
+static void
+_zoom_with_animation(Elm_Map_Data *sd,
+ double zoom,
+ int cnt)
+{
+ if (cnt == 0) return;
+
+ sd->ani.zoom_cnt = cnt;
+ sd->ani.zoom = sd->zoom;
+ sd->ani.zoom_diff = (double)(zoom - sd->zoom) / cnt;
+ _zoom_animator_set(sd, _zoom_anim_cb);
}
static void
@@ -1244,8 +1259,7 @@ _zoom_bring_with_animation(Elm_Map_Data *sd,
sd->ani.lon_diff = (lon - tlon) / region_cnt;
sd->ani.lat_diff = (lat - tlat) / region_cnt;
- ecore_animator_del(sd->zoom_animator);
- sd->zoom_animator = ecore_animator_add(_zoom_bring_anim_cb, sd->obj);
+ _zoom_animator_set(sd, _zoom_bring_anim_cb);
}
static void
@@ -4157,7 +4171,7 @@ _elm_map_evas_object_smart_del(Eo *obj, Elm_Map_Data *sd)
eina_stringshare_del(sd->user_agent);
eina_hash_free(sd->ua);
ecore_timer_del(sd->zoom_timer);
- ecore_animator_del(sd->zoom_animator);
+ _zoom_animator_set(sd, NULL);
_grid_all_clear(sd);
// Removal of download list should be after grid clear.
@@ -4352,10 +4366,8 @@ _elm_map_paused_set(Eo *obj, Elm_Map_Data *sd, Eina_Bool paused)
sd->paused = !!paused;
if (sd->paused)
{
- if (sd->zoom_animator)
+ if (_zoom_animator_set(sd, NULL))
{
- ecore_animator_del(sd->zoom_animator);
- sd->zoom_animator = NULL;
_zoom_do(sd, sd->zoom);
}
edje_object_signal_emit(wd->resize_obj,
diff --git a/src/lib/elm_widget_map.h b/src/lib/elm_widget_map.h
index 61e70d19e..9d0652c4f 100644
--- a/src/lib/elm_widget_map.h
+++ b/src/lib/elm_widget_map.h
@@ -446,7 +446,6 @@ struct _Elm_Map_Data
} ani;
Ecore_Timer *zoom_timer;
- Ecore_Animator *zoom_animator;
Ecore_Timer *loaded_timer;
int try_num;
@@ -482,6 +481,7 @@ struct _Elm_Map_Data
Eina_Bool wheel_disabled : 1;
Eina_Bool on_hold : 1;
Eina_Bool paused : 1;
+ Eina_Bool zoom_animator : 1;
Calc_Job calc_job;
};