summaryrefslogtreecommitdiff
path: root/src/lib/evas/canvas/efl_canvas_animation.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/evas/canvas/efl_canvas_animation.c')
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation.c138
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"