2018-02-21 10:38:39 -08:00
|
|
|
#include "efl_canvas_animation_private.h"
|
2019-12-04 01:20:38 -08:00
|
|
|
#include <math.h>
|
2018-02-21 10:38:39 -08:00
|
|
|
#define MY_CLASS EFL_CANVAS_ANIMATION_CLASS
|
|
|
|
|
2019-12-04 01:14:09 -08:00
|
|
|
static double _default_animation_time = 0.2; //in seconds
|
|
|
|
|
2018-02-21 10:38:39 -08:00
|
|
|
EOLIAN static void
|
|
|
|
_efl_canvas_animation_duration_set(Eo *eo_obj EINA_UNUSED,
|
|
|
|
Efl_Canvas_Animation_Data *pd,
|
|
|
|
double sec)
|
|
|
|
{
|
2019-11-11 01:14:42 -08:00
|
|
|
EINA_SAFETY_ON_FALSE_RETURN(sec > 0.0);
|
2018-02-21 10:38:39 -08:00
|
|
|
pd->duration = sec;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static double
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_canvas_animation_duration_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd)
|
2018-02-21 10:38:39 -08:00
|
|
|
{
|
|
|
|
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
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_canvas_animation_final_state_keep_get(const Eo *eo_obj EINA_UNUSED,
|
2018-02-21 10:38:39 -08:00
|
|
|
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)
|
|
|
|
{
|
2019-10-30 07:30:09 -07:00
|
|
|
EINA_SAFETY_ON_FALSE_RETURN(mode >= 0 && mode < EFL_CANVAS_ANIMATION_REPEAT_MODE_LAST);
|
|
|
|
pd->repeat_mode = mode;
|
2018-02-21 10:38:39 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Efl_Canvas_Animation_Repeat_Mode
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_canvas_animation_repeat_mode_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd)
|
2018-02-21 10:38:39 -08:00
|
|
|
{
|
|
|
|
return pd->repeat_mode;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
2019-12-04 08:25:45 -08:00
|
|
|
_efl_canvas_animation_play_count_set(Eo *eo_obj EINA_UNUSED,
|
2018-02-21 10:38:39 -08:00
|
|
|
Efl_Canvas_Animation_Data *pd,
|
|
|
|
int count)
|
|
|
|
{
|
2019-12-04 08:25:45 -08:00
|
|
|
EINA_SAFETY_ON_FALSE_RETURN(count >= 0);
|
2018-02-21 10:38:39 -08:00
|
|
|
|
2019-12-04 08:25:45 -08:00
|
|
|
pd->play_count = count;
|
2018-02-21 10:38:39 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static int
|
2019-12-04 08:25:45 -08:00
|
|
|
_efl_canvas_animation_play_count_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd)
|
2018-02-21 10:38:39 -08:00
|
|
|
{
|
2019-12-04 08:25:45 -08:00
|
|
|
return pd->play_count;
|
2018-02-21 10:38:39 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
|
|
|
_efl_canvas_animation_start_delay_set(Eo *eo_obj EINA_UNUSED,
|
|
|
|
Efl_Canvas_Animation_Data *pd,
|
|
|
|
double sec)
|
|
|
|
{
|
2019-11-11 01:14:42 -08:00
|
|
|
EINA_SAFETY_ON_FALSE_RETURN(sec >= 0.0);
|
2018-02-21 10:38:39 -08:00
|
|
|
|
|
|
|
pd->start_delay_time = sec;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static double
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_canvas_animation_start_delay_get(const Eo *eo_obj EINA_UNUSED,
|
2018-02-21 10:38:39 -08:00
|
|
|
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 *
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_canvas_animation_interpolator_get(const Eo *eo_obj EINA_UNUSED,
|
2018-02-21 10:38:39 -08:00
|
|
|
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
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_canvas_animation_efl_playable_length_get(const Eo *eo_obj, Efl_Canvas_Animation_Data *pd EINA_UNUSED)
|
2018-02-21 10:38:39 -08:00
|
|
|
{
|
2019-12-04 08:25:45 -08:00
|
|
|
if (efl_animation_play_count_get(eo_obj) == 0)
|
2018-02-21 10:38:39 -08:00
|
|
|
{
|
2019-12-04 01:20:38 -08:00
|
|
|
return INFINITY;
|
2018-02-21 10:38:39 -08:00
|
|
|
}
|
|
|
|
|
2019-12-04 08:25:45 -08:00
|
|
|
return (efl_animation_duration_get(eo_obj) * efl_animation_play_count_get(eo_obj));
|
2018-02-21 10:38:39 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_canvas_animation_efl_playable_playable_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd EINA_UNUSED)
|
2018-02-21 10:38:39 -08:00
|
|
|
{
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_canvas_animation_efl_playable_seekable_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Data *pd EINA_UNUSED)
|
2018-02-21 10:38:39 -08:00
|
|
|
{
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
2019-12-04 01:14:09 -08:00
|
|
|
EOLIAN static Efl_Object*
|
|
|
|
_efl_canvas_animation_efl_object_constructor(Eo *obj, Efl_Canvas_Animation_Data *pd)
|
|
|
|
{
|
|
|
|
pd->duration = _default_animation_time;
|
2019-12-04 08:25:45 -08:00
|
|
|
pd->play_count = 1;
|
2019-12-04 01:14:09 -08:00
|
|
|
return efl_constructor(efl_super(obj, MY_CLASS));
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
|
|
|
_efl_canvas_animation_default_duration_set(double animation_time)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_FALSE_RETURN(animation_time > 0.0);
|
|
|
|
_default_animation_time = animation_time;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static double
|
|
|
|
_efl_canvas_animation_default_duration_get(void)
|
|
|
|
{
|
|
|
|
return _default_animation_time;
|
|
|
|
}
|
|
|
|
|
2018-02-21 10:38:39 -08:00
|
|
|
#include "efl_canvas_animation.eo.c"
|