summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaehyun Cho <jae_hyun.cho@samsung.com>2017-09-22 21:03:21 +0900
committerJaehyun Cho <jae_hyun.cho@samsung.com>2017-09-22 21:03:21 +0900
commitea16e811b3ead51cfb53fa6e93b6d480a5e023a2 (patch)
tree2a9138b1074d64d3289703b12cd212dd5aa6d5a3
parentf96c0ffa097600443a2c19b842d9990d352f3c52 (diff)
downloadefl-devs/jaehyun/efl_animation.tar.gz
efl_animation: Fix to call "animate" event callback of group memberdevs/jaehyun/efl_animation
Previously, if an animation instance was a member of a group animation instance, then the "animate" event callback was not called. Now, "animate" event callback is called even if the animation instance is a member of a group animation instance.
-rw-r--r--src/lib/evas/Evas_Internal.h2
-rw-r--r--src/lib/evas/canvas/efl_animation.c48
-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.c6
-rw-r--r--src/lib/evas/canvas/efl_animation_instance.c40
-rw-r--r--src/lib/evas/canvas/efl_animation_instance.eo3
-rw-r--r--src/lib/evas/canvas/efl_animation_instance_alpha.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_instance_group.c6
-rw-r--r--src/lib/evas/canvas/efl_animation_instance_rotate.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_instance_scale.c3
-rw-r--r--src/lib/evas/canvas/efl_animation_instance_translate.c3
-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
15 files changed, 99 insertions, 39 deletions
diff --git a/src/lib/evas/Evas_Internal.h b/src/lib/evas/Evas_Internal.h
index 898ba62a78..4a2255ac9b 100644
--- a/src/lib/evas/Evas_Internal.h
+++ b/src/lib/evas/Evas_Internal.h
@@ -84,6 +84,8 @@ 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_duration_only_set(Eo *obj, double duration);
+
EOAPI void efl_animation_instance_total_duration_set(Eo *obj, double total_duration);
EOAPI double efl_animation_instance_total_duration_get(const Eo *obj);
diff --git a/src/lib/evas/canvas/efl_animation.c b/src/lib/evas/canvas/efl_animation.c
index 23d2d14585..5aac6e38fd 100644
--- a/src/lib/evas/canvas/efl_animation.c
+++ b/src/lib/evas/canvas/efl_animation.c
@@ -38,6 +38,8 @@ _efl_animation_duration_set(Eo *eo_obj,
{
EFL_ANIMATION_CHECK_OR_RETURN(eo_obj);
+ efl_animation_total_duration_set(eo_obj, duration);
+
pd->duration = duration;
}
@@ -50,6 +52,16 @@ _efl_animation_duration_get(Eo *eo_obj, Efl_Animation_Data *pd)
}
EOLIAN static void
+_efl_animation_duration_only_set(Eo *eo_obj,
+ Efl_Animation_Data *pd,
+ double duration)
+{
+ EFL_ANIMATION_CHECK_OR_RETURN(eo_obj);
+
+ pd->duration = duration;
+}
+
+EOLIAN static void
_efl_animation_total_duration_set(Eo *eo_obj,
Efl_Animation_Data *pd,
double total_duration)
@@ -177,6 +189,42 @@ _efl_animation_interpolator_get(Eo *eo_obj,
return pd->interpolator;
}
+EOLIAN static Efl_Animation_Instance *
+_efl_animation_instance_create(Eo *eo_obj, Efl_Animation_Data *pd EINA_UNUSED)
+{
+ EFL_ANIMATION_CHECK_OR_RETURN(eo_obj, NULL);
+
+ Efl_Animation_Instance *instance
+ = efl_add(EFL_ANIMATION_INSTANCE_CLASS, NULL);
+
+ Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
+ efl_animation_instance_target_set(instance, target);
+
+ Eina_Bool state_keep = efl_animation_final_state_keep_get(eo_obj);
+ efl_animation_instance_final_state_keep_set(instance, state_keep);
+
+ double duration = efl_animation_duration_get(eo_obj);
+ efl_animation_instance_duration_set(instance, duration);
+
+ double total_duration = efl_animation_total_duration_get(eo_obj);
+ efl_animation_instance_total_duration_set(instance, total_duration);
+
+ double start_delay_time = efl_animation_start_delay_get(eo_obj);
+ efl_animation_instance_start_delay_set(instance, start_delay_time);
+
+ Efl_Animation_Instance_Repeat_Mode repeat_mode =
+ (Efl_Animation_Instance_Repeat_Mode)efl_animation_repeat_mode_get(eo_obj);
+ efl_animation_instance_repeat_mode_set(instance, repeat_mode);
+
+ int repeat_count = efl_animation_repeat_count_get(eo_obj);
+ efl_animation_instance_repeat_count_set(instance, repeat_count);
+
+ Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
+ efl_animation_instance_interpolator_set(instance, interpolator);
+
+ return instance;
+}
+
EOLIAN static Efl_Object *
_efl_animation_efl_object_constructor(Eo *eo_obj,
Efl_Animation_Data *pd)
diff --git a/src/lib/evas/canvas/efl_animation.eo b/src/lib/evas/canvas/efl_animation.eo
index 6a917fb07b..fa07d88644 100644
--- a/src/lib/evas/canvas/efl_animation.eo
+++ b/src/lib/evas/canvas/efl_animation.eo
@@ -1,6 +1,6 @@
import efl_animation_types;
-abstract Efl.Animation (Efl.Object)
+class Efl.Animation (Efl.Object)
{
[[Efl animation abstract class]]
data: Efl_Animation_Data;
@@ -32,6 +32,12 @@ abstract Efl.Animation (Efl.Object)
duration: double; [[Duration value.]]
}
}
+ duration_only_set @protected {
+ [[Set duration only without setting total duration.]]
+ params {
+ @in duration: double; [[Duration value.]]
+ }
+ }
@property total_duration {
set @protected {
}
@@ -88,6 +94,5 @@ abstract Efl.Animation (Efl.Object)
implements {
Efl.Object.constructor;
Efl.Object.destructor;
- @empty .instance_create;
}
}
diff --git a/src/lib/evas/canvas/efl_animation_alpha.c b/src/lib/evas/canvas/efl_animation_alpha.c
index bf041c672d..8e7ae853b4 100644
--- a/src/lib/evas/canvas/efl_animation_alpha.c
+++ b/src/lib/evas/canvas/efl_animation_alpha.c
@@ -36,9 +36,6 @@ _efl_animation_alpha_efl_animation_duration_set(Eo *eo_obj,
//For a single animation, duration should be equal to or bigger than 0.0.
if (duration < 0.0) return;
- //For a single animation, total duration is the same as duration.
- efl_animation_total_duration_set(eo_obj, duration);
-
efl_animation_duration_set(efl_super(eo_obj, MY_CLASS), duration);
}
diff --git a/src/lib/evas/canvas/efl_animation_group.c b/src/lib/evas/canvas/efl_animation_group.c
index 8b37402a4a..6cc0934990 100644
--- a/src/lib/evas/canvas/efl_animation_group.c
+++ b/src/lib/evas/canvas/efl_animation_group.c
@@ -82,7 +82,7 @@ _efl_animation_group_efl_animation_duration_set(Eo *eo_obj,
}
end:
- efl_animation_duration_set(efl_super(eo_obj, MY_CLASS), duration);
+ efl_animation_duration_only_set(eo_obj, duration);
//efl_animation_total_duration_get() should calculate the new total duration.
double total_duration = efl_animation_total_duration_get(eo_obj);
@@ -132,8 +132,8 @@ _efl_animation_group_efl_object_constructor(Eo *eo_obj,
pd->animations = NULL;
//group animation does not affect its child duration by default.
- efl_animation_duration_set(efl_super(eo_obj, MY_CLASS),
- EFL_ANIMATION_GROUP_DURATION_NONE);
+ efl_animation_duration_only_set(eo_obj,
+ EFL_ANIMATION_GROUP_DURATION_NONE);
return eo_obj;
}
diff --git a/src/lib/evas/canvas/efl_animation_instance.c b/src/lib/evas/canvas/efl_animation_instance.c
index cdcd5bb701..dee331ec3d 100644
--- a/src/lib/evas/canvas/efl_animation_instance.c
+++ b/src/lib/evas/canvas/efl_animation_instance.c
@@ -44,6 +44,8 @@ _efl_animation_instance_duration_set(Eo *eo_obj,
{
EFL_ANIMATION_INSTANCE_CHECK_OR_RETURN(eo_obj);
+ efl_animation_instance_total_duration_set(eo_obj, duration);
+
pd->duration = duration;
}
@@ -57,6 +59,16 @@ _efl_animation_instance_duration_get(Eo *eo_obj,
}
EOLIAN static void
+_efl_animation_instance_duration_only_set(Eo *eo_obj,
+ Efl_Animation_Instance_Data *pd,
+ double duration)
+{
+ EFL_ANIMATION_INSTANCE_CHECK_OR_RETURN(eo_obj);
+
+ pd->duration = duration;
+}
+
+EOLIAN static void
_efl_animation_instance_total_duration_set(Eo *eo_obj,
Efl_Animation_Instance_Data *pd,
double total_duration)
@@ -311,6 +323,10 @@ _animator_cb(void *data)
Efl_Animation_Instance_Animate_Event_Info event_info;
event_info.progress = pd->progress;
+ //pre animate event is supported within class only (protected event)
+ efl_event_callback_call(eo_obj, EFL_ANIMATION_INSTANCE_EVENT_PRE_ANIMATE,
+ &event_info);
+
//Reset previous animation effect before applying animation effect
/* FIXME: When the target state is saved, it may not be finished to calculate
* target geometry.
@@ -322,11 +338,6 @@ _animator_cb(void *data)
efl_animation_instance_progress_set(eo_obj, pd->progress);
- //pre animate event is supported within class only (protected event)
- efl_event_callback_call(eo_obj, EFL_ANIMATION_INSTANCE_EVENT_PRE_ANIMATE,
- &event_info);
- efl_event_callback_call(eo_obj, EFL_ANIMATION_INSTANCE_EVENT_ANIMATE, &event_info);
-
//Not end. Keep going.
if ((elapsed_time - paused_time) < total_duration)
return ECORE_CALLBACK_RENEW;
@@ -505,6 +516,22 @@ _efl_animation_instance_resume(Eo *eo_obj,
_animator_cb(eo_obj);
}
+EOLIAN static void
+_efl_animation_instance_progress_set(Eo *eo_obj,
+ Efl_Animation_Instance_Data *pd EINA_UNUSED,
+ double progress)
+{
+ EFL_ANIMATION_INSTANCE_CHECK_OR_RETURN(eo_obj);
+
+ if ((progress < 0.0) || (progress > 1.0)) return;
+
+ Efl_Animation_Instance_Animate_Event_Info event_info;
+ event_info.progress = progress;
+
+ efl_event_callback_call(eo_obj, EFL_ANIMATION_INSTANCE_EVENT_ANIMATE,
+ &event_info);
+}
+
EOLIAN static Efl_Object *
_efl_animation_instance_efl_object_constructor(Eo *eo_obj,
Efl_Animation_Instance_Data *pd)
@@ -572,6 +599,8 @@ 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_duration_only_set, EFL_FUNC_CALL(duration), double duration);
+
EOAPI EFL_VOID_FUNC_BODYV(efl_animation_instance_total_duration_set, EFL_FUNC_CALL(total_duration), double total_duration);
EOAPI EFL_FUNC_BODY_CONST(efl_animation_instance_total_duration_get, double, 0);
@@ -594,6 +623,7 @@ EOAPI EFL_FUNC_BODY_CONST(efl_animation_instance_interpolator_get, Efl_Interpola
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_duration_only_set, _efl_animation_instance_duration_only_set), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_total_duration_set, _efl_animation_instance_total_duration_set), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_total_duration_get, _efl_animation_instance_total_duration_get), \
EFL_OBJECT_OP_FUNC(efl_animation_instance_start_delay_set, _efl_animation_instance_start_delay_set), \
diff --git a/src/lib/evas/canvas/efl_animation_instance.eo b/src/lib/evas/canvas/efl_animation_instance.eo
index 1a758fcf7e..7c01317758 100644
--- a/src/lib/evas/canvas/efl_animation_instance.eo
+++ b/src/lib/evas/canvas/efl_animation_instance.eo
@@ -1,6 +1,6 @@
import efl_animation_types;
-abstract Efl.Animation.Instance (Efl.Object)
+class Efl.Animation.Instance (Efl.Object)
{
[[Efl animation instance abstract class]]
data: Efl_Animation_Instance_Data;
@@ -39,7 +39,6 @@ abstract Efl.Animation.Instance (Efl.Object)
implements {
Efl.Object.constructor;
Efl.Object.destructor;
- @empty .progress_set;
}
events {
start; [[Animation is going to start.]]
diff --git a/src/lib/evas/canvas/efl_animation_instance_alpha.c b/src/lib/evas/canvas/efl_animation_instance_alpha.c
index eeed7a0c72..4b3fcd2b1b 100644
--- a/src/lib/evas/canvas/efl_animation_instance_alpha.c
+++ b/src/lib/evas/canvas/efl_animation_instance_alpha.c
@@ -37,9 +37,6 @@ _efl_animation_instance_alpha_efl_animation_instance_duration_set(Eo *eo_obj,
* than 0.0. */
if (duration < 0.0) return;
- //For a single animation instance, total duration is the same as duration.
- efl_animation_instance_total_duration_set(eo_obj, duration);
-
efl_animation_instance_duration_set(efl_super(eo_obj, MY_CLASS), duration);
}
diff --git a/src/lib/evas/canvas/efl_animation_instance_group.c b/src/lib/evas/canvas/efl_animation_instance_group.c
index 8da955c9ef..f1439501f4 100644
--- a/src/lib/evas/canvas/efl_animation_instance_group.c
+++ b/src/lib/evas/canvas/efl_animation_instance_group.c
@@ -84,7 +84,7 @@ _efl_animation_instance_group_efl_animation_instance_duration_set(Eo *eo_obj,
}
end:
- efl_animation_instance_duration_set(efl_super(eo_obj, MY_CLASS), duration);
+ efl_animation_instance_duration_only_set(eo_obj, duration);
/* efl_animation_instance_total_duration_get() should calculate the new total
* duration. */
@@ -139,8 +139,8 @@ _efl_animation_instance_group_efl_object_constructor(Eo *eo_obj,
pd->instances = NULL;
//group animation instance does not affect its child duration by default.
- efl_animation_instance_duration_set(efl_super(eo_obj, MY_CLASS),
- EFL_ANIMATION_INSTANCE_GROUP_DURATION_NONE);
+ efl_animation_instance_duration_only_set(eo_obj,
+ EFL_ANIMATION_INSTANCE_GROUP_DURATION_NONE);
return eo_obj;
}
diff --git a/src/lib/evas/canvas/efl_animation_instance_rotate.c b/src/lib/evas/canvas/efl_animation_instance_rotate.c
index 537e2be3f3..a95f1cdda9 100644
--- a/src/lib/evas/canvas/efl_animation_instance_rotate.c
+++ b/src/lib/evas/canvas/efl_animation_instance_rotate.c
@@ -186,9 +186,6 @@ _efl_animation_instance_rotate_efl_animation_instance_duration_set(Eo *eo_obj,
* than 0.0. */
if (duration < 0.0) return;
- //For a single animation instance, total duration is the same as duration.
- efl_animation_instance_total_duration_set(eo_obj, duration);
-
efl_animation_instance_duration_set(efl_super(eo_obj, MY_CLASS), duration);
}
diff --git a/src/lib/evas/canvas/efl_animation_instance_scale.c b/src/lib/evas/canvas/efl_animation_instance_scale.c
index dba40195a2..7ed4d15f0f 100644
--- a/src/lib/evas/canvas/efl_animation_instance_scale.c
+++ b/src/lib/evas/canvas/efl_animation_instance_scale.c
@@ -212,9 +212,6 @@ _efl_animation_instance_scale_efl_animation_instance_duration_set(Eo *eo_obj,
* than 0.0. */
if (duration < 0.0) return;
- //For a single animation instance, total duration is the same as duration.
- efl_animation_instance_total_duration_set(eo_obj, duration);
-
efl_animation_instance_duration_set(efl_super(eo_obj, MY_CLASS), duration);
}
diff --git a/src/lib/evas/canvas/efl_animation_instance_translate.c b/src/lib/evas/canvas/efl_animation_instance_translate.c
index 5914d09d91..b1d4df1754 100644
--- a/src/lib/evas/canvas/efl_animation_instance_translate.c
+++ b/src/lib/evas/canvas/efl_animation_instance_translate.c
@@ -153,9 +153,6 @@ _efl_animation_instance_translate_efl_animation_instance_duration_set(Eo *eo_obj
* than 0.0. */
if (duration < 0.0) return;
- //For a single animation instance, total duration is the same as duration.
- efl_animation_instance_total_duration_set(eo_obj, duration);
-
efl_animation_instance_duration_set(efl_super(eo_obj, MY_CLASS), duration);
}
diff --git a/src/lib/evas/canvas/efl_animation_rotate.c b/src/lib/evas/canvas/efl_animation_rotate.c
index 4eab62cd8f..6513f532c5 100644
--- a/src/lib/evas/canvas/efl_animation_rotate.c
+++ b/src/lib/evas/canvas/efl_animation_rotate.c
@@ -184,9 +184,6 @@ _efl_animation_rotate_efl_animation_duration_set(Eo *eo_obj,
//For a single animation, duration should be equal to or bigger than 0.0.
if (duration < 0.0) return;
- //For a single animation, total duration is the same as duration.
- efl_animation_total_duration_set(eo_obj, duration);
-
efl_animation_duration_set(efl_super(eo_obj, MY_CLASS), duration);
}
diff --git a/src/lib/evas/canvas/efl_animation_scale.c b/src/lib/evas/canvas/efl_animation_scale.c
index 25e447c64f..0ea4d4bca7 100644
--- a/src/lib/evas/canvas/efl_animation_scale.c
+++ b/src/lib/evas/canvas/efl_animation_scale.c
@@ -210,9 +210,6 @@ _efl_animation_scale_efl_animation_duration_set(Eo *eo_obj,
//For a single animation, duration should be equal to or bigger than 0.0.
if (duration < 0.0) return;
- //For a single animation, total duration is the same as duration.
- efl_animation_total_duration_set(eo_obj, duration);
-
efl_animation_duration_set(efl_super(eo_obj, MY_CLASS), duration);
}
diff --git a/src/lib/evas/canvas/efl_animation_translate.c b/src/lib/evas/canvas/efl_animation_translate.c
index ded47bc844..08e971de7b 100644
--- a/src/lib/evas/canvas/efl_animation_translate.c
+++ b/src/lib/evas/canvas/efl_animation_translate.c
@@ -152,9 +152,6 @@ _efl_animation_translate_efl_animation_duration_set(Eo *eo_obj,
//For a single animation, duration should be equal to or bigger than 0.0.
if (duration < 0.0) return;
- //For a single animation, total duration is the same as duration.
- efl_animation_total_duration_set(eo_obj, duration);
-
efl_animation_duration_set(efl_super(eo_obj, MY_CLASS), duration);
}