EAPI Eina_Bool elm_animator_auto_reverse_get(Elm_Animator *animator);
EAPI Eina_Bool elm_animator_operating_get(Elm_Animator *animator);
EAPI unsigned int elm_animator_repeat_get(Elm_Animator *animator);
+ EAPI void elm_animator_frame_pos_set(Elm_Animator *animator, double pos);
+ EAPI double elm_animator_frame_pos_get(Elm_Animator *animator);
+ EAPI void elm_animator_pause(Elm_Animator *animator);
+ EAPI void elm_animator_resume(Elm_Animator *animator);
+
/* tansit */
typedef struct _transit Elm_Transit;
EAPI void elm_transit_event_block_disabled_set(Elm_Transit *transit, Eina_Bool disabled);
EAPI Eina_Bool elm_transit_fx_insert(Elm_Transit *transit, Elm_Effect *effect);
EAPI void elm_transit_fx_clear(Elm_Transit *transit);
- EAPI Eina_Bool elm_transit_event_block_disabled_get(Elm_Transit *transit);
+ EAPI Eina_Bool elm_transit_event_block_disabled_get(Elm_Transit *transit);
+ EAPI void elm_transit_pause(Elm_Transit *transit);
+ EAPI void elm_transit_resume(Elm_Transit *transit);
+ EAPI void elm_transit_frame_pos_set(Elm_Transit *transit, double pos);
+ EAPI double elm_transit_frame_pos_get(Elm_Transit *transit);
/* Translation FX */
EAPI Elm_Effect *elm_fx_translation_add(Evas_Object *obj, Evas_Coord from_x, Evas_Coord from_y, Evas_Coord to_x, Evas_Coord to_y);
Ecore_Animator *animator;
double begin_time;
double cur_time;
+ double prev_time;
double duration;
unsigned int repeat_cnt;
unsigned int cur_repeat_cnt;
_animator_animate_cb(void *data)
{
Elm_Animator *animator = (Elm_Animator *) data;
+ double elapsed_time, frame, cur_time;
- animator->cur_time = ecore_loop_time_get();
- double elapsed_time = animator->cur_time - animator->begin_time;
+ cur_time = ecore_loop_time_get();
- if (elapsed_time > animator->duration)
- elapsed_time = animator->duration;
+ animator->cur_time += (cur_time - animator->prev_time);
+ animator->prev_time = cur_time;
- double frame = animator->curve_op(elapsed_time / animator->duration);
+ if(animator->cur_time > (animator->begin_time+animator->duration) ) {
+ animator->cur_time = animator->begin_time+animator->duration;
+ }
+
+ elapsed_time = animator->cur_time - animator->begin_time;
+
+ frame = animator->curve_op(elapsed_time / animator->duration);
//Reverse?
if (animator->auto_reverse)
}
/**
+ * Pause the animator.
+ *
+ * @param animator Animator object
+ *
+ * @ingroup Animator
+ */
+EAPI void
+elm_animator_pause(Elm_Animator *animator)
+{
+ if(!animator)
+ return;
+
+ if(!animator->on_animating)
+ return;
+
+ ecore_animator_freeze(animator->animator);
+}
+
+/**
+ * Resume the animator.
+ *
+ * @param animator Animator object
+ *
+ * @ingroup Animator
+ */
+EAPI void
+elm_animator_resume(Elm_Animator *animator)
+{
+ if(!animator)
+ return;
+
+ if(!animator->on_animating)
+ return;
+
+ ecore_animator_thaw(animator->animator);
+}
+
+/**
+ * Set the frame position
+ *
+ * @param animator Animator object
+ * @param frame_pos frame position (range:0 ~ 1)
+ *
+ * @ingroup Animator
+ */
+EAPI void
+elm_animator_frame_pos_set(Elm_Animator *animator, double pos)
+{
+ double cur_time;
+
+ if(!animator)
+ return;
+
+ if(!animator->on_animating)
+ return ;
+
+ cur_time = animator->begin_time + (pos * animator->duration);
+
+ if(cur_time < animator->begin_time)
+ cur_time = animator->begin_time;
+
+ animator->prev_time = animator->cur_time = cur_time;
+ _animator_animate_cb(animator);
+}
+
+/**
+ * Get the current frame position
+ *
+ * @param animator Animator object
+ * @return current frame position
+ *
+ * @ingroup Animator
+ */
+EAPI double
+elm_animator_frame_pos_get(Elm_Animator* animator)
+{
+ if(!animator)
+ return 0;
+
+ return ((animator->cur_time - animator->begin_time) / animator->duration);
+}
+
+/**
* Stop animator.
*
* @param animator Animator object
return;
if (!animator->animator_op)
return;
- animator->begin_time = ecore_loop_time_get();
+ animator->prev_time = animator->cur_time = animator->begin_time = ecore_loop_time_get();
animator->cur_repeat_cnt = animator->repeat_cnt;
if (!animator->animator) {
animator->animator = ecore_animator_add(_animator_animate_cb, animator);
}
}
+/**
+ * Pause the transit
+ *
+ * @param transit Transit
+ *
+ * @ingroup Transit
+ */
+EAPI void
+elm_transit_pause(Elm_Transit *transit)
+{
+ if(!transit)
+ return;
+
+ elm_animator_pause(transit->animator);
+}
+
+/**
+ * Resume the transit
+ *
+ * @param transit Transit
+ *
+ * @ingroup Transit
+ */
+EAPI void
+elm_transit_resume(Elm_Transit *transit)
+{
+ if(!transit)
+ return;
+
+ elm_animator_resume(transit->animator);
+}
+
+/**
+ * Get the current frame position
+ *
+ * @param transit Transit
+ * @return current frame position (range: 0~1)
+ *
+ * @ingroup Transit
+ */
+EAPI void
+elm_transit_frame_pos_set(Elm_Transit *transit, double pos)
+{
+ if(!transit)
+ return;
+
+ elm_animator_frame_pos_set(transit->animator, pos);
+}
+
+/**
+ * Get the current frame position
+ *
+ * @param transit Transit
+ * @return current frame position
+ *
+ * @ingroup Transit
+ */
+EAPI double
+elm_transit_frame_pos_get(Elm_Transit *transit )
+{
+ if(!transit)
+ return 0;
+
+ return elm_animator_frame_pos_get(transit->animator);
+}
+
+
+
+
/////////////////////////////////////////////////////////////////////////////////////
//Resizing FX
/////////////////////////////////////////////////////////////////////////////////////