summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaehyun Cho <jae_hyun.cho@samsung.com>2017-07-13 19:07:11 +0900
committerJaehyun Cho <jae_hyun.cho@samsung.com>2017-08-18 12:06:01 +0900
commit79230ed40616c68a1e79bf2eefcb1250dd8b43c7 (patch)
tree9494ba041fb8920f9377d8467494ae5e44b6b20d
parent71aca113bd7ca9c0dcfc8bf19be73a2bd7aa1503 (diff)
downloadefl-79230ed40616c68a1e79bf2eefcb1250dd8b43c7.tar.gz
efl_animation: Add start_delay property
Add start_delay property to delay the given amount of time in seconds from when the animation starts until the animation is animated.
-rw-r--r--src/lib/evas/Evas_Internal.h3
-rw-r--r--src/lib/evas/canvas/efl_animation.c23
-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_group_parallel.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_group_sequential.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_instance.c91
-rw-r--r--src/lib/evas/canvas/efl_animation_instance_group_parallel.c88
-rw-r--r--src/lib/evas/canvas/efl_animation_instance_group_sequential.c74
-rw-r--r--src/lib/evas/canvas/efl_animation_rotate.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_scale.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_translate.c3
12 files changed, 286 insertions, 20 deletions
diff --git a/src/lib/evas/Evas_Internal.h b/src/lib/evas/Evas_Internal.h
index 984bc27e76..3296fea633 100644
--- a/src/lib/evas/Evas_Internal.h
+++ b/src/lib/evas/Evas_Internal.h
@@ -93,6 +93,9 @@ EOAPI Eina_Bool efl_animation_instance_final_state_keep_get(const Eo *obj);
EOAPI void efl_animation_instance_duration_set(Eo *obj, double duration);
EOAPI double efl_animation_instance_duration_get(const Eo *obj);
+EOAPI void efl_animation_instance_start_delay_set(Eo *obj, double delay_time);
+EOAPI double efl_animation_instance_start_delay_get(const Eo *obj);
+
EOAPI void efl_animation_instance_repeat_count_set(Eo *obj, int count);
EOAPI int efl_animation_instance_repeat_count_get(const Eo *obj);
diff --git a/src/lib/evas/canvas/efl_animation.c b/src/lib/evas/canvas/efl_animation.c
index 1446c47980..e1265c761d 100644
--- a/src/lib/evas/canvas/efl_animation.c
+++ b/src/lib/evas/canvas/efl_animation.c
@@ -33,6 +33,7 @@ struct _Evas_Object_Animation_Data
Efl_Canvas_Object *target;
double duration;
+ double start_delay_time;
int repeat_count;
@@ -114,6 +115,27 @@ _efl_animation_repeat_count_get(Eo *eo_obj, Evas_Object_Animation_Data *pd)
return pd->repeat_count;
}
+EOLIAN static void
+_efl_animation_start_delay_set(Eo *eo_obj,
+ Evas_Object_Animation_Data *pd,
+ double delay_time)
+{
+ EFL_ANIMATION_CHECK_OR_RETURN(eo_obj);
+
+ if (delay_time < 0.0) return;
+
+ pd->start_delay_time = delay_time;
+}
+
+EOLIAN static double
+_efl_animation_start_delay_get(Eo *eo_obj,
+ Evas_Object_Animation_Data *pd)
+{
+ EFL_ANIMATION_CHECK_OR_RETURN(eo_obj, 0.0);
+
+ return pd->start_delay_time;
+}
+
EOLIAN static Eina_Bool
_efl_animation_is_deleted(Eo *eo_obj, Evas_Object_Animation_Data *pd)
{
@@ -151,6 +173,7 @@ _efl_animation_efl_object_constructor(Eo *eo_obj,
pd->target = NULL;
pd->duration = 0.0;
+ pd->start_delay_time = 0.0;
pd->repeat_count = 0;
diff --git a/src/lib/evas/canvas/efl_animation.eo b/src/lib/evas/canvas/efl_animation.eo
index 084fd7a7b0..aed41751a8 100644
--- a/src/lib/evas/canvas/efl_animation.eo
+++ b/src/lib/evas/canvas/efl_animation.eo
@@ -42,6 +42,15 @@ abstract Efl.Animation (Efl.Object)
count: int; [[Repeat count. -1 repeats animation infinitely.]]
}
}
+ @property start_delay {
+ set {
+ }
+ get {
+ }
+ values {
+ delay_time: double; [[Delay time, in seconds, from when the animation starts until the animation is animated]]
+ }
+ }
instance_create {
[[Create instance of the animation.]]
return: Efl.Animation.Instance; [[Created instance of the animation]]
diff --git a/src/lib/evas/canvas/efl_animation_alpha.c b/src/lib/evas/canvas/efl_animation_alpha.c
index 8be3485122..e3f255ff8f 100644
--- a/src/lib/evas/canvas/efl_animation_alpha.c
+++ b/src/lib/evas/canvas/efl_animation_alpha.c
@@ -67,6 +67,9 @@ _efl_animation_alpha_efl_animation_instance_create(Eo *eo_obj, Evas_Object_Anima
double duration = efl_animation_duration_get(eo_obj);
efl_animation_instance_duration_set(instance, duration);
+ double start_delay_time = efl_animation_start_delay_get(eo_obj);
+ efl_animation_instance_start_delay_set(instance, start_delay_time);
+
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_instance_repeat_count_set(instance, repeat_count);
diff --git a/src/lib/evas/canvas/efl_animation_group_parallel.c b/src/lib/evas/canvas/efl_animation_group_parallel.c
index a92e08b046..3007664f90 100644
--- a/src/lib/evas/canvas/efl_animation_group_parallel.c
+++ b/src/lib/evas/canvas/efl_animation_group_parallel.c
@@ -51,6 +51,9 @@ _efl_animation_group_parallel_efl_animation_instance_create(Eo *eo_obj,
if (duration > 0.0)
efl_animation_instance_duration_set(group_inst, duration);
+ double start_delay_time = efl_animation_start_delay_get(eo_obj);
+ efl_animation_instance_start_delay_set(group_inst, start_delay_time);
+
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_instance_repeat_count_set(group_inst, repeat_count);
diff --git a/src/lib/evas/canvas/efl_animation_group_sequential.c b/src/lib/evas/canvas/efl_animation_group_sequential.c
index b24410f7d2..9b2c3dd705 100644
--- a/src/lib/evas/canvas/efl_animation_group_sequential.c
+++ b/src/lib/evas/canvas/efl_animation_group_sequential.c
@@ -51,6 +51,9 @@ _efl_animation_group_sequential_efl_animation_instance_create(Eo *eo_obj,
if (duration > 0.0)
efl_animation_instance_duration_set(group_inst, duration);
+ double start_delay_time = efl_animation_start_delay_get(eo_obj);
+ efl_animation_instance_start_delay_set(group_inst, start_delay_time);
+
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_instance_repeat_count_set(group_inst, repeat_count);
diff --git a/src/lib/evas/canvas/efl_animation_instance.c b/src/lib/evas/canvas/efl_animation_instance.c
index fb4e937d60..cb0c3a0b0c 100644
--- a/src/lib/evas/canvas/efl_animation_instance.c
+++ b/src/lib/evas/canvas/efl_animation_instance.c
@@ -39,6 +39,9 @@ struct _Evas_Object_Animation_Instance_Data
*/
Ecore_Animator *animator;
+ Ecore_Timer *start_delay_timer;
+ double start_delay_time;
+
struct
{
double begin;
@@ -300,21 +303,13 @@ end:
}
static void
-_start(Eo *eo_obj, Evas_Object_Animation_Instance_Data *pd)
+_init_start(Eo *eo_obj, Evas_Object_Animation_Instance_Data *pd)
{
- //Resume animation if animation is paused
- if (pd->paused)
- {
- efl_animation_instance_resume(eo_obj);
- return;
- }
-
//Save current state of target object
_target_state_save(pd->target, pd->target_state);
pd->cancelled = EINA_FALSE;
pd->ended = EINA_FALSE;
- pd->paused = EINA_FALSE;
pd->paused_time = 0.0;
@@ -330,12 +325,37 @@ _start(Eo *eo_obj, Evas_Object_Animation_Instance_Data *pd)
//pre start event is supported within class only (protected event)
efl_event_callback_call(eo_obj, EFL_ANIMATION_INSTANCE_EVENT_PRE_START, NULL);
efl_event_callback_call(eo_obj, EFL_ANIMATION_INSTANCE_EVENT_START, NULL);
+}
+
+static void
+_start(Eo *eo_obj, Evas_Object_Animation_Instance_Data *pd)
+{
+ _init_start(eo_obj, pd);
pd->animator = ecore_animator_add(_animator_cb, eo_obj);
_animator_cb(eo_obj);
}
+static Eina_Bool
+_start_delay_timer_cb(void *data)
+{
+ Eo *eo_obj = data;
+ EFL_ANIMATION_INSTANCE_DATA_GET(eo_obj, pd);
+
+ pd->start_delay_timer = NULL;
+
+ if (pd->paused)
+ {
+ pd->time.pause_begin = ecore_loop_time_get();
+ _init_start(eo_obj, pd);
+ }
+ else
+ _start(eo_obj, pd);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
EOLIAN static void
_efl_animation_instance_start(Eo *eo_obj,
Evas_Object_Animation_Instance_Data *pd)
@@ -344,8 +364,17 @@ _efl_animation_instance_start(Eo *eo_obj,
if (pd->paused) return;
+ if (pd->start_delay_timer) return;
+
pd->is_group_member = EINA_FALSE;
+ if (pd->start_delay_time > 0.0)
+ {
+ pd->start_delay_timer = ecore_timer_add(pd->start_delay_time,
+ _start_delay_timer_cb, eo_obj);
+ return;
+ }
+
_start(eo_obj, pd);
}
@@ -357,17 +386,52 @@ _efl_animation_instance_member_start(Eo *eo_obj,
if (pd->paused) return;
+ if (pd->paused) return;
+
+ if (pd->start_delay_timer) return;
+
pd->is_group_member = EINA_TRUE;
+ if (pd->start_delay_time > 0.0)
+ {
+ pd->start_delay_timer = ecore_timer_add(pd->start_delay_time,
+ _start_delay_timer_cb, eo_obj);
+ return;
+ }
+
_start(eo_obj, pd);
}
EOLIAN static void
+_efl_animation_instance_start_delay_set(Eo *eo_obj,
+ Evas_Object_Animation_Instance_Data *pd,
+ double delay_time)
+{
+ EFL_ANIMATION_INSTANCE_CHECK_OR_RETURN(eo_obj);
+
+ if (delay_time < 0.0) return;
+
+ pd->start_delay_time = delay_time;
+}
+
+EOLIAN static double
+_efl_animation_instance_start_delay_get(Eo *eo_obj,
+ Evas_Object_Animation_Instance_Data *pd)
+{
+ EFL_ANIMATION_INSTANCE_CHECK_OR_RETURN(eo_obj, 0.0);
+
+ return pd->start_delay_time;
+}
+
+EOLIAN static void
_efl_animation_instance_cancel(Eo *eo_obj,
Evas_Object_Animation_Instance_Data *pd)
{
EFL_ANIMATION_INSTANCE_CHECK_OR_RETURN(eo_obj);
+ ecore_timer_del(pd->start_delay_timer);
+ pd->start_delay_timer = NULL;
+
pd->cancelled = EINA_TRUE;
if (pd->animator)
@@ -400,6 +464,8 @@ _efl_animation_instance_pause(Eo *eo_obj,
if (pd->paused) return;
pd->paused = EINA_TRUE;
+ if (pd->start_delay_timer) return;
+
ecore_animator_del(pd->animator);
pd->animator = NULL;
@@ -419,6 +485,8 @@ _efl_animation_instance_resume(Eo *eo_obj,
if (!pd->paused) return;
pd->paused = EINA_FALSE;
+ if (pd->start_delay_timer) return;
+
pd->paused_time += (ecore_loop_time_get() - pd->time.pause_begin);
pd->animator = ecore_animator_add(_animator_cb, eo_obj);
@@ -506,6 +574,9 @@ EOAPI EFL_FUNC_BODY_CONST(efl_animation_instance_final_state_keep_get, Eina_Bool
EOAPI EFL_VOID_FUNC_BODYV(efl_animation_instance_duration_set, EFL_FUNC_CALL(duration), double duration);
EOAPI EFL_FUNC_BODY_CONST(efl_animation_instance_duration_get, double, 0);
+EOAPI EFL_VOID_FUNC_BODYV(efl_animation_instance_start_delay_set, EFL_FUNC_CALL(delay_time), double delay_time);
+EOAPI EFL_FUNC_BODY_CONST(efl_animation_instance_start_delay_get, double, 0);
+
EOAPI EFL_VOID_FUNC_BODYV(efl_animation_instance_repeat_count_set, EFL_FUNC_CALL(count), int count);
EOAPI EFL_FUNC_BODY_CONST(efl_animation_instance_repeat_count_get, int, 0);
@@ -531,6 +602,8 @@ EWAPI const Efl_Event_Description _EFL_ANIMATION_INSTANCE_EVENT_POST_END =
EFL_OBJECT_OP_FUNC(efl_animation_instance_final_state_keep_get, _efl_animation_instance_final_state_keep_get), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_duration_set, _efl_animation_instance_duration_set), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_duration_get, _efl_animation_instance_duration_get), \
+ EFL_OBJECT_OP_FUNC(efl_animation_instance_start_delay_set, _efl_animation_instance_start_delay_set), \
+ EFL_OBJECT_OP_FUNC(efl_animation_instance_start_delay_get, _efl_animation_instance_start_delay_get), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_repeat_count_set, _efl_animation_instance_repeat_count_set), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_repeat_count_get, _efl_animation_instance_repeat_count_get), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_is_deleted, _efl_animation_instance_is_deleted), \
diff --git a/src/lib/evas/canvas/efl_animation_instance_group_parallel.c b/src/lib/evas/canvas/efl_animation_instance_group_parallel.c
index d59de84d02..6a2d4b8e68 100644
--- a/src/lib/evas/canvas/efl_animation_instance_group_parallel.c
+++ b/src/lib/evas/canvas/efl_animation_instance_group_parallel.c
@@ -24,15 +24,18 @@ struct _Evas_Object_Animation_Instance_Group_Parallel_Data
{
Ecore_Animator *start_animator;
- int animate_inst_count;
- int animate_inst_index;
- int remaining_repeat_count;
+ Ecore_Timer *start_delay_timer;
+ double start_delay_time;
- Eina_List *finished_inst_list;
+ int animate_inst_count;
+ int animate_inst_index;
+ int remaining_repeat_count;
- Eina_Bool started : 1;
- Eina_Bool paused : 1;
- Eina_Bool is_group_member : 1;
+ Eina_List *finished_inst_list;
+
+ Eina_Bool started : 1;
+ Eina_Bool paused : 1;
+ Eina_Bool is_group_member : 1;
};
static void
@@ -180,7 +183,7 @@ _member_post_end_cb(void *data, const Efl_Event *event)
}
static void
-_start(Eo *eo_obj, Evas_Object_Animation_Instance_Group_Parallel_Data *pd)
+_init_start(Eo *eo_obj, Evas_Object_Animation_Instance_Group_Parallel_Data *pd)
{
ecore_animator_del(pd->start_animator);
pd->start_animator = NULL;
@@ -196,6 +199,12 @@ _start(Eo *eo_obj, Evas_Object_Animation_Instance_Group_Parallel_Data *pd)
pd->finished_inst_list = NULL;
efl_event_callback_call(eo_obj, EFL_ANIMATION_INSTANCE_EVENT_START, NULL);
+}
+
+static void
+_start(Eo *eo_obj, Evas_Object_Animation_Instance_Group_Parallel_Data *pd)
+{
+ _init_start(eo_obj, pd);
Eina_List *instances = efl_animation_instance_group_instances_get(eo_obj);
Eina_List *l;
@@ -208,6 +217,22 @@ _start(Eo *eo_obj, Evas_Object_Animation_Instance_Group_Parallel_Data *pd)
}
}
+static Eina_Bool
+_start_delay_timer_cb(void *data)
+{
+ Eo *eo_obj = data;
+ EFL_ANIMATION_INSTANCE_GROUP_PARALLEL_DATA_GET(eo_obj, pd);
+
+ pd->start_delay_timer = NULL;
+
+ if (pd->paused)
+ _init_start(eo_obj, pd);
+ else
+ _start(eo_obj, pd);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
EOLIAN static void
_efl_animation_instance_group_parallel_efl_animation_instance_start(Eo *eo_obj,
Evas_Object_Animation_Instance_Group_Parallel_Data *pd)
@@ -216,8 +241,17 @@ _efl_animation_instance_group_parallel_efl_animation_instance_start(Eo *eo_obj,
if (pd->paused) return;
+ if (pd->start_delay_timer) return;
+
pd->is_group_member = EINA_FALSE;
+ if (pd->start_delay_time > 0.0)
+ {
+ pd->start_delay_timer = ecore_timer_add(pd->start_delay_time,
+ _start_delay_timer_cb, eo_obj);
+ return;
+ }
+
_start(eo_obj, pd);
}
@@ -229,12 +263,42 @@ _efl_animation_instance_group_parallel_efl_animation_instance_member_start(Eo *e
if (pd->paused) return;
+ if (pd->start_delay_timer) return;
+
pd->is_group_member = EINA_TRUE;
+ if (pd->start_delay_time > 0.0)
+ {
+ pd->start_delay_timer = ecore_timer_add(pd->start_delay_time,
+ _start_delay_timer_cb, eo_obj);
+ return;
+ }
+
_start(eo_obj, pd);
}
EOLIAN static void
+_efl_animation_instance_group_parallel_efl_animation_instance_start_delay_set(Eo *eo_obj,
+ Evas_Object_Animation_Instance_Group_Parallel_Data *pd,
+ double delay_time)
+{
+ EFL_ANIMATION_INSTANCE_GROUP_PARALLEL_CHECK_OR_RETURN(eo_obj);
+
+ if (delay_time < 0.0) return;
+
+ pd->start_delay_time = delay_time;
+}
+
+EOLIAN static double
+_efl_animation_instance_group_parallel_efl_animation_instance_start_delay_get(Eo *eo_obj,
+ Evas_Object_Animation_Instance_Group_Parallel_Data *pd)
+{
+ EFL_ANIMATION_INSTANCE_GROUP_PARALLEL_CHECK_OR_RETURN(eo_obj, 0.0);
+
+ return pd->start_delay_time;
+}
+
+EOLIAN static void
_efl_animation_instance_group_parallel_efl_animation_instance_pause(Eo *eo_obj,
Evas_Object_Animation_Instance_Group_Parallel_Data *pd)
{
@@ -245,6 +309,8 @@ _efl_animation_instance_group_parallel_efl_animation_instance_pause(Eo *eo_obj,
if (pd->paused) return;
pd->paused = EINA_TRUE;
+ if (pd->start_delay_timer) return;
+
Eina_List *inst_list = efl_animation_instance_group_instances_get(eo_obj);
Eina_List *l;
Efl_Animation_Instance *inst;
@@ -266,6 +332,8 @@ _efl_animation_instance_group_parallel_efl_animation_instance_resume(Eo *eo_obj,
if (!pd->paused) return;
pd->paused = EINA_FALSE;
+ if (pd->start_delay_timer) return;
+
Eina_List *inst_list = efl_animation_instance_group_instances_get(eo_obj);
Eina_List *l;
Efl_Animation_Instance *inst;
@@ -343,6 +411,8 @@ _efl_animation_instance_group_parallel_efl_animation_instance_group_instance_del
EFL_OBJECT_OP_FUNC(efl_animation_instance_member_start, _efl_animation_instance_group_parallel_efl_animation_instance_member_start), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_final_state_show, _efl_animation_instance_group_parallel_efl_animation_instance_final_state_show), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_group_instance_add, _efl_animation_instance_group_parallel_efl_animation_instance_group_instance_add), \
- EFL_OBJECT_OP_FUNC(efl_animation_instance_group_instance_del, _efl_animation_instance_group_parallel_efl_animation_instance_group_instance_del)
+ EFL_OBJECT_OP_FUNC(efl_animation_instance_group_instance_del, _efl_animation_instance_group_parallel_efl_animation_instance_group_instance_del), \
+ EFL_OBJECT_OP_FUNC(efl_animation_instance_start_delay_set, _efl_animation_instance_group_parallel_efl_animation_instance_start_delay_set), \
+ EFL_OBJECT_OP_FUNC(efl_animation_instance_start_delay_get, _efl_animation_instance_group_parallel_efl_animation_instance_start_delay_get)
#include "efl_animation_instance_group_parallel.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_instance_group_sequential.c b/src/lib/evas/canvas/efl_animation_instance_group_sequential.c
index f4193a2583..65148de055 100644
--- a/src/lib/evas/canvas/efl_animation_instance_group_sequential.c
+++ b/src/lib/evas/canvas/efl_animation_instance_group_sequential.c
@@ -24,6 +24,9 @@ struct _Evas_Object_Animation_Instance_Group_Sequential_Data
{
Ecore_Animator *start_animator;
+ Ecore_Timer *start_delay_timer;
+ double start_delay_time;
+
unsigned int current_index;
int remaining_repeat_count;
@@ -168,7 +171,7 @@ _index_animation_start(Eo *eo_obj, int index)
}
static void
-_start(Eo *eo_obj, Evas_Object_Animation_Instance_Group_Sequential_Data *pd)
+_init_start(Eo *eo_obj, Evas_Object_Animation_Instance_Group_Sequential_Data *pd)
{
ecore_animator_del(pd->start_animator);
pd->start_animator = NULL;
@@ -183,10 +186,32 @@ _start(Eo *eo_obj, Evas_Object_Animation_Instance_Group_Sequential_Data *pd)
pd->finished_inst_list = NULL;
efl_event_callback_call(eo_obj, EFL_ANIMATION_INSTANCE_EVENT_START, NULL);
+}
+
+static void
+_start(Eo *eo_obj, Evas_Object_Animation_Instance_Group_Sequential_Data *pd)
+{
+ _init_start(eo_obj, pd);
_index_animation_start(eo_obj, pd->current_index);
}
+static Eina_Bool
+_start_delay_timer_cb(void *data)
+{
+ Eo *eo_obj = data;
+ EFL_ANIMATION_INSTANCE_GROUP_SEQUENTIAL_DATA_GET(eo_obj, pd);
+
+ pd->start_delay_timer = NULL;
+
+ if (pd->paused)
+ _init_start(eo_obj, pd);
+ else
+ _start(eo_obj, pd);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
EOLIAN static void
_efl_animation_instance_group_sequential_efl_animation_instance_start(Eo *eo_obj,
Evas_Object_Animation_Instance_Group_Sequential_Data *pd)
@@ -195,8 +220,17 @@ _efl_animation_instance_group_sequential_efl_animation_instance_start(Eo *eo_obj
if (pd->paused) return;
+ if (pd->start_delay_timer) return;
+
pd->is_group_member = EINA_FALSE;
+ if (pd->start_delay_time > 0.0)
+ {
+ pd->start_delay_timer = ecore_timer_add(pd->start_delay_time,
+ _start_delay_timer_cb, eo_obj);
+ return;
+ }
+
_start(eo_obj, pd);
}
@@ -208,12 +242,42 @@ _efl_animation_instance_group_sequential_efl_animation_instance_member_start(Eo
if (pd->paused) return;
+ if (pd->start_delay_timer) return;
+
pd->is_group_member = EINA_TRUE;
+ if (pd->start_delay_time > 0.0)
+ {
+ pd->start_delay_timer = ecore_timer_add(pd->start_delay_time,
+ _start_delay_timer_cb, eo_obj);
+ return;
+ }
+
_start(eo_obj, pd);
}
EOLIAN static void
+_efl_animation_instance_group_sequential_efl_animation_instance_start_delay_set(Eo *eo_obj,
+ Evas_Object_Animation_Instance_Group_Sequential_Data *pd,
+ double delay_time)
+{
+ EFL_ANIMATION_INSTANCE_GROUP_SEQUENTIAL_CHECK_OR_RETURN(eo_obj);
+
+ if (delay_time < 0.0) return;
+
+ pd->start_delay_time = delay_time;
+}
+
+EOLIAN static double
+_efl_animation_instance_group_sequential_efl_animation_instance_start_delay_get(Eo *eo_obj,
+ Evas_Object_Animation_Instance_Group_Sequential_Data *pd)
+{
+ EFL_ANIMATION_INSTANCE_GROUP_SEQUENTIAL_CHECK_OR_RETURN(eo_obj, 0.0);
+
+ return pd->start_delay_time;
+}
+
+EOLIAN static void
_efl_animation_instance_group_sequential_efl_animation_instance_pause(Eo *eo_obj,
Evas_Object_Animation_Instance_Group_Sequential_Data *pd)
{
@@ -224,6 +288,8 @@ _efl_animation_instance_group_sequential_efl_animation_instance_pause(Eo *eo_obj
if (pd->paused) return;
pd->paused = EINA_TRUE;
+ if (pd->start_delay_timer) return;
+
Eina_List *inst_list = efl_animation_instance_group_instances_get(eo_obj);
Eina_List *l;
Efl_Animation_Instance *inst;
@@ -245,6 +311,8 @@ _efl_animation_instance_group_sequential_efl_animation_instance_resume(Eo *eo_ob
if (!pd->paused) return;
pd->paused = EINA_FALSE;
+ if (pd->start_delay_timer) return;
+
Eina_List *inst_list = efl_animation_instance_group_instances_get(eo_obj);
Eina_List *l;
Efl_Animation_Instance *inst;
@@ -322,6 +390,8 @@ _efl_animation_instance_group_sequential_efl_animation_instance_final_state_show
EFL_OBJECT_OP_FUNC(efl_animation_instance_member_start, _efl_animation_instance_group_sequential_efl_animation_instance_member_start), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_final_state_show, _efl_animation_instance_group_sequential_efl_animation_instance_final_state_show), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_group_instance_add, _efl_animation_instance_group_sequential_efl_animation_instance_group_instance_add), \
- EFL_OBJECT_OP_FUNC(efl_animation_instance_group_instance_del, _efl_animation_instance_group_sequential_efl_animation_instance_group_instance_del)
+ EFL_OBJECT_OP_FUNC(efl_animation_instance_group_instance_del, _efl_animation_instance_group_sequential_efl_animation_instance_group_instance_del), \
+ EFL_OBJECT_OP_FUNC(efl_animation_instance_start_delay_set, _efl_animation_instance_group_sequential_efl_animation_instance_start_delay_set), \
+ EFL_OBJECT_OP_FUNC(efl_animation_instance_start_delay_get, _efl_animation_instance_group_sequential_efl_animation_instance_start_delay_get)
#include "efl_animation_instance_group_sequential.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_rotate.c b/src/lib/evas/canvas/efl_animation_rotate.c
index 3296c10f7c..9696b47b26 100644
--- a/src/lib/evas/canvas/efl_animation_rotate.c
+++ b/src/lib/evas/canvas/efl_animation_rotate.c
@@ -238,6 +238,9 @@ _efl_animation_rotate_efl_animation_instance_create(Eo *eo_obj,
double duration = efl_animation_duration_get(eo_obj);
efl_animation_instance_duration_set(instance, duration);
+ double start_delay_time = efl_animation_start_delay_get(eo_obj);
+ efl_animation_instance_start_delay_set(instance, start_delay_time);
+
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_instance_repeat_count_set(instance, repeat_count);
diff --git a/src/lib/evas/canvas/efl_animation_scale.c b/src/lib/evas/canvas/efl_animation_scale.c
index cec1eb4fab..a6f6c43825 100644
--- a/src/lib/evas/canvas/efl_animation_scale.c
+++ b/src/lib/evas/canvas/efl_animation_scale.c
@@ -264,6 +264,9 @@ _efl_animation_scale_efl_animation_instance_create(Eo *eo_obj,
double duration = efl_animation_duration_get(eo_obj);
efl_animation_instance_duration_set(instance, duration);
+ double start_delay_time = efl_animation_start_delay_get(eo_obj);
+ efl_animation_instance_start_delay_set(instance, start_delay_time);
+
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_instance_repeat_count_set(instance, repeat_count);
diff --git a/src/lib/evas/canvas/efl_animation_translate.c b/src/lib/evas/canvas/efl_animation_translate.c
index 661e710e5c..a336ce9072 100644
--- a/src/lib/evas/canvas/efl_animation_translate.c
+++ b/src/lib/evas/canvas/efl_animation_translate.c
@@ -193,6 +193,9 @@ _efl_animation_translate_efl_animation_instance_create(Eo *eo_obj,
double duration = efl_animation_duration_get(eo_obj);
efl_animation_instance_duration_set(instance, duration);
+ double start_delay_time = efl_animation_start_delay_get(eo_obj);
+ efl_animation_instance_start_delay_set(instance, start_delay_time);
+
int repeat_count = efl_animation_repeat_count_get(eo_obj);
efl_animation_instance_repeat_count_set(instance, repeat_count);