summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaehyun Cho <jae_hyun.cho@samsung.com>2020-03-11 12:29:03 +0900
committerJaehyun Cho <jae_hyun.cho@samsung.com>2020-03-11 13:21:20 +0900
commit72da9ec8c6ef9e6081979c1caae3e4749d0a9965 (patch)
treee7cfacd265fc0bed3073f987c41479e5ae299f60
parent6fd2435c9eb2900106f347035757f2e584d097d4 (diff)
downloadefl-devs/jaehyun/animation_manager.tar.gz
efl_ui_spotlight: Introduce forward and backward animationsdevs/jaehyun/animation_manager
forward_animation and backward_animation are introduced instead of push_setup, pop_setup, and jump_setup. forward_animation is started when active element is changed from lower index to higher index. This includes push() case. e.g. current active index is 0 and new active index becomes 1. backward_animation is started when active element is changed from higher index to lower index. This includes pop() case. e.g. current active index is 1 and new active index becomes 0.
-rw-r--r--src/bin/elementary/test_ui_spotlight.c29
-rw-r--r--src/lib/elementary/efl_ui_spotlight_animation_manager.c49
-rw-r--r--src/lib/elementary/efl_ui_spotlight_animation_manager.eo33
-rw-r--r--src/lib/elementary/efl_ui_spotlight_fade_manager.c18
4 files changed, 64 insertions, 65 deletions
diff --git a/src/bin/elementary/test_ui_spotlight.c b/src/bin/elementary/test_ui_spotlight.c
index 176f0a09cc..9877968f49 100644
--- a/src/bin/elementary/test_ui_spotlight.c
+++ b/src/bin/elementary/test_ui_spotlight.c
@@ -1136,7 +1136,8 @@ test_ui_spotlight_animation(void *data EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Eo *win, *panes, *navi, *list, *layout, *spotlight, *view, *custom_animation_manager;
- Efl_Canvas_Animation *jump_animation, *push_animation, *pop_animation;
+ Efl_Canvas_Animation *forward_in_animation, *forward_out_animation;
+ Efl_Canvas_Animation *backward_in_animation, *backward_out_animation;
Params *params = NULL;
char buf[PATH_MAX];
int i;
@@ -1168,23 +1169,25 @@ test_ui_spotlight_animation(void *data EINA_UNUSED,
efl_file_load(efl_added),
efl_content_set(efl_part(panes, "second"), efl_added));
+ forward_in_animation = efl_new(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS);
+ efl_animation_translate_set(forward_in_animation, EINA_POSITION2D(0, 100), EINA_POSITION2D(0, 0));
+ efl_animation_duration_set(forward_in_animation, 0.5);
- jump_animation = efl_new(EFL_CANVAS_ALPHA_ANIMATION_CLASS);
- efl_animation_alpha_set(jump_animation, 0.0, 1.0);
- efl_animation_duration_set(jump_animation, 0.5);
+ forward_out_animation = efl_new(EFL_CANVAS_ALPHA_ANIMATION_CLASS);
+ efl_animation_alpha_set(forward_out_animation, 1.0, 0.0);
+ efl_animation_duration_set(forward_out_animation, 0.5);
- push_animation = efl_new(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS);
- efl_animation_translate_set(push_animation, EINA_POSITION2D(0, 100), EINA_POSITION2D(0, 0));
- efl_animation_duration_set(push_animation, 0.5);
+ backward_in_animation = efl_new(EFL_CANVAS_ALPHA_ANIMATION_CLASS);
+ efl_animation_alpha_set(backward_in_animation, 0.0, 1.0);
+ efl_animation_duration_set(backward_in_animation, 0.5);
- pop_animation = efl_new(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS);
- efl_animation_translate_set(pop_animation, EINA_POSITION2D(0, -100), EINA_POSITION2D(0, 0));
- efl_animation_duration_set(pop_animation, 0.5);
+ backward_out_animation = efl_new(EFL_CANVAS_TRANSLATE_ANIMATION_CLASS);
+ efl_animation_translate_set(backward_out_animation, EINA_POSITION2D(0, 0), EINA_POSITION2D(0, 100));
+ efl_animation_duration_set(backward_out_animation, 0.5);
custom_animation_manager = efl_new(EFL_UI_SPOTLIGHT_ANIMATION_MANAGER_CLASS,
- efl_ui_spotlight_manager_animation_push_setup_set(efl_added, push_animation),
- efl_ui_spotlight_manager_animation_pop_setup_set(efl_added, pop_animation),
- efl_ui_spotlight_manager_animation_jump_setup_set(efl_added, jump_animation, jump_animation));
+ efl_ui_spotlight_manager_animation_forward_animation_set(efl_added, forward_in_animation, forward_out_animation),
+ efl_ui_spotlight_manager_animation_backward_animation_set(efl_added, backward_in_animation, backward_out_animation));
spotlight = efl_add(EFL_UI_SPOTLIGHT_CONTAINER_CLASS, layout,
efl_ui_spotlight_manager_set(efl_added, custom_animation_manager),
diff --git a/src/lib/elementary/efl_ui_spotlight_animation_manager.c b/src/lib/elementary/efl_ui_spotlight_animation_manager.c
index dac8abd540..36ca34b2ec 100644
--- a/src/lib/elementary/efl_ui_spotlight_animation_manager.c
+++ b/src/lib/elementary/efl_ui_spotlight_animation_manager.c
@@ -8,7 +8,7 @@
typedef struct {
Efl_Ui_Spotlight_Container * container;
- Efl_Canvas_Animation *jump_anim[2], *push_anim, *pop_anim;
+ Efl_Canvas_Animation *forward_anim[2], *backward_anim[2];
Efl_Gfx_Entity *content[2];
Efl_Gfx_Entity *clipper;
int ids[2]; //only used when in animation
@@ -149,23 +149,28 @@ _efl_ui_spotlight_animation_manager_efl_ui_spotlight_manager_switch_to(Eo *obj,
Efl_Canvas_Animation *animation = NULL;
pd->ids[i] = tmp[i];
pd->content[i] = efl_pack_content_get(pd->container, pd->ids[i]);
- //when pushing, animate the *pushed in* content with the push animation
- if (reason == EFL_UI_SPOTLIGHT_MANAGER_SWITCH_REASON_PUSH && i == 1)
- animation = pd->push_anim;
- //when popping, animate the *popped in* content with the pop animation
- else if (reason == EFL_UI_SPOTLIGHT_MANAGER_SWITCH_REASON_POP && i == 0)
- animation = pd->pop_anim;
+ //when pushing, animate the *pushed* content with the forward animation
+ if (reason == EFL_UI_SPOTLIGHT_MANAGER_SWITCH_REASON_PUSH)
+ animation = pd->forward_anim[i];
+ //when popping, animate the *popped* content with the backward animation
+ else if (reason == EFL_UI_SPOTLIGHT_MANAGER_SWITCH_REASON_POP)
+ animation = pd->backward_anim[i];
if (!animation)
- animation = pd->jump_anim[i];
+ {
+ if (to > from)
+ animation = pd->forward_anim[i];
+ else
+ animation = pd->backward_anim[i];
+ }
if (pd->animation)
- efl_canvas_object_animation_start(pd->content[i], animation, -1.0+2.0*i, 0.0);
+ efl_canvas_object_animation_start(pd->content[i], animation, 1.0, 0.0);
efl_gfx_entity_visible_set(pd->content[i], EINA_TRUE);
}
if (pd->animation)
{
efl_event_callback_add(pd->content[0], EFL_CANVAS_OBJECT_ANIMATION_EVENT_ANIMATION_CHANGED, _hide_object_cb, obj);
efl_event_callback_add(pd->content[0], EFL_CANVAS_OBJECT_ANIMATION_EVENT_ANIMATION_PROGRESS_UPDATED, _running_cb, obj);
- efl_gfx_stack_above(pd->content[1], pd->content[0]); //Stack the "to content" above the "from content"
+ //efl_gfx_stack_above(pd->content[1], pd->content[0]); //Stack the "to content" above the "from content"
}
}
else
@@ -227,32 +232,32 @@ _efl_ui_spotlight_animation_manager_efl_ui_spotlight_manager_animated_transition
}
EOLIAN static void
-_efl_ui_spotlight_animation_manager_push_setup_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Canvas_Animation *animation)
+_efl_ui_spotlight_animation_manager_forward_animation_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Canvas_Animation *in, Efl_Canvas_Animation *out)
{
- efl_replace(&pd->push_anim, animation);
-}
+ EINA_SAFETY_ON_NULL_RETURN(out);
+ EINA_SAFETY_ON_NULL_RETURN(in);
-EOLIAN static void
-_efl_ui_spotlight_animation_manager_pop_setup_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Canvas_Animation *animation)
-{
- efl_replace(&pd->pop_anim, animation);
+ efl_replace(&pd->forward_anim[0], out);
+ efl_replace(&pd->forward_anim[1], in);
}
EOLIAN static void
-_efl_ui_spotlight_animation_manager_jump_setup_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Canvas_Animation *in, Efl_Canvas_Animation *out)
+_efl_ui_spotlight_animation_manager_backward_animation_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Animation_Manager_Data *pd, Efl_Canvas_Animation *in, Efl_Canvas_Animation *out)
{
EINA_SAFETY_ON_NULL_RETURN(out);
EINA_SAFETY_ON_NULL_RETURN(in);
- efl_replace(&pd->jump_anim[0], out);
- efl_replace(&pd->jump_anim[1], in);
+ efl_replace(&pd->backward_anim[0], out);
+ efl_replace(&pd->backward_anim[1], in);
}
EOLIAN static Efl_Object*
_efl_ui_spotlight_animation_manager_efl_object_finalize(Eo *obj, Efl_Ui_Spotlight_Animation_Manager_Data *pd)
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(pd->jump_anim[0], NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(pd->jump_anim[1], NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd->forward_anim[0], NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd->forward_anim[1], NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd->backward_anim[0], NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pd->backward_anim[1], NULL);
return efl_finalize(efl_super(obj, MY_CLASS));
}
diff --git a/src/lib/elementary/efl_ui_spotlight_animation_manager.eo b/src/lib/elementary/efl_ui_spotlight_animation_manager.eo
index fe7539ee06..8314de488a 100644
--- a/src/lib/elementary/efl_ui_spotlight_animation_manager.eo
+++ b/src/lib/elementary/efl_ui_spotlight_animation_manager.eo
@@ -11,35 +11,19 @@ class @beta Efl.Ui.Spotlight.Animation_Manager extends Efl.Ui.Spotlight.Manager
]]
c_prefix: efl_ui_spotlight_manager_animation;
methods {
- @property push_setup{
- [[Animation that is used to animate the $to argument of a switch_to request when the passed $reason is push.
-
-
- If this animation is $null, the in animation of @.jump_setup will be taken instead.
+ @property forward_animation {
+ [[Set the animation objects you want to play on going forward. (going from lower index page to higher index page)
]]
values {
- animation : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference]]
+ in : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference]]
+ out : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference. Can be the same as $in.]]
}
- set { }
- }
- @property pop_setup{
- [[Animation that is used to animate the $from argument of a switch_to request when the passed $reason is pop.
-
- Note: this animations is always played backwards, see the class documentation for the reasoning.
+ set {
- If this animation is $null, the out animation of @.jump_setup will be taken instead.
- ]]
- values {
- animation : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference]]
}
- set { }
}
- @property jump_setup{
- [[Set the animation objects you want to play on a jump in or jump out.
-
- When a switch to request is issued, two arguments are getting animated. The $from object, and the $to objects. The $from object will be playing the out animation. The $pop object will be playing the in animation.
-
- The out animation will always be played backwards, this is to support passing the same animation object to both parameters. (A fade animation will fade in the new object, and fade out the old object).
+ @property backward_animation {
+ [[Set the animation objects you want to play on going backward. (going from higher index page to lower index page)
]]
values {
in : Efl.Canvas.Animation; [[The animation to play, the implementation will take an additional reference]]
@@ -51,7 +35,8 @@ class @beta Efl.Ui.Spotlight.Animation_Manager extends Efl.Ui.Spotlight.Manager
}
}
constructors {
- .jump_setup;
+ .forward_animation;
+ .backward_animation;
}
implements {
Efl.Ui.Spotlight.Manager.bind;
diff --git a/src/lib/elementary/efl_ui_spotlight_fade_manager.c b/src/lib/elementary/efl_ui_spotlight_fade_manager.c
index cb2fa5f0a4..1d6a349471 100644
--- a/src/lib/elementary/efl_ui_spotlight_fade_manager.c
+++ b/src/lib/elementary/efl_ui_spotlight_fade_manager.c
@@ -12,16 +12,22 @@ typedef struct {
EOLIAN static Efl_Object*
_efl_ui_spotlight_fade_manager_efl_object_constructor(Eo *obj, Efl_Ui_Spotlight_Fade_Manager_Data *pd EINA_UNUSED)
{
- Efl_Canvas_Animation *animation;
+ Efl_Canvas_Animation *in_animation, *out_animation;
obj = efl_constructor(efl_super(obj, EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS));
- animation = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, obj);
- efl_animation_alpha_set(animation, 0.0, 1.0);
- efl_animation_duration_set(animation, 0.5);
+ in_animation = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, obj);
+ efl_animation_alpha_set(in_animation, 0.0, 1.0);
+ efl_animation_duration_set(in_animation, 0.5);
- efl_ui_spotlight_manager_animation_jump_setup_set(obj, animation, animation);
- efl_unref(animation);
+ out_animation = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, obj);
+ efl_animation_alpha_set(out_animation, 0.0, 1.0);
+ efl_animation_duration_set(out_animation, 0.5);
+
+ efl_ui_spotlight_manager_animation_forward_animation_set(obj, in_animation, out_animation);
+ efl_ui_spotlight_manager_animation_backward_animation_set(obj, in_animation, out_animation);
+ efl_unref(in_animation);
+ efl_unref(out_animation);
return obj;
}