diff options
author | Jaehyun Cho <jae_hyun.cho@samsung.com> | 2017-09-22 21:03:21 +0900 |
---|---|---|
committer | Jaehyun Cho <jae_hyun.cho@samsung.com> | 2017-09-22 21:03:21 +0900 |
commit | ea16e811b3ead51cfb53fa6e93b6d480a5e023a2 (patch) | |
tree | 2a9138b1074d64d3289703b12cd212dd5aa6d5a3 | |
parent | f96c0ffa097600443a2c19b842d9990d352f3c52 (diff) | |
download | efl-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.h | 2 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation.c | 48 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation.eo | 9 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_alpha.c | 3 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_group.c | 6 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_instance.c | 40 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_instance.eo | 3 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_instance_alpha.c | 3 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_instance_group.c | 6 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_instance_rotate.c | 3 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_instance_scale.c | 3 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_instance_translate.c | 3 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_rotate.c | 3 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_scale.c | 3 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_animation_translate.c | 3 |
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); } |