diff options
Diffstat (limited to 'src/lib/evas/canvas/efl_canvas_animation.c')
-rw-r--r-- | src/lib/evas/canvas/efl_canvas_animation.c | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/lib/evas/canvas/efl_canvas_animation.c b/src/lib/evas/canvas/efl_canvas_animation.c new file mode 100644 index 0000000000..b8c7c99861 --- /dev/null +++ b/src/lib/evas/canvas/efl_canvas_animation.c @@ -0,0 +1,138 @@ +#include "efl_canvas_animation_private.h" + +#define MY_CLASS EFL_CANVAS_ANIMATION_CLASS + +EOLIAN static void +_efl_canvas_animation_duration_set(Eo *eo_obj EINA_UNUSED, + Efl_Canvas_Animation_Data *pd, + double sec) +{ + pd->duration = sec; +} + +EOLIAN static double +_efl_canvas_animation_duration_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd) +{ + return pd->duration; +} + +EOLIAN static void +_efl_canvas_animation_final_state_keep_set(Eo *eo_obj EINA_UNUSED, + Efl_Canvas_Animation_Data *pd, + Eina_Bool keep) +{ + if (pd->keep_final_state == keep) return; + + pd->keep_final_state = !!keep; +} + +EOLIAN static Eina_Bool +_efl_canvas_animation_final_state_keep_get(const Eo *eo_obj EINA_UNUSED, + Efl_Canvas_Animation_Data *pd) +{ + return pd->keep_final_state; +} + +EOLIAN static void +_efl_canvas_animation_repeat_mode_set(Eo *eo_obj EINA_UNUSED, + Efl_Canvas_Animation_Data *pd, + Efl_Canvas_Animation_Repeat_Mode mode) +{ + if ((mode == EFL_CANVAS_ANIMATION_REPEAT_MODE_RESTART) || + (mode == EFL_CANVAS_ANIMATION_REPEAT_MODE_REVERSE)) + pd->repeat_mode = mode; +} + +EOLIAN static Efl_Canvas_Animation_Repeat_Mode +_efl_canvas_animation_repeat_mode_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd) +{ + return pd->repeat_mode; +} + +EOLIAN static void +_efl_canvas_animation_repeat_count_set(Eo *eo_obj EINA_UNUSED, + Efl_Canvas_Animation_Data *pd, + int count) +{ + //EFL_ANIMATION_REPEAT_INFINITE repeats animation infinitely + if ((count < 0) && (count != EFL_ANIMATION_REPEAT_INFINITE)) return; + + pd->repeat_count = count; +} + +EOLIAN static int +_efl_canvas_animation_repeat_count_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd) +{ + return pd->repeat_count; +} + +EOLIAN static void +_efl_canvas_animation_start_delay_set(Eo *eo_obj EINA_UNUSED, + Efl_Canvas_Animation_Data *pd, + double sec) +{ + if (sec < 0.0) return; + + pd->start_delay_time = sec; +} + +EOLIAN static double +_efl_canvas_animation_start_delay_get(const Eo *eo_obj EINA_UNUSED, + Efl_Canvas_Animation_Data *pd) +{ + return pd->start_delay_time; +} + +EOLIAN static void +_efl_canvas_animation_interpolator_set(Eo *eo_obj EINA_UNUSED, + Efl_Canvas_Animation_Data *pd, + Efl_Interpolator *interpolator) +{ + pd->interpolator = interpolator; +} + +EOLIAN static Efl_Interpolator * +_efl_canvas_animation_interpolator_get(const Eo *eo_obj EINA_UNUSED, + Efl_Canvas_Animation_Data *pd) +{ + return pd->interpolator; +} + +EOLIAN static double +_efl_canvas_animation_animation_apply(Eo *eo_obj, + Efl_Canvas_Animation_Data *pd EINA_UNUSED, + double progress, + Efl_Canvas_Object *target EINA_UNUSED) +{ + Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj); + if (interpolator) + progress = efl_interpolator_interpolate(interpolator, progress); + + return progress; +} + +EOLIAN static double +_efl_canvas_animation_efl_playable_length_get(const Eo *eo_obj, Efl_Canvas_Animation_Data *pd EINA_UNUSED) +{ + if (efl_animation_repeat_count_get(eo_obj) == EFL_ANIMATION_REPEAT_INFINITE) + { + //TODO: what's correct? + return (double)EFL_ANIMATION_REPEAT_INFINITE; + } + + return (efl_animation_duration_get(eo_obj) * (efl_animation_repeat_count_get(eo_obj) + 1)); +} + +EOLIAN static Eina_Bool +_efl_canvas_animation_efl_playable_playable_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd EINA_UNUSED) +{ + return EINA_TRUE; +} + +EOLIAN static Eina_Bool +_efl_canvas_animation_efl_playable_seekable_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd EINA_UNUSED) +{ + return EINA_TRUE; +} + +#include "efl_canvas_animation.eo.c" |