summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaehyun Cho <jae_hyun.cho@samsung.com>2017-09-13 14:59:22 +0900
committerJaehyun Cho <jae_hyun.cho@samsung.com>2017-09-27 11:29:25 +0900
commite41b9b01cd91e11be4f68f3109a93233ab0751b0 (patch)
treea04ee0129f680c6131eb0de07453b46de83e779e
parent07514172a3a3ee8733ef4111d4cffd6219f7d49d (diff)
downloadefl-devs/jaehyun/efl_animation2.tar.gz
efl_animation: Add interpolator propertydevs/jaehyun/efl_animation2
Interpolator property is added to apply interpolation function.
-rw-r--r--src/lib/evas/Evas_Internal.h3
-rw-r--r--src/lib/evas/canvas/efl_animation.c21
-rw-r--r--src/lib/evas/canvas/efl_animation.eo9
-rw-r--r--src/lib/evas/canvas/efl_animation_alpha.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_alpha_private.h1
-rw-r--r--src/lib/evas/canvas/efl_animation_group.c17
-rw-r--r--src/lib/evas/canvas/efl_animation_group.eo1
-rw-r--r--src/lib/evas/canvas/efl_animation_group_parallel.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_group_parallel_private.h1
-rw-r--r--src/lib/evas/canvas/efl_animation_group_private.h1
-rw-r--r--src/lib/evas/canvas/efl_animation_group_sequential.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_group_sequential_private.h1
-rw-r--r--src/lib/evas/canvas/efl_animation_object.c41
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group.c22
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_parallel.c18
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_parallel_private.h1
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_private.h1
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_sequential.c18
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_sequential_private.h1
-rw-r--r--src/lib/evas/canvas/efl_animation_object_private.h2
-rw-r--r--src/lib/evas/canvas/efl_animation_private.h3
-rw-r--r--src/lib/evas/canvas/efl_animation_rotate.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_rotate_private.h1
-rw-r--r--src/lib/evas/canvas/efl_animation_scale.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_scale_private.h1
-rw-r--r--src/lib/evas/canvas/efl_animation_translate.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_translate_private.h1
27 files changed, 181 insertions, 2 deletions
diff --git a/src/lib/evas/Evas_Internal.h b/src/lib/evas/Evas_Internal.h
index 19cb0fcbfd..af8fcd6b6e 100644
--- a/src/lib/evas/Evas_Internal.h
+++ b/src/lib/evas/Evas_Internal.h
@@ -113,6 +113,9 @@ EOAPI Efl_Animation_Object_Repeat_Mode efl_animation_object_repeat_mode_get(cons
EOAPI void efl_animation_object_repeat_count_set(Eo *obj, int count);
EOAPI int efl_animation_object_repeat_count_get(const Eo *obj);
+EOAPI void efl_animation_object_interpolator_set(Eo *obj, Efl_Object *interpolator);
+EOAPI Efl_Object *efl_animation_object_interpolator_get(const Eo *obj);
+
EWAPI extern const Efl_Event_Description _EFL_ANIMATION_OBJECT_EVENT_PRE_START;
#define EFL_ANIMATION_OBJECT_EVENT_PRE_START (&(_EFL_ANIMATION_OBJECT_EVENT_PRE_START))
/* Efl.Animation.Object END */
diff --git a/src/lib/evas/canvas/efl_animation.c b/src/lib/evas/canvas/efl_animation.c
index f01a40ba67..874e4107dd 100644
--- a/src/lib/evas/canvas/efl_animation.c
+++ b/src/lib/evas/canvas/efl_animation.c
@@ -196,6 +196,25 @@ _efl_animation_start_delay_get(Eo *eo_obj,
return pd->start_delay_time;
}
+EOLIAN static void
+_efl_animation_interpolator_set(Eo *eo_obj,
+ Efl_Animation_Data *pd,
+ Efl_Interpolator *interpolator)
+{
+ EFL_ANIMATION_CHECK_OR_RETURN(eo_obj);
+
+ pd->interpolator = interpolator;
+}
+
+EOLIAN static Efl_Interpolator *
+_efl_animation_interpolator_get(Eo *eo_obj,
+ Efl_Animation_Data *pd)
+{
+ EFL_ANIMATION_CHECK_OR_RETURN(eo_obj, NULL);
+
+ return pd->interpolator;
+}
+
EOLIAN static Efl_Object *
_efl_animation_efl_object_constructor(Eo *eo_obj,
Efl_Animation_Data *pd)
@@ -210,6 +229,8 @@ _efl_animation_efl_object_constructor(Eo *eo_obj,
pd->repeat_count = 0;
+ pd->interpolator = NULL;
+
pd->is_deleted = EINA_FALSE;
pd->keep_final_state = EINA_FALSE;
diff --git a/src/lib/evas/canvas/efl_animation.eo b/src/lib/evas/canvas/efl_animation.eo
index edcfec0d67..4dc169b0f8 100644
--- a/src/lib/evas/canvas/efl_animation.eo
+++ b/src/lib/evas/canvas/efl_animation.eo
@@ -74,6 +74,15 @@ class Efl.Animation (Efl.Object)
delay_time: double; [[Delay time, in seconds, from when the animation starts until the animation is animated]]
}
}
+ @property interpolator {
+ set {
+ }
+ get {
+ }
+ values {
+ interpolator: Efl.Object; [[Interpolator which indicates interpolation fucntion. Efl_Interpolator is required.]]
+ }
+ }
is_deleted @protected {
return: bool; [[$true if animation is deleted, $false otherwise.]]
}
diff --git a/src/lib/evas/canvas/efl_animation_alpha.c b/src/lib/evas/canvas/efl_animation_alpha.c
index 8dff1442ed..2e21e6a24b 100644
--- a/src/lib/evas/canvas/efl_animation_alpha.c
+++ b/src/lib/evas/canvas/efl_animation_alpha.c
@@ -57,6 +57,9 @@ _efl_animation_alpha_efl_animation_object_create(Eo *eo_obj,
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_object_repeat_count_set(anim_obj, repeat_count);
+ Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
+ efl_animation_object_interpolator_set(anim_obj, interpolator);
+
efl_animation_object_alpha_set(anim_obj, pd->from.alpha, pd->to.alpha);
return anim_obj;
diff --git a/src/lib/evas/canvas/efl_animation_alpha_private.h b/src/lib/evas/canvas/efl_animation_alpha_private.h
index 58e429eb07..fc08be75bc 100644
--- a/src/lib/evas/canvas/efl_animation_alpha_private.h
+++ b/src/lib/evas/canvas/efl_animation_alpha_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_ALPHA_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_group.c b/src/lib/evas/canvas/efl_animation_group.c
index 750a69de9f..dd2b30a20e 100644
--- a/src/lib/evas/canvas/efl_animation_group.c
+++ b/src/lib/evas/canvas/efl_animation_group.c
@@ -106,6 +106,23 @@ _efl_animation_group_efl_animation_final_state_keep_set(Eo *eo_obj,
efl_animation_final_state_keep_set(efl_super(eo_obj, MY_CLASS), keep_final_state);
}
+EOLIAN static void
+_efl_animation_group_efl_animation_interpolator_set(Eo *eo_obj,
+ Efl_Animation_Group_Data *pd,
+ Efl_Interpolator *interpolator)
+{
+ EFL_ANIMATION_GROUP_CHECK_OR_RETURN(eo_obj);
+
+ Eina_List *l;
+ Efl_Animation *anim;
+ EINA_LIST_FOREACH(pd->animations, l, anim)
+ {
+ efl_animation_interpolator_set(anim, interpolator);
+ }
+
+ efl_animation_interpolator_set(efl_super(eo_obj, MY_CLASS), interpolator);
+}
+
EOLIAN static Efl_Object *
_efl_animation_group_efl_object_constructor(Eo *eo_obj,
Efl_Animation_Group_Data *pd)
diff --git a/src/lib/evas/canvas/efl_animation_group.eo b/src/lib/evas/canvas/efl_animation_group.eo
index c287490907..a431e39737 100644
--- a/src/lib/evas/canvas/efl_animation_group.eo
+++ b/src/lib/evas/canvas/efl_animation_group.eo
@@ -28,5 +28,6 @@ abstract Efl.Animation.Group (Efl.Animation)
Efl.Animation.target { set; }
Efl.Animation.duration { set; }
Efl.Animation.final_state_keep { set; }
+ Efl.Animation.interpolator { set; }
}
}
diff --git a/src/lib/evas/canvas/efl_animation_group_parallel.c b/src/lib/evas/canvas/efl_animation_group_parallel.c
index 36a2e0653b..1a0bb460ab 100644
--- a/src/lib/evas/canvas/efl_animation_group_parallel.c
+++ b/src/lib/evas/canvas/efl_animation_group_parallel.c
@@ -116,6 +116,9 @@ _efl_animation_group_parallel_efl_animation_object_create(Eo *eo_obj,
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_object_repeat_count_set(group_anim_obj, repeat_count);
+ Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
+ efl_animation_object_interpolator_set(group_anim_obj, interpolator);
+
return group_anim_obj;
}
diff --git a/src/lib/evas/canvas/efl_animation_group_parallel_private.h b/src/lib/evas/canvas/efl_animation_group_parallel_private.h
index b425a1606e..a2f00cd3dd 100644
--- a/src/lib/evas/canvas/efl_animation_group_parallel_private.h
+++ b/src/lib/evas/canvas/efl_animation_group_parallel_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_GROUP_PARALLEL_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_group_private.h b/src/lib/evas/canvas/efl_animation_group_private.h
index 0ce4728bf2..c107828c74 100644
--- a/src/lib/evas/canvas/efl_animation_group_private.h
+++ b/src/lib/evas/canvas/efl_animation_group_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_GROUP_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_group_sequential.c b/src/lib/evas/canvas/efl_animation_group_sequential.c
index f40b769fdd..5f858586fc 100644
--- a/src/lib/evas/canvas/efl_animation_group_sequential.c
+++ b/src/lib/evas/canvas/efl_animation_group_sequential.c
@@ -110,6 +110,9 @@ _efl_animation_group_sequential_efl_animation_object_create(Eo *eo_obj,
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_object_repeat_count_set(group_anim_obj, repeat_count);
+ Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
+ efl_animation_object_interpolator_set(group_anim_obj, interpolator);
+
return group_anim_obj;
}
diff --git a/src/lib/evas/canvas/efl_animation_group_sequential_private.h b/src/lib/evas/canvas/efl_animation_group_sequential_private.h
index e944ffdcb0..4fe4dc08d7 100644
--- a/src/lib/evas/canvas/efl_animation_group_sequential_private.h
+++ b/src/lib/evas/canvas/efl_animation_group_sequential_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_GROUP_SEQUENTIAL_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_object.c b/src/lib/evas/canvas/efl_animation_object.c
index 21be199852..6d6c8d2abd 100644
--- a/src/lib/evas/canvas/efl_animation_object.c
+++ b/src/lib/evas/canvas/efl_animation_object.c
@@ -151,6 +151,24 @@ _efl_animation_object_start_delay_get(Eo *eo_obj,
return pd->start_delay_time;
}
+EOLIAN static void
+_efl_animation_object_interpolator_set(Eo *eo_obj,
+ Efl_Animation_Object_Data *pd,
+ Efl_Interpolator *interpolator)
+{
+ EFL_ANIMATION_OBJECT_CHECK_OR_RETURN(eo_obj);
+
+ pd->interpolator = interpolator;
+}
+
+EOLIAN static Efl_Interpolator *
+_efl_animation_object_interpolator_get(Eo *eo_obj,
+ Efl_Animation_Object_Data *pd)
+{
+ EFL_ANIMATION_OBJECT_CHECK_OR_RETURN(eo_obj, NULL);
+
+ return pd->interpolator;
+}
EOLIAN static Eina_Bool
_efl_animation_object_is_deleted(Eo *eo_obj,
@@ -296,6 +314,13 @@ _animator_cb(void *data)
if (!pd->is_direction_forward)
pd->progress = 1.0 - pd->progress;
+ //Apply interpolator
+ if (pd->interpolator)
+ {
+ pd->progress = efl_interpolator_interpolate(pd->interpolator,
+ pd->progress);
+ }
+
//Reset previous animation effect before applying animation effect
/* FIXME: When the target state is saved, it may not be finished to calculate
* target geometry.
@@ -456,6 +481,13 @@ _efl_animation_object_progress_set(Eo *eo_obj,
if (!pd->is_direction_forward)
pd->progress = 1.0 - pd->progress;
+ //Apply interpolator
+ if (pd->interpolator)
+ {
+ pd->progress = efl_interpolator_interpolate(pd->interpolator,
+ pd->progress);
+ }
+
Efl_Animation_Object_Animate_Event_Info event_info;
event_info.progress = progress;
@@ -524,6 +556,8 @@ _efl_animation_object_efl_object_constructor(Eo *eo_obj,
pd->repeat_mode = EFL_ANIMATION_OBJECT_REPEAT_MODE_RESTART;
pd->repeat_count = 0;
+ pd->interpolator = NULL;
+
pd->is_deleted = EINA_FALSE;
pd->is_cancelled = EINA_FALSE;
pd->keep_final_state = EINA_FALSE;
@@ -583,6 +617,9 @@ EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_repeat_mode_get, Efl_Animation_Ob
EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_repeat_count_set, EFL_FUNC_CALL(count), int count);
EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_repeat_count_get, int, 0);
+EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_interpolator_set, EFL_FUNC_CALL(interpolator), Efl_Interpolator *interpolator);
+EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_interpolator_get, Efl_Interpolator *, NULL);
+
#define EFL_ANIMATION_OBJECT_EXTRA_OPS \
EFL_OBJECT_OP_FUNC(efl_animation_object_target_set, _efl_animation_object_target_set), \
EFL_OBJECT_OP_FUNC(efl_animation_object_target_get, _efl_animation_object_target_get), \
@@ -598,7 +635,9 @@ EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_repeat_count_get, int, 0);
EFL_OBJECT_OP_FUNC(efl_animation_object_repeat_mode_set, _efl_animation_object_repeat_mode_set), \
EFL_OBJECT_OP_FUNC(efl_animation_object_repeat_mode_get, _efl_animation_object_repeat_mode_get), \
EFL_OBJECT_OP_FUNC(efl_animation_object_repeat_count_set, _efl_animation_object_repeat_count_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_repeat_count_get, _efl_animation_object_repeat_count_get)
+ EFL_OBJECT_OP_FUNC(efl_animation_object_repeat_count_get, _efl_animation_object_repeat_count_get), \
+ EFL_OBJECT_OP_FUNC(efl_animation_object_interpolator_set, _efl_animation_object_interpolator_set), \
+ EFL_OBJECT_OP_FUNC(efl_animation_object_interpolator_get, _efl_animation_object_interpolator_get)
EWAPI const Efl_Event_Description _EFL_ANIMATION_OBJECT_EVENT_PRE_START =
EFL_EVENT_DESCRIPTION("pre_start");
diff --git a/src/lib/evas/canvas/efl_animation_object_group.c b/src/lib/evas/canvas/efl_animation_object_group.c
index df3aca148c..6c8c1b2893 100644
--- a/src/lib/evas/canvas/efl_animation_object_group.c
+++ b/src/lib/evas/canvas/efl_animation_object_group.c
@@ -112,6 +112,25 @@ _efl_animation_object_group_efl_animation_object_final_state_keep_set(Eo *eo_obj
state_keep);
}
+EOLIAN static void
+_efl_animation_object_group_efl_animation_object_interpolator_set(Eo *eo_obj,
+ Efl_Animation_Object_Group_Data *pd,
+ Efl_Interpolator *interpolator)
+{
+ EFL_ANIMATION_OBJECT_GROUP_CHECK_OR_RETURN(eo_obj);
+
+ Eina_List *l;
+ Efl_Animation_Object *anim_obj;
+
+ EINA_LIST_FOREACH(pd->anim_objs, l, anim_obj)
+ {
+ efl_animation_object_interpolator_set(anim_obj, interpolator);
+ }
+
+ efl_animation_object_interpolator_set(efl_super(eo_obj, MY_CLASS),
+ interpolator);
+}
+
EOLIAN static Efl_Object *
_efl_animation_object_group_efl_object_constructor(Eo *eo_obj,
Efl_Animation_Object_Group_Data *pd)
@@ -198,6 +217,7 @@ EOAPI EFL_FUNC_BODY(efl_animation_object_group_objects_get, Eina_List *, NULL);
EFL_OBJECT_OP_FUNC(efl_animation_object_group_objects_get, _efl_animation_object_group_objects_get), \
EFL_OBJECT_OP_FUNC(efl_animation_object_target_set, _efl_animation_object_group_efl_animation_object_target_set), \
EFL_OBJECT_OP_FUNC(efl_animation_object_duration_set, _efl_animation_object_group_efl_animation_object_duration_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_final_state_keep_set, _efl_animation_object_group_efl_animation_object_final_state_keep_set)
+ EFL_OBJECT_OP_FUNC(efl_animation_object_final_state_keep_set, _efl_animation_object_group_efl_animation_object_final_state_keep_set), \
+ EFL_OBJECT_OP_FUNC(efl_animation_object_interpolator_set, _efl_animation_object_group_efl_animation_object_interpolator_set)
#include "efl_animation_object_group.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_object_group_parallel.c b/src/lib/evas/canvas/efl_animation_object_group_parallel.c
index 544c926510..fd43ba00db 100644
--- a/src/lib/evas/canvas/efl_animation_object_group_parallel.c
+++ b/src/lib/evas/canvas/efl_animation_object_group_parallel.c
@@ -244,6 +244,24 @@ _efl_animation_object_group_parallel_efl_animation_object_progress_set(Eo *eo_ob
}
}
+ //Apply interpolator
+ Efl_Interpolator *group_interp =
+ efl_animation_object_interpolator_get(eo_obj);
+
+ /* If group interpolator exists, then the group interpolator has been
+ * already applied. So it is not needed to apply interpolator again. */
+ if (!group_interp)
+ {
+ Efl_Interpolator *interpolator =
+ efl_animation_object_interpolator_get(anim_obj);
+ if (interpolator)
+ {
+ anim_obj_progress =
+ efl_interpolator_interpolate(interpolator,
+ anim_obj_progress);
+ }
+ }
+
efl_animation_object_progress_set(anim_obj, anim_obj_progress);
}
}
diff --git a/src/lib/evas/canvas/efl_animation_object_group_parallel_private.h b/src/lib/evas/canvas/efl_animation_object_group_parallel_private.h
index 8ccfe5d7e8..d6119623ba 100644
--- a/src/lib/evas/canvas/efl_animation_object_group_parallel_private.h
+++ b/src/lib/evas/canvas/efl_animation_object_group_parallel_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_OBJECT_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_OBJECT_GROUP_PARALLEL_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_object_group_private.h b/src/lib/evas/canvas/efl_animation_object_group_private.h
index a710b462e7..52456b3f89 100644
--- a/src/lib/evas/canvas/efl_animation_object_group_private.h
+++ b/src/lib/evas/canvas/efl_animation_object_group_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_OBJECT_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_OBJECT_GROUP_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_object_group_sequential.c b/src/lib/evas/canvas/efl_animation_object_group_sequential.c
index 2a650cf72c..572d4cf565 100644
--- a/src/lib/evas/canvas/efl_animation_object_group_sequential.c
+++ b/src/lib/evas/canvas/efl_animation_object_group_sequential.c
@@ -257,6 +257,24 @@ _efl_animation_object_group_sequential_efl_animation_object_progress_set(Eo *eo_
}
}
+ //Apply interpolator
+ Efl_Interpolator *group_interp =
+ efl_animation_object_interpolator_get(eo_obj);
+
+ /* If group interpolator exists, then the group interpolator has been
+ * already applied. So it is not needed to apply interpolator again. */
+ if (!group_interp)
+ {
+ Efl_Interpolator *interpolator =
+ efl_animation_object_interpolator_get(anim_obj);
+ if (interpolator)
+ {
+ anim_obj_progress =
+ efl_interpolator_interpolate(interpolator,
+ anim_obj_progress);
+ }
+ }
+
efl_animation_object_progress_set(anim_obj, anim_obj_progress);
}
}
diff --git a/src/lib/evas/canvas/efl_animation_object_group_sequential_private.h b/src/lib/evas/canvas/efl_animation_object_group_sequential_private.h
index aa6f989acf..f0bbe8f7a1 100644
--- a/src/lib/evas/canvas/efl_animation_object_group_sequential_private.h
+++ b/src/lib/evas/canvas/efl_animation_object_group_sequential_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_OBJECT_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_OBJECT_GROUP_SEQUENTIAL_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_object_private.h b/src/lib/evas/canvas/efl_animation_object_private.h
index c4675815b3..591835fe94 100644
--- a/src/lib/evas/canvas/efl_animation_object_private.h
+++ b/src/lib/evas/canvas/efl_animation_object_private.h
@@ -41,6 +41,8 @@ typedef struct _Efl_Animation_Object_Data
int repeat_count;
int remaining_repeat_count;
+ Efl_Interpolator *interpolator;
+
Eina_Bool is_deleted : 1;
Eina_Bool is_started : 1;
Eina_Bool is_cancelled : 1;
diff --git a/src/lib/evas/canvas/efl_animation_private.h b/src/lib/evas/canvas/efl_animation_private.h
index 1cd84d2a59..466bbfdcf2 100644
--- a/src/lib/evas/canvas/efl_animation_private.h
+++ b/src/lib/evas/canvas/efl_animation_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
@@ -17,6 +18,8 @@ typedef struct _Efl_Animation_Data
Efl_Animation_Repeat_Mode repeat_mode;
int repeat_count;
+ Efl_Interpolator *interpolator;
+
Eina_Bool is_deleted : 1;
Eina_Bool keep_final_state : 1;
} Efl_Animation_Data;
diff --git a/src/lib/evas/canvas/efl_animation_rotate.c b/src/lib/evas/canvas/efl_animation_rotate.c
index addfc2e9bf..53c7de7c72 100644
--- a/src/lib/evas/canvas/efl_animation_rotate.c
+++ b/src/lib/evas/canvas/efl_animation_rotate.c
@@ -205,6 +205,9 @@ _efl_animation_rotate_efl_animation_object_create(Eo *eo_obj,
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_object_repeat_count_set(anim_obj, repeat_count);
+ Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
+ efl_animation_object_interpolator_set(anim_obj, interpolator);
+
if (pd->use_rel_pivot)
{
efl_animation_object_rotate_set(anim_obj,
diff --git a/src/lib/evas/canvas/efl_animation_rotate_private.h b/src/lib/evas/canvas/efl_animation_rotate_private.h
index 58e7d12554..6dcda258cb 100644
--- a/src/lib/evas/canvas/efl_animation_rotate_private.h
+++ b/src/lib/evas/canvas/efl_animation_rotate_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_ROTATE_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_scale.c b/src/lib/evas/canvas/efl_animation_scale.c
index ed7ad3b142..11f27c211d 100644
--- a/src/lib/evas/canvas/efl_animation_scale.c
+++ b/src/lib/evas/canvas/efl_animation_scale.c
@@ -231,6 +231,9 @@ _efl_animation_scale_efl_animation_object_create(Eo *eo_obj,
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_object_repeat_count_set(anim_obj, repeat_count);
+ Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
+ efl_animation_object_interpolator_set(anim_obj, interpolator);
+
if (pd->use_rel_pivot)
{
efl_animation_object_scale_set(anim_obj,
diff --git a/src/lib/evas/canvas/efl_animation_scale_private.h b/src/lib/evas/canvas/efl_animation_scale_private.h
index 298097a64c..f9be19f3b7 100644
--- a/src/lib/evas/canvas/efl_animation_scale_private.h
+++ b/src/lib/evas/canvas/efl_animation_scale_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_SCALE_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_translate.c b/src/lib/evas/canvas/efl_animation_translate.c
index 622727697f..79cf8f131d 100644
--- a/src/lib/evas/canvas/efl_animation_translate.c
+++ b/src/lib/evas/canvas/efl_animation_translate.c
@@ -173,6 +173,9 @@ _efl_animation_translate_efl_animation_object_create(Eo *eo_obj,
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_object_repeat_count_set(anim_obj, repeat_count);
+ Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
+ efl_animation_object_interpolator_set(anim_obj, interpolator);
+
if (pd->use_rel_move)
{
efl_animation_object_translate_set(anim_obj,
diff --git a/src/lib/evas/canvas/efl_animation_translate_private.h b/src/lib/evas/canvas/efl_animation_translate_private.h
index 7428012e98..6b4a69c697 100644
--- a/src/lib/evas/canvas/efl_animation_translate_private.h
+++ b/src/lib/evas/canvas/efl_animation_translate_private.h
@@ -1,6 +1,7 @@
#define EFL_ANIMATION_PROTECTED
#include "evas_common_private.h"
+#include <Ecore.h>
#define MY_CLASS EFL_ANIMATION_TRANSLATE_CLASS
#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)