summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSungtaek Hong <sth253.hong@samsung.com>2018-01-16 20:31:15 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2018-01-16 22:04:55 +0900
commit588995da317520fc92660b89b0864bb1f25abc09 (patch)
tree18105ad544539753c5cddea93224bb8c3f2bd8c4
parent1da72770f385489c259f3200df3ba72adedb2471 (diff)
downloadefl-588995da317520fc92660b89b0864bb1f25abc09.tar.gz
efl_playable: split Efl.Player interface to Efl.Playable interface
Summary: Efl.Player interface simply provides play functions, but another interface which indicates Efl.Player will play is also needed. Test Plan: Run elementary_test->Efl.Animation tests Reviewers: woohyun, conr2d, Jaehyun_Cho, jpeg, cedric Differential Revision: https://phab.enlightenment.org/D5662
-rw-r--r--src/Makefile_Efl.am1
-rw-r--r--src/Makefile_Evas.am27
-rw-r--r--src/bin/elementary/test_efl_anim_alpha.c48
-rw-r--r--src/bin/elementary/test_efl_anim_event_anim.c10
-rw-r--r--src/bin/elementary/test_efl_anim_group_parallel.c60
-rw-r--r--src/bin/elementary/test_efl_anim_group_sequential.c86
-rw-r--r--src/bin/elementary/test_efl_anim_interpolator.c55
-rw-r--r--src/bin/elementary/test_efl_anim_pause.c49
-rw-r--r--src/bin/elementary/test_efl_anim_repeat.c44
-rw-r--r--src/bin/elementary/test_efl_anim_rotate.c86
-rw-r--r--src/bin/elementary/test_efl_anim_scale.c83
-rw-r--r--src/bin/elementary/test_efl_anim_start_delay.c45
-rw-r--r--src/bin/elementary/test_efl_anim_translate.c65
-rw-r--r--src/lib/efl/Efl.h1
-rw-r--r--src/lib/efl/interfaces/efl_interfaces_main.c1
-rw-r--r--src/lib/efl/interfaces/efl_playable.eo29
-rw-r--r--src/lib/efl/interfaces/efl_player.eo8
-rw-r--r--src/lib/elementary/efl_ui_video.c66
-rw-r--r--src/lib/elementary/efl_ui_video.eo22
-rw-r--r--src/lib/elementary/efl_ui_video_legacy.h32
-rw-r--r--src/lib/evas/Evas_Common.h42
-rw-r--r--src/lib/evas/Evas_Eo.h9
-rw-r--r--src/lib/evas/Evas_Internal.h77
-rw-r--r--src/lib/evas/canvas/efl_animation.c117
-rw-r--r--src/lib/evas/canvas/efl_animation.eo41
-rw-r--r--src/lib/evas/canvas/efl_animation_alpha.c47
-rw-r--r--src/lib/evas/canvas/efl_animation_alpha.eo2
-rw-r--r--src/lib/evas/canvas/efl_animation_alpha_private.h4
-rw-r--r--src/lib/evas/canvas/efl_animation_group.c41
-rw-r--r--src/lib/evas/canvas/efl_animation_group.eo1
-rw-r--r--src/lib/evas/canvas/efl_animation_group_parallel.c129
-rw-r--r--src/lib/evas/canvas/efl_animation_group_parallel.eo8
-rw-r--r--src/lib/evas/canvas/efl_animation_group_parallel_private.h11
-rw-r--r--src/lib/evas/canvas/efl_animation_group_sequential.c129
-rw-r--r--src/lib/evas/canvas/efl_animation_group_sequential.eo8
-rw-r--r--src/lib/evas/canvas/efl_animation_group_sequential_private.h11
-rw-r--r--src/lib/evas/canvas/efl_animation_object.c585
-rw-r--r--src/lib/evas/canvas/efl_animation_object.eo46
-rw-r--r--src/lib/evas/canvas/efl_animation_object_alpha.c84
-rw-r--r--src/lib/evas/canvas/efl_animation_object_alpha.eo11
-rw-r--r--src/lib/evas/canvas/efl_animation_object_alpha_private.h24
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group.c200
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group.eo11
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_parallel.c256
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_parallel.eo12
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_parallel_private.h23
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_private.h15
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_sequential.c269
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_sequential.eo12
-rw-r--r--src/lib/evas/canvas/efl_animation_object_group_sequential_private.h23
-rw-r--r--src/lib/evas/canvas/efl_animation_object_private.h56
-rw-r--r--src/lib/evas/canvas/efl_animation_object_rotate.c243
-rw-r--r--src/lib/evas/canvas/efl_animation_object_rotate.eo11
-rw-r--r--src/lib/evas/canvas/efl_animation_object_rotate_private.h37
-rw-r--r--src/lib/evas/canvas/efl_animation_object_scale.c272
-rw-r--r--src/lib/evas/canvas/efl_animation_object_scale.eo11
-rw-r--r--src/lib/evas/canvas/efl_animation_object_scale_private.h37
-rw-r--r--src/lib/evas/canvas/efl_animation_object_translate.c240
-rw-r--r--src/lib/evas/canvas/efl_animation_object_translate.eo11
-rw-r--r--src/lib/evas/canvas/efl_animation_object_translate_private.h25
-rw-r--r--src/lib/evas/canvas/efl_animation_player.c384
-rw-r--r--src/lib/evas/canvas/efl_animation_player.eo55
-rw-r--r--src/lib/evas/canvas/efl_animation_player_private.h52
-rw-r--r--src/lib/evas/canvas/efl_animation_private.h12
-rw-r--r--src/lib/evas/canvas/efl_animation_rotate.c162
-rw-r--r--src/lib/evas/canvas/efl_animation_rotate.eo2
-rw-r--r--src/lib/evas/canvas/efl_animation_rotate_private.h4
-rw-r--r--src/lib/evas/canvas/efl_animation_scale.c170
-rw-r--r--src/lib/evas/canvas/efl_animation_scale.eo2
-rw-r--r--src/lib/evas/canvas/efl_animation_scale_private.h4
-rw-r--r--src/lib/evas/canvas/efl_animation_translate.c145
-rw-r--r--src/lib/evas/canvas/efl_animation_translate.eo2
-rw-r--r--src/lib/evas/canvas/efl_animation_translate_private.h4
-rw-r--r--src/lib/evas/canvas/efl_animation_types.eot2
-rw-r--r--src/lib/evas/canvas/evas_object_intercept.c6
-rw-r--r--src/lib/evas/canvas/evas_object_main.c232
-rw-r--r--src/lib/evas/include/evas_private.h6
77 files changed, 1350 insertions, 3903 deletions
diff --git a/src/Makefile_Efl.am b/src/Makefile_Efl.am
index 30b6cdb040..c91a250f33 100644
--- a/src/Makefile_Efl.am
+++ b/src/Makefile_Efl.am
@@ -24,6 +24,7 @@ efl_eolian_files = \
lib/efl/interfaces/efl_file.eo \
lib/efl/interfaces/efl_image_load.eo \
lib/efl/interfaces/efl_part.eo \
+ lib/efl/interfaces/efl_playable.eo \
lib/efl/interfaces/efl_player.eo \
lib/efl/interfaces/efl_text.eo \
lib/efl/interfaces/efl_text_font.eo \
diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am
index cf8a6606a3..36298162a2 100644
--- a/src/Makefile_Evas.am
+++ b/src/Makefile_Evas.am
@@ -50,14 +50,7 @@ evas_canvas_eolian_pub_files = \
lib/evas/canvas/efl_animation_group.eo \
lib/evas/canvas/efl_animation_group_parallel.eo \
lib/evas/canvas/efl_animation_group_sequential.eo \
- lib/evas/canvas/efl_animation_object.eo \
- lib/evas/canvas/efl_animation_object_alpha.eo \
- lib/evas/canvas/efl_animation_object_rotate.eo \
- lib/evas/canvas/efl_animation_object_scale.eo \
- lib/evas/canvas/efl_animation_object_translate.eo \
- lib/evas/canvas/efl_animation_object_group.eo \
- lib/evas/canvas/efl_animation_object_group_parallel.eo \
- lib/evas/canvas/efl_animation_object_group_sequential.eo \
+ lib/evas/canvas/efl_animation_player.eo \
$(NULL)
evas_gesture_eolian_pub_files = \
@@ -186,14 +179,7 @@ lib/evas/canvas/efl_animation_translate_private.h \
lib/evas/canvas/efl_animation_group_private.h \
lib/evas/canvas/efl_animation_group_parallel_private.h \
lib/evas/canvas/efl_animation_group_sequential_private.h \
-lib/evas/canvas/efl_animation_object_private.h \
-lib/evas/canvas/efl_animation_object_alpha_private.h \
-lib/evas/canvas/efl_animation_object_rotate_private.h \
-lib/evas/canvas/efl_animation_object_scale_private.h \
-lib/evas/canvas/efl_animation_object_translate_private.h \
-lib/evas/canvas/efl_animation_object_group_private.h \
-lib/evas/canvas/efl_animation_object_group_parallel_private.h \
-lib/evas/canvas/efl_animation_object_group_sequential_private.h \
+lib/evas/canvas/efl_animation_player_private.h \
lib/evas/gesture/efl_gesture_private.h
# Linebreak
@@ -288,14 +274,7 @@ lib/evas/canvas/efl_animation_translate.c \
lib/evas/canvas/efl_animation_group.c \
lib/evas/canvas/efl_animation_group_parallel.c \
lib/evas/canvas/efl_animation_group_sequential.c \
-lib/evas/canvas/efl_animation_object.c \
-lib/evas/canvas/efl_animation_object_alpha.c \
-lib/evas/canvas/efl_animation_object_rotate.c \
-lib/evas/canvas/efl_animation_object_scale.c \
-lib/evas/canvas/efl_animation_object_translate.c \
-lib/evas/canvas/efl_animation_object_group.c \
-lib/evas/canvas/efl_animation_object_group_parallel.c \
-lib/evas/canvas/efl_animation_object_group_sequential.c \
+lib/evas/canvas/efl_animation_player.c \
lib/evas/gesture/efl_gesture_touch.c \
lib/evas/gesture/efl_gesture.c \
lib/evas/gesture/efl_gesture_tap.c \
diff --git a/src/bin/elementary/test_efl_anim_alpha.c b/src/bin/elementary/test_efl_anim_alpha.c
index e225ae3fbf..90e0f43fc8 100644
--- a/src/bin/elementary/test_efl_anim_alpha.c
+++ b/src/bin/elementary/test_efl_anim_alpha.c
@@ -7,7 +7,7 @@ typedef struct _App_Data
{
Efl_Animation *show_anim;
Efl_Animation *hide_anim;
- Efl_Animation_Object *anim_obj;
+ Efl_Animation_Player *anim_obj;
Eina_Bool is_btn_visible;
} App_Data;
@@ -19,19 +19,15 @@ _anim_started_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
}
static void
-_anim_ended_cb(void *data, const Efl_Event *event EINA_UNUSED)
+_anim_ended_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
- App_Data *ad = data;
-
printf("Animation has been ended!\n");
-
- ad->anim_obj = NULL;
}
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -41,35 +37,23 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
App_Data *ad = data;
- if (ad->anim_obj)
- efl_animation_object_cancel(ad->anim_obj);
-
ad->is_btn_visible = !(ad->is_btn_visible);
if (ad->is_btn_visible)
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->show_anim);
- elm_object_text_set(obj, "Start Alpha Animation from 1.0 to 0.0");
+ efl_animation_player_animation_set(ad->anim_obj, ad->show_anim);
+ efl_text_set(obj, "Start Alpha Animation from 1.0 to 0.0");
}
else
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->hide_anim);
- elm_object_text_set(obj, "Start Alpha Animation from 0.0 to 1.0");
+ efl_animation_player_animation_set(ad->anim_obj, ad->hide_anim);
+ efl_text_set(obj, "Start Alpha Animation from 0.0 to 1.0");
}
- //Register callback called when animation starts
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, NULL);
-
- //Register callback called when animation ends
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(ad->anim_obj);
+ efl_player_start(ad->anim_obj);
}
static void
@@ -99,23 +83,29 @@ test_efl_anim_alpha(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
evas_object_show(btn);
//Show Animation
- Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 1.0);
- efl_animation_target_set(show_anim, btn);
efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
//Hide Animation
- Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
efl_animation_duration_set(hide_anim, 1.0);
- efl_animation_target_set(hide_anim, btn);
efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
//Initialize App Data
ad->show_anim = show_anim;
ad->hide_anim = hide_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, ad);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
ad->is_btn_visible = EINA_TRUE;
//Button to start animation
diff --git a/src/bin/elementary/test_efl_anim_event_anim.c b/src/bin/elementary/test_efl_anim_event_anim.c
index f68ee8ccac..88c465ef03 100644
--- a/src/bin/elementary/test_efl_anim_event_anim.c
+++ b/src/bin/elementary/test_efl_anim_event_anim.c
@@ -5,7 +5,7 @@
typedef struct _App_Data
{
- Efl_Animation_Object *target;
+ Efl_Animation_Player *target;
Eina_Bool is_btn_visible;
} App_Data;
@@ -57,20 +57,20 @@ test_efl_anim_event_anim(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
evas_object_move(btn, 100, 50);
//Show Animation
- Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 1.0);
- efl_animation_target_set(show_anim, btn);
+ efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
efl_canvas_object_event_animation_set(btn, EFL_GFX_EVENT_SHOW, show_anim);
//Show button after setting event animation to show animation for show event
evas_object_show(btn);
//Hide Animation
- Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
efl_animation_duration_set(hide_anim, 1.0);
- efl_animation_target_set(hide_anim, btn);
+ efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
efl_canvas_object_event_animation_set(btn, EFL_GFX_EVENT_HIDE, hide_anim);
//Initialize App Data
diff --git a/src/bin/elementary/test_efl_anim_group_parallel.c b/src/bin/elementary/test_efl_anim_group_parallel.c
index a2182bf144..1250d223ca 100644
--- a/src/bin/elementary/test_efl_anim_group_parallel.c
+++ b/src/bin/elementary/test_efl_anim_group_parallel.c
@@ -7,7 +7,7 @@ typedef struct _App_Data
{
Efl_Animation *parallel_show_anim;
Efl_Animation *parallel_hide_anim;
- Efl_Animation_Object *anim_obj;
+ Efl_Animation_Player *anim_obj;
Eina_Bool is_btn_visible;
} App_Data;
@@ -19,19 +19,16 @@ _anim_started_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
}
static void
-_anim_ended_cb(void *data, const Efl_Event *event EINA_UNUSED)
+_anim_ended_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
- App_Data *ad = data;
-
printf("Animation has been ended!\n");
- ad->anim_obj = NULL;
}
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -41,35 +38,23 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
App_Data *ad = data;
- if (ad->anim_obj)
- efl_animation_object_cancel(ad->anim_obj);
-
ad->is_btn_visible = !(ad->is_btn_visible);
if (ad->is_btn_visible)
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->parallel_show_anim);
- elm_object_text_set(obj, "Start Parallel Group Animation to hide button");
+ efl_animation_player_animation_set(ad->anim_obj, ad->parallel_show_anim);
+ efl_text_set(obj, "Start Parallel Group Animation to hide button");
}
else
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->parallel_hide_anim);
- elm_object_text_set(obj, "Start Parallel Group Animation to show button");
+ efl_animation_player_animation_set(ad->anim_obj, ad->parallel_hide_anim);
+ efl_text_set(obj, "Start Parallel Group Animation to show button");
}
- //Register callback called when animation starts
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, NULL);
-
- //Register callback called when animation ends
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(ad->anim_obj);
+ efl_player_start(ad->anim_obj);
}
static void
@@ -100,21 +85,20 @@ test_efl_anim_group_parallel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSE
//Show Animation
- Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
//Rotate from 45 to 0 degrees Animation
- Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
+ Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
efl_animation_rotate_set(ccw_45_degrees_anim, 45.0, 0.0, NULL, 0.5, 0.5);
//Scale Animation to zoom out
- Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
+ Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
efl_animation_scale_set(scale_half_anim, 2.0, 2.0, 1.0, 1.0, NULL, 0.5, 0.5);
//Show Parallel Group Animation
- Efl_Animation *parallel_show_anim = efl_add(EFL_ANIMATION_GROUP_PARALLEL_CLASS, NULL);
+ Efl_Animation *parallel_show_anim = efl_add(EFL_ANIMATION_GROUP_PARALLEL_CLASS, win);
efl_animation_duration_set(parallel_show_anim, 1.0);
- efl_animation_target_set(parallel_show_anim, btn);
efl_animation_final_state_keep_set(parallel_show_anim, EINA_TRUE);
//Add animations to group animation
@@ -124,21 +108,20 @@ test_efl_anim_group_parallel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSE
//Hide Animation
- Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
//Rotate from 0 to 45 degrees Animation
- Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
+ Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, NULL, 0.5, 0.5);
//Scale Animation to zoom in
- Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
+ Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
efl_animation_scale_set(scale_double_anim, 1.0, 1.0, 2.0, 2.0, NULL, 0.5, 0.5);
//Hide Parallel Group Animation
- Efl_Animation *parallel_hide_anim = efl_add(EFL_ANIMATION_GROUP_PARALLEL_CLASS, NULL);
+ Efl_Animation *parallel_hide_anim = efl_add(EFL_ANIMATION_GROUP_PARALLEL_CLASS, win);
efl_animation_duration_set(parallel_hide_anim, 1.0);
- efl_animation_target_set(parallel_hide_anim, btn);
efl_animation_final_state_keep_set(parallel_hide_anim, EINA_TRUE);
//Add animations to group animation
@@ -150,7 +133,16 @@ test_efl_anim_group_parallel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSE
//Initialize App Data
ad->parallel_show_anim = parallel_show_anim;
ad->parallel_hide_anim = parallel_hide_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, NULL);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->is_btn_visible = EINA_TRUE;
//Button to start animation
diff --git a/src/bin/elementary/test_efl_anim_group_sequential.c b/src/bin/elementary/test_efl_anim_group_sequential.c
index 219cd6df29..abb6056f01 100644
--- a/src/bin/elementary/test_efl_anim_group_sequential.c
+++ b/src/bin/elementary/test_efl_anim_group_sequential.c
@@ -7,7 +7,7 @@ typedef struct _App_Data
{
Efl_Animation *sequential_show_anim;
Efl_Animation *sequential_hide_anim;
- Efl_Animation_Object *anim_obj;
+ Efl_Animation_Player *anim_obj;
Eina_Bool is_btn_visible;
} App_Data;
@@ -19,19 +19,15 @@ _anim_started_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
}
static void
-_anim_ended_cb(void *data, const Efl_Event *event EINA_UNUSED)
+_anim_ended_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
- App_Data *ad = data;
-
printf("Animation has been ended!\n");
-
- ad->anim_obj = NULL;
}
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -41,35 +37,23 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
App_Data *ad = data;
- if (ad->anim_obj)
- efl_animation_object_cancel(ad->anim_obj);
-
ad->is_btn_visible = !(ad->is_btn_visible);
if (ad->is_btn_visible)
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->sequential_show_anim);
- elm_object_text_set(obj, "Start Sequential Group Animation to hide button");
+ efl_animation_player_animation_set(ad->anim_obj, ad->sequential_show_anim);
+ efl_text_set(obj, "Start Sequential Group Animation to hide button");
}
else
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->sequential_hide_anim);
- elm_object_text_set(obj, "Start Sequential Group Animation to show button");
+ efl_animation_player_animation_set(ad->anim_obj, ad->sequential_hide_anim);
+ efl_text_set(obj, "Start Sequential Group Animation to show button");
}
- //Register callback called when animation starts
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, NULL);
-
- //Register callback called when animation ends
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(ad->anim_obj);
+ efl_player_start(ad->anim_obj);
}
static void
@@ -101,21 +85,20 @@ test_efl_anim_group_sequential(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
/* Animations to hide button */
//Rotate from 0 to 45 degrees Animation
- Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
+ Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, NULL, 0.5, 0.5);
//Scale Animation to zoom in
- Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
+ Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
efl_animation_scale_set(scale_double_anim, 1.0, 1.0, 2.0, 2.0, NULL, 0.5, 0.5);
//Hide Animation
- Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
//Hide Sequential Group Animation
- Efl_Animation *sequential_hide_anim = efl_add(EFL_ANIMATION_GROUP_SEQUENTIAL_CLASS, NULL);
+ Efl_Animation *sequential_hide_anim = efl_add(EFL_ANIMATION_GROUP_SEQUENTIAL_CLASS, win);
efl_animation_duration_set(sequential_hide_anim, 1.0);
- efl_animation_target_set(sequential_hide_anim, btn);
efl_animation_final_state_keep_set(sequential_hide_anim, EINA_TRUE);
//Add animations to group animation
@@ -124,51 +107,29 @@ test_efl_anim_group_sequential(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
efl_animation_group_animation_add(sequential_hide_anim, hide_anim);
- /* Animations of initial state to show button */
- //Rotate from 0 to 45 degrees Animation
- Efl_Animation *cw_45_degrees_anim2 = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
- efl_animation_rotate_set(cw_45_degrees_anim2, 0.0, 45.0, NULL, 0.5, 0.5);
-
- //Scale Animation to zoom in
- Efl_Animation *scale_double_anim2 = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
- efl_animation_scale_set(scale_double_anim2, 1.0, 1.0, 2.0, 2.0, NULL, 0.5, 0.5);
-
- //Hide Parallel Group Animation
- Efl_Animation *parallel_hide_anim = efl_add(EFL_ANIMATION_GROUP_PARALLEL_CLASS, NULL);
- efl_animation_duration_set(parallel_hide_anim, 0.0);
- efl_animation_target_set(parallel_hide_anim, btn);
- efl_animation_final_state_keep_set(parallel_hide_anim, EINA_TRUE);
-
- //Add animations to group animation
- efl_animation_group_animation_add(parallel_hide_anim, cw_45_degrees_anim2);
- efl_animation_group_animation_add(parallel_hide_anim, scale_double_anim2);
-
-
/* Animations to show button */
//Show Animation
- Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 1.0);
//Scale Animation to zoom out
- Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
- efl_animation_scale_set(scale_half_anim, 1.0, 1.0, 0.5, 0.5, NULL, 0.5, 0.5);
+ Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
+ efl_animation_scale_set(scale_half_anim, 2.0, 2.0, 1.0, 1.0, NULL, 0.5, 0.5);
efl_animation_duration_set(scale_half_anim, 1.0);
//Rotate from 45 to 0 degrees Animation
- Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
- efl_animation_rotate_set(ccw_45_degrees_anim, 0.0, -45.0, NULL, 0.5, 0.5);
+ Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
+ efl_animation_rotate_set(ccw_45_degrees_anim, 45.0, 0.0, NULL, 0.5, 0.5);
efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
//Show Sequential Group Animation
- Efl_Animation *sequential_show_anim = efl_add(EFL_ANIMATION_GROUP_SEQUENTIAL_CLASS, NULL);
- efl_animation_target_set(sequential_show_anim, btn);
+ Efl_Animation *sequential_show_anim = efl_add(EFL_ANIMATION_GROUP_SEQUENTIAL_CLASS, win);
efl_animation_final_state_keep_set(sequential_show_anim, EINA_TRUE);
//efl_animation_duration_set() is called for each animation not to set the same duration
//Add animations to group animation
//First, parallel_hide_anim is added with duration 0 to set the initial state
- efl_animation_group_animation_add(sequential_show_anim, parallel_hide_anim);
efl_animation_group_animation_add(sequential_show_anim, show_anim);
efl_animation_group_animation_add(sequential_show_anim, scale_half_anim);
efl_animation_group_animation_add(sequential_show_anim, ccw_45_degrees_anim);
@@ -177,7 +138,16 @@ test_efl_anim_group_sequential(void *data EINA_UNUSED, Evas_Object *obj EINA_UNU
//Initialize App Data
ad->sequential_show_anim = sequential_show_anim;
ad->sequential_hide_anim = sequential_hide_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, NULL);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->is_btn_visible = EINA_TRUE;
//Button to start animation
diff --git a/src/bin/elementary/test_efl_anim_interpolator.c b/src/bin/elementary/test_efl_anim_interpolator.c
index 732d217e43..097d030b98 100644
--- a/src/bin/elementary/test_efl_anim_interpolator.c
+++ b/src/bin/elementary/test_efl_anim_interpolator.c
@@ -13,7 +13,7 @@
typedef struct _App_Data
{
Efl_Animation *anim[INTERP_NUM];
- Efl_Animation_Object *anim_obj[INTERP_NUM];
+ Efl_Animation_Player *anim_obj[INTERP_NUM];
Evas_Object *btn[INTERP_NUM];
Evas_Object *start_all_btn;
@@ -88,7 +88,6 @@ _anim_ended_cb(void *data, const Efl_Event *event)
{
if (ad->anim_obj[i] == event->object)
{
- ad->anim_obj[i] = NULL;
elm_object_disabled_set(ad->btn[i], EINA_FALSE);
break;
}
@@ -101,7 +100,7 @@ _anim_ended_cb(void *data, const Efl_Event *event)
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -113,21 +112,8 @@ _anim_start(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
int index = (uintptr_t)evas_object_data_get(obj, "index");
- //Create Animation Object from Animation
- Efl_Animation_Object *anim_obj = efl_animation_object_create(ad->anim[index]);
- ad->anim_obj[index] = anim_obj;
-
- //Register callback called when animation starts
- efl_event_callback_add(anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, ad);
-
- //Register callback called when animation ends
- efl_event_callback_add(anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(anim_obj);
+ efl_player_start(ad->anim_obj[index]);
elm_object_disabled_set(obj, EINA_TRUE);
elm_object_disabled_set(ad->start_all_btn, EINA_TRUE);
@@ -141,22 +127,8 @@ _anim_start_all(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
int i;
for (i = 0; i < INTERP_NUM; i++)
{
- //Create Animation Object from Animation
- Efl_Animation_Object *anim_obj = efl_animation_object_create(ad->anim[i]);
- ad->anim_obj[i] = anim_obj;
-
- //Register callback called when animation starts
- efl_event_callback_add(anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, ad);
-
- //Register callback called when animation ends
- efl_event_callback_add(anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(anim_obj);
-
+ efl_player_start(ad->anim_obj[i]);
elm_object_disabled_set(ad->btn[i], EINA_TRUE);
}
@@ -212,14 +184,29 @@ test_efl_anim_interpolator(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
evas_object_smart_callback_add(btn, "clicked", _anim_start, ad);
ad->btn[i] = btn;
- Efl_Animation *anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, NULL);
+ Efl_Animation *anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, win);
efl_animation_translate_set(anim, 0, 0, (WIN_W - BTN_W), 0);
efl_animation_duration_set(anim, 2.0);
- efl_animation_target_set(anim, btn);
+ efl_animation_final_state_keep_set(anim, EINA_FALSE);
Efl_Interpolator *interp = _interpolator_create(i);
efl_animation_interpolator_set(anim, interp);
ad->anim[i] = anim;
+
+ //Create Animation Object from Animation
+ Efl_Animation_Player *anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, NULL,
+ efl_animation_player_animation_set(efl_added, anim),
+ efl_animation_player_target_set(efl_added, btn));
+ ad->anim_obj[i] = anim_obj;
+
+ //Register callback called when animation starts
+ efl_event_callback_add(anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, ad);
+
+ //Register callback called when animation ends
+ efl_event_callback_add(anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, ad);
+
+ //Register callback called while animation is executed
+ efl_event_callback_add(anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
}
ad->running_anim_cnt = 0;
diff --git a/src/bin/elementary/test_efl_anim_pause.c b/src/bin/elementary/test_efl_anim_pause.c
index 9ca97430d4..ae5b3a50ed 100644
--- a/src/bin/elementary/test_efl_anim_pause.c
+++ b/src/bin/elementary/test_efl_anim_pause.c
@@ -7,7 +7,7 @@ typedef struct _App_Data
{
Efl_Animation *show_anim;
Efl_Animation *hide_anim;
- Efl_Animation_Object *anim_obj;
+ Efl_Animation_Player *anim_obj;
Evas_Object *pause_btn;
@@ -33,14 +33,12 @@ _anim_ended_cb(void *data, const Efl_Event *event EINA_UNUSED)
printf("Animation has been ended!\n");
elm_object_disabled_set(ad->pause_btn, EINA_TRUE);
-
- ad->anim_obj = NULL;
}
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -54,8 +52,6 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
{
ad->is_anim_paused = EINA_FALSE;
elm_object_text_set(ad->pause_btn, "Pause Animation");
-
- efl_animation_object_cancel(ad->anim_obj);
}
ad->is_btn_visible = !(ad->is_btn_visible);
@@ -63,27 +59,17 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
if (ad->is_btn_visible)
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->show_anim);
- elm_object_text_set(obj, "Start Alpha Animation from 1.0 to 0.0");
+ efl_animation_player_animation_set(ad->anim_obj, ad->show_anim);
+ efl_text_set(obj, "Start Alpha Animation from 1.0 to 0.0");
}
else
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->hide_anim);
- elm_object_text_set(obj, "Start Alpha Animation from 0.0 to 1.0");
+ efl_animation_player_animation_set(ad->anim_obj, ad->hide_anim);
+ efl_text_set(obj, "Start Alpha Animation from 0.0 to 1.0");
}
-
- //Register callback called when animation starts
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, ad);
-
- //Register callback called when animation ends
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(ad->anim_obj);
+ efl_player_start(ad->anim_obj);
}
static void
@@ -96,13 +82,13 @@ _pause_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
if (ad->is_anim_paused)
{
//Pause animation
- efl_animation_object_pause(ad->anim_obj);
+ efl_player_play_set(ad->anim_obj, EINA_FALSE);
elm_object_text_set(obj, "Resume Animation");
}
else
{
//Resume animation
- efl_animation_object_resume(ad->anim_obj);
+ efl_player_play_set(ad->anim_obj, EINA_TRUE);
elm_object_text_set(obj, "Pause Animation");
}
}
@@ -134,17 +120,15 @@ test_efl_anim_pause(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
evas_object_show(btn);
//Show Animation
- Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 2.0);
- efl_animation_target_set(show_anim, btn);
efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
//Hide Animation
- Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
efl_animation_duration_set(hide_anim, 2.0);
- efl_animation_target_set(hide_anim, btn);
efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
@@ -172,7 +156,16 @@ test_efl_anim_pause(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
//Initialize App Data
ad->show_anim = show_anim;
ad->hide_anim = hide_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, ad);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, ad);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->pause_btn = pause_btn;
ad->is_btn_visible = EINA_TRUE;
ad->is_anim_paused = EINA_FALSE;
diff --git a/src/bin/elementary/test_efl_anim_repeat.c b/src/bin/elementary/test_efl_anim_repeat.c
index b5f7ac3ce1..47da4f1a92 100644
--- a/src/bin/elementary/test_efl_anim_repeat.c
+++ b/src/bin/elementary/test_efl_anim_repeat.c
@@ -7,7 +7,7 @@ typedef struct _App_Data
{
Efl_Animation *show_anim;
Efl_Animation *hide_anim;
- Efl_Animation_Object *anim_obj;
+ Efl_Animation_Player *anim_obj;
Evas_Object *start_btn;
Evas_Object *repeat_count_spin;
@@ -57,14 +57,12 @@ _anim_ended_cb(void *data, const Efl_Event *event EINA_UNUSED)
elm_object_disabled_set(ad->repeat_count_spin, EINA_FALSE);
elm_object_disabled_set(ad->repeat_mode_spin, EINA_FALSE);
-
- ad->anim_obj = NULL;
}
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -74,9 +72,6 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
{
App_Data *ad = data;
- if (ad->anim_obj)
- efl_animation_object_cancel(ad->anim_obj);
-
ad->is_btn_visible = !(ad->is_btn_visible);
int repeat_count = elm_spinner_value_get(ad->repeat_count_spin);
@@ -94,8 +89,8 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
efl_animation_repeat_mode_set(ad->show_anim, repeat_mode);
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->show_anim);
- elm_object_text_set(obj, "Start Alpha Animation from 1.0 to 0.0");
+ efl_animation_player_animation_set(ad->anim_obj, ad->show_anim);
+ efl_text_set(obj, "Start Alpha Animation from 1.0 to 0.0");
}
else
{
@@ -106,21 +101,12 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
efl_animation_repeat_mode_set(ad->hide_anim, repeat_mode);
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->hide_anim);
- elm_object_text_set(obj, "Start Alpha Animation from 0.0 to 1.0");
+ efl_animation_player_animation_set(ad->anim_obj, ad->hide_anim);
+ efl_text_set(obj, "Start Alpha Animation from 0.0 to 1.0");
}
- //Register callback called when animation starts
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, NULL);
-
- //Register callback called when animation ends
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(ad->anim_obj);
+ efl_player_start(ad->anim_obj);
}
static void
@@ -150,17 +136,15 @@ test_efl_anim_repeat(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
evas_object_show(btn);
//Show Animation
- Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 1.0);
- efl_animation_target_set(show_anim, btn);
efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
//Hide Animation
- Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
efl_animation_duration_set(hide_anim, 1.0);
- efl_animation_target_set(hide_anim, btn);
efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
@@ -199,7 +183,15 @@ test_efl_anim_repeat(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
//Initialize App Data
ad->show_anim = show_anim;
ad->hide_anim = hide_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, ad);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->start_btn = start_btn;
ad->repeat_count_spin = repeat_count_spin;
ad->repeat_mode_spin = repeat_mode_spin;
diff --git a/src/bin/elementary/test_efl_anim_rotate.c b/src/bin/elementary/test_efl_anim_rotate.c
index 7fda359375..888e7ef1e4 100644
--- a/src/bin/elementary/test_efl_anim_rotate.c
+++ b/src/bin/elementary/test_efl_anim_rotate.c
@@ -7,7 +7,7 @@ typedef struct _App_Data
{
Efl_Animation *cw_45_degrees_anim;
Efl_Animation *ccw_45_degrees_anim;
- Efl_Animation_Object *anim_obj;
+ Efl_Animation_Player *anim_obj;
Eina_Bool is_btn_rotated;
} App_Data;
@@ -19,19 +19,15 @@ _anim_started_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
}
static void
-_anim_ended_cb(void *data, const Efl_Event *event EINA_UNUSED)
+_anim_ended_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
- App_Data *ad = data;
-
printf("Animation has been ended!\n");
-
- ad->anim_obj = NULL;
}
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -41,35 +37,23 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
App_Data *ad = data;
- if (ad->anim_obj)
- efl_animation_object_cancel(ad->anim_obj);
-
ad->is_btn_rotated = !(ad->is_btn_rotated);
if (ad->is_btn_rotated)
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->cw_45_degrees_anim);
- elm_object_text_set(obj, "Start Rotate Animation from 45 to 0 degrees");
+ efl_animation_player_animation_set(ad->anim_obj, ad->cw_45_degrees_anim);
+ efl_text_set(obj, "Start Rotate Animation from 45 to 0 degrees");
}
else
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->ccw_45_degrees_anim);
- elm_object_text_set(obj, "Start Rotate Animation from 0 to 45 degrees");
+ efl_animation_player_animation_set(ad->anim_obj, ad->ccw_45_degrees_anim);
+ efl_text_set(obj, "Start Rotate Animation from 0 to 45 degrees");
}
- //Register callback called when animation starts
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, NULL);
-
- //Register callback called when animation ends
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(ad->anim_obj);
+ efl_player_start(ad->anim_obj);
}
static void
@@ -99,23 +83,30 @@ test_efl_anim_rotate(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
evas_object_show(btn);
//Rotate from 0 to 45 degrees Animation
- Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
- efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, NULL, 0.5, 0.5);
+ Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
+ efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0,NULL, 0.5, 0.5);
efl_animation_duration_set(cw_45_degrees_anim, 1.0);
- efl_animation_target_set(cw_45_degrees_anim, btn);
efl_animation_final_state_keep_set(cw_45_degrees_anim, EINA_TRUE);
//Rotate from 45 to 0 degrees Animation
- Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
+ Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
efl_animation_rotate_set(ccw_45_degrees_anim, 45.0, 0.0, NULL, 0.5, 0.5);
efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
- efl_animation_target_set(ccw_45_degrees_anim, btn);
efl_animation_final_state_keep_set(ccw_45_degrees_anim, EINA_TRUE);
//Initialize App Data
ad->cw_45_degrees_anim = cw_45_degrees_anim;
ad->ccw_45_degrees_anim = ccw_45_degrees_anim;
- ad->anim_obj = NULL;
+
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, NULL);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->is_btn_rotated = EINA_FALSE;
//Button to start animation
@@ -159,23 +150,31 @@ test_efl_anim_rotate_relative(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUS
evas_object_show(pivot);
//Rotate from 0 to 45 degrees Animation
- Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
+ Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
efl_animation_rotate_set(cw_45_degrees_anim, 0.0, 45.0, pivot, 0.5, 0.5);
efl_animation_duration_set(cw_45_degrees_anim, 1.0);
- efl_animation_target_set(cw_45_degrees_anim, btn);
efl_animation_final_state_keep_set(cw_45_degrees_anim, EINA_TRUE);
//Rotate from 45 to 0 degrees Animation
- Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
+ Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
efl_animation_rotate_set(ccw_45_degrees_anim, 45.0, 0.0, pivot, 0.5, 0.5);
efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
- efl_animation_target_set(ccw_45_degrees_anim, btn);
efl_animation_final_state_keep_set(ccw_45_degrees_anim, EINA_TRUE);
//Initialize App Data
ad->cw_45_degrees_anim = cw_45_degrees_anim;
ad->ccw_45_degrees_anim = ccw_45_degrees_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, NULL);
+
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
ad->is_btn_rotated = EINA_FALSE;
//Button to start animation
@@ -219,23 +218,30 @@ test_efl_anim_rotate_absolute(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUS
evas_object_show(abs_center);
//Rotate from 0 to 45 degrees Animation
- Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
+ Efl_Animation *cw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
efl_animation_rotate_absolute_set(cw_45_degrees_anim, 0.0, 45.0, 0, 0);
efl_animation_duration_set(cw_45_degrees_anim, 1.0);
- efl_animation_target_set(cw_45_degrees_anim, btn);
efl_animation_final_state_keep_set(cw_45_degrees_anim, EINA_TRUE);
//Rotate from 45 to 0 degrees Animation
- Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, NULL);
+ Efl_Animation *ccw_45_degrees_anim = efl_add(EFL_ANIMATION_ROTATE_CLASS, win);
efl_animation_rotate_absolute_set(ccw_45_degrees_anim, 45.0, 0.0, 0, 0);
efl_animation_duration_set(ccw_45_degrees_anim, 1.0);
- efl_animation_target_set(ccw_45_degrees_anim, btn);
efl_animation_final_state_keep_set(ccw_45_degrees_anim, EINA_TRUE);
//Initialize App Data
ad->cw_45_degrees_anim = cw_45_degrees_anim;
ad->ccw_45_degrees_anim = ccw_45_degrees_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, NULL);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->is_btn_rotated = EINA_FALSE;
//Button to start animation
diff --git a/src/bin/elementary/test_efl_anim_scale.c b/src/bin/elementary/test_efl_anim_scale.c
index 02ba39c922..41d1c88b60 100644
--- a/src/bin/elementary/test_efl_anim_scale.c
+++ b/src/bin/elementary/test_efl_anim_scale.c
@@ -7,7 +7,7 @@ typedef struct _App_Data
{
Efl_Animation *scale_double_anim;
Efl_Animation *scale_half_anim;
- Efl_Animation_Object *anim_obj;
+ Efl_Animation_Player *anim_obj;
Eina_Bool is_btn_scaled;
} App_Data;
@@ -19,19 +19,15 @@ _anim_started_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
}
static void
-_anim_ended_cb(void *data, const Efl_Event *event EINA_UNUSED)
+_anim_ended_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
- App_Data *ad = data;
-
printf("Animation has been ended!\n");
-
- ad->anim_obj = NULL;
}
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -41,35 +37,23 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
App_Data *ad = data;
- if (ad->anim_obj)
- efl_animation_object_cancel(ad->anim_obj);
-
ad->is_btn_scaled = !(ad->is_btn_scaled);
if (ad->is_btn_scaled)
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->scale_double_anim);
- elm_object_text_set(obj, "Start Scale Animation to zoom out");
+ efl_animation_player_animation_set(ad->anim_obj, ad->scale_double_anim);
+ efl_text_set(obj, "Start Scale Animation to zoom out");
}
else
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->scale_half_anim);
- elm_object_text_set(obj, "Start Scale Animation to zoom in");
+ efl_animation_player_animation_set(ad->anim_obj, ad->scale_half_anim);
+ efl_text_set(obj, "Start Scale Animation to zoom in");
}
- //Register callback called when animation starts
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, NULL);
-
- //Register callback called when animation ends
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(ad->anim_obj);
+ efl_player_start(ad->anim_obj);
}
static void
@@ -99,23 +83,32 @@ test_efl_anim_scale(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
evas_object_show(btn);
//Scale Animation to zoom in
- Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
+ Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
efl_animation_scale_set(scale_double_anim, 1.0, 1.0, 2.0, 2.0, NULL, 0.5, 0.5);
efl_animation_duration_set(scale_double_anim, 1.0);
- efl_animation_target_set(scale_double_anim, btn);
efl_animation_final_state_keep_set(scale_double_anim, EINA_TRUE);
//Scale Animation to zoom out
- Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
+ Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
efl_animation_scale_set(scale_half_anim, 2.0, 2.0, 1.0, 1.0, NULL, 0.5, 0.5);
efl_animation_duration_set(scale_half_anim, 1.0);
- efl_animation_target_set(scale_half_anim, btn);
efl_animation_final_state_keep_set(scale_half_anim, EINA_TRUE);
//Initialize App Data
ad->scale_double_anim = scale_double_anim;
ad->scale_half_anim = scale_half_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, NULL,
+ efl_animation_player_target_set(efl_added, btn));
+
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, ad);
+
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->is_btn_scaled = EINA_FALSE;
//Button to start animation
@@ -159,23 +152,29 @@ test_efl_anim_scale_relative(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSE
evas_object_show(pivot);
//Scale Animation to zoom in
- Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
+ Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
efl_animation_scale_set(scale_double_anim, 1.0, 1.0, 2.0, 2.0, pivot, 0.5, 0.5);
efl_animation_duration_set(scale_double_anim, 1.0);
- efl_animation_target_set(scale_double_anim, btn);
efl_animation_final_state_keep_set(scale_double_anim, EINA_TRUE);
//Scale Animation to zoom out
- Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
+ Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
efl_animation_scale_set(scale_half_anim, 2.0, 2.0, 1.0, 1.0, pivot, 0.5, 0.5);
efl_animation_duration_set(scale_half_anim, 1.0);
- efl_animation_target_set(scale_half_anim, btn);
efl_animation_final_state_keep_set(scale_half_anim, EINA_TRUE);
//Initialize App Data
ad->scale_double_anim = scale_double_anim;
ad->scale_half_anim = scale_half_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, ad);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->is_btn_scaled = EINA_FALSE;
//Button to start animation
@@ -219,23 +218,29 @@ test_efl_anim_scale_absolute(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSE
evas_object_show(abs_center);
//Scale Animation to zoom in
- Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
+ Efl_Animation *scale_double_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
efl_animation_scale_absolute_set(scale_double_anim, 1.0, 1.0, 2.0, 2.0, 0, 0);
efl_animation_duration_set(scale_double_anim, 1.0);
- efl_animation_target_set(scale_double_anim, btn);
efl_animation_final_state_keep_set(scale_double_anim, EINA_TRUE);
//Scale Animation to zoom out
- Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, NULL);
+ Efl_Animation *scale_half_anim = efl_add(EFL_ANIMATION_SCALE_CLASS, win);
efl_animation_scale_absolute_set(scale_half_anim, 2.0, 2.0, 1.0, 1.0, 0, 0);
efl_animation_duration_set(scale_half_anim, 1.0);
- efl_animation_target_set(scale_half_anim, btn);
efl_animation_final_state_keep_set(scale_half_anim, EINA_TRUE);
//Initialize App Data
ad->scale_double_anim = scale_double_anim;
ad->scale_half_anim = scale_half_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, ad);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->is_btn_scaled = EINA_FALSE;
//Button to start animation
diff --git a/src/bin/elementary/test_efl_anim_start_delay.c b/src/bin/elementary/test_efl_anim_start_delay.c
index 63cab0f18e..06101e2eeb 100644
--- a/src/bin/elementary/test_efl_anim_start_delay.c
+++ b/src/bin/elementary/test_efl_anim_start_delay.c
@@ -7,7 +7,7 @@ typedef struct _App_Data
{
Efl_Animation *show_anim;
Efl_Animation *hide_anim;
- Efl_Animation_Object *anim_obj;
+ Efl_Animation_Player *anim_obj;
Evas_Object *start_delay_spin;
@@ -28,14 +28,12 @@ _anim_ended_cb(void *data, const Efl_Event *event EINA_UNUSED)
printf("Animation has been ended!\n");
elm_object_disabled_set(ad->start_delay_spin, EINA_FALSE);
-
- ad->anim_obj = NULL;
}
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -45,9 +43,6 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
{
App_Data *ad = data;
- if (ad->anim_obj)
- efl_animation_object_cancel(ad->anim_obj);
-
ad->is_btn_visible = !(ad->is_btn_visible);
double start_delay = elm_spinner_value_get(ad->start_delay_spin);
@@ -59,8 +54,8 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
efl_animation_start_delay_set(ad->show_anim, start_delay);
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->show_anim);
- elm_object_text_set(obj, "Start Alpha Animation from 1.0 to 0.0");
+ efl_animation_player_animation_set(ad->anim_obj, ad->show_anim);
+ efl_text_set(obj, "Start Alpha Animation from 1.0 to 0.0");
}
else
{
@@ -68,21 +63,12 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
efl_animation_start_delay_set(ad->hide_anim, start_delay);
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->hide_anim);
- elm_object_text_set(obj, "Start Alpha Animation from 0.0 to 1.0");
+ efl_animation_player_animation_set(ad->anim_obj, ad->hide_anim);
+ efl_text_set(obj, "Start Alpha Animation from 0.0 to 1.0");
}
- //Register callback called when animation starts
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, NULL);
-
- //Register callback called when animation ends
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
//Let Animation Object start animation
- efl_animation_object_start(ad->anim_obj);
+ efl_player_start(ad->anim_obj);
}
static void
@@ -112,17 +98,15 @@ test_efl_anim_start_delay(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
evas_object_show(btn);
//Show Animation
- Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *show_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(show_anim, 0.0, 1.0);
efl_animation_duration_set(show_anim, 1.0);
- efl_animation_target_set(show_anim, btn);
efl_animation_final_state_keep_set(show_anim, EINA_TRUE);
//Hide Animation
- Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, NULL);
+ Efl_Animation *hide_anim = efl_add(EFL_ANIMATION_ALPHA_CLASS, win);
efl_animation_alpha_set(hide_anim, 1.0, 0.0);
efl_animation_duration_set(hide_anim, 1.0);
- efl_animation_target_set(hide_anim, btn);
efl_animation_final_state_keep_set(hide_anim, EINA_TRUE);
@@ -150,7 +134,16 @@ test_efl_anim_start_delay(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
//Initialize App Data
ad->show_anim = show_anim;
ad->hide_anim = hide_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, ad);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->start_delay_spin = start_delay_spin;
ad->is_btn_visible = EINA_TRUE;
diff --git a/src/bin/elementary/test_efl_anim_translate.c b/src/bin/elementary/test_efl_anim_translate.c
index d76e927f67..2ba1ff4e19 100644
--- a/src/bin/elementary/test_efl_anim_translate.c
+++ b/src/bin/elementary/test_efl_anim_translate.c
@@ -7,7 +7,7 @@ typedef struct _App_Data
{
Efl_Animation *translate_rb_anim;
Efl_Animation *translate_lt_anim;
- Efl_Animation_Object *anim_obj;
+ Efl_Animation_Player *anim_obj;
Eina_Bool is_btn_translated;
} App_Data;
@@ -19,19 +19,15 @@ _anim_started_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
}
static void
-_anim_ended_cb(void *data, const Efl_Event *event EINA_UNUSED)
+_anim_ended_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
- App_Data *ad = data;
-
printf("Animation has been ended!\n");
-
- ad->anim_obj = NULL;
}
static void
_anim_running_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
- Efl_Animation_Object_Running_Event_Info *event_info = event->info;
+ Efl_Animation_Player_Running_Event_Info *event_info = event->info;
double progress = event_info->progress;
printf("Animation is running! Current progress(%lf)\n", progress);
}
@@ -41,35 +37,23 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
App_Data *ad = data;
- if (ad->anim_obj)
- efl_animation_object_cancel(ad->anim_obj);
-
ad->is_btn_translated = !(ad->is_btn_translated);
if (ad->is_btn_translated)
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->translate_rb_anim);
- elm_object_text_set(obj, "Start Translate Animation to left top");
+ efl_animation_player_animation_set(ad->anim_obj, ad->translate_rb_anim);
+ efl_text_set(obj, "Start Translate Animation to left top");
}
else
{
//Create Animation Object from Animation
- ad->anim_obj = efl_animation_object_create(ad->translate_lt_anim);
- elm_object_text_set(obj, "Start Translate Animation to right bottom");
+ efl_animation_player_animation_set(ad->anim_obj, ad->translate_lt_anim);
+ efl_text_set(obj, "Start Translate Animation to right bottom");
}
-
- //Register callback called when animation starts
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, _anim_started_cb, NULL);
-
- //Register callback called when animation ends
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, _anim_ended_cb, ad);
-
- //Register callback called while animation is executed
- efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING, _anim_running_cb, NULL);
-
+
//Let Animation Object start animation
- efl_animation_object_start(ad->anim_obj);
+ efl_player_start(ad->anim_obj);
}
static void
@@ -99,23 +83,29 @@ test_efl_anim_translate(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, vo
evas_object_show(btn);
//Translate Animation to right bottom relatively
- Efl_Animation *translate_rb_anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, NULL);
+ Efl_Animation *translate_rb_anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, win);
efl_animation_translate_set(translate_rb_anim, 0, 0, 100, 100);
efl_animation_duration_set(translate_rb_anim, 1.0);
- efl_animation_target_set(translate_rb_anim, btn);
efl_animation_final_state_keep_set(translate_rb_anim, EINA_TRUE);
//Translate Animation to left top relatively
- Efl_Animation *translate_lt_anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, NULL);
+ Efl_Animation *translate_lt_anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, win);
efl_animation_translate_set(translate_lt_anim, 100, 100, 0, 0);
efl_animation_duration_set(translate_lt_anim, 1.0);
- efl_animation_target_set(translate_lt_anim, btn);
efl_animation_final_state_keep_set(translate_lt_anim, EINA_TRUE);
//Initialize App Data
ad->translate_rb_anim = translate_rb_anim;
ad->translate_lt_anim = translate_lt_anim;
- ad->anim_obj = NULL;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, NULL);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
+
ad->is_btn_translated = EINA_FALSE;
//Button to start animation
@@ -159,24 +149,29 @@ test_efl_anim_translate_absolute(void *data EINA_UNUSED, Evas_Object *obj EINA_U
evas_object_show(abs_center);
//Translate Animation to right bottom absolutely
- Efl_Animation *translate_rb_anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, NULL);
+ Efl_Animation *translate_rb_anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, win);
efl_animation_translate_absolute_set(translate_rb_anim, 0, 0, 100, 100);
efl_animation_duration_set(translate_rb_anim, 1.0);
- efl_animation_target_set(translate_rb_anim, btn);
efl_animation_final_state_keep_set(translate_rb_anim, EINA_TRUE);
//Translate Animation to left top absolutely
- Efl_Animation *translate_lt_anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, NULL);
+ Efl_Animation *translate_lt_anim = efl_add(EFL_ANIMATION_TRANSLATE_CLASS, win);
efl_animation_translate_absolute_set(translate_lt_anim, 100, 100, 0, 0);
efl_animation_duration_set(translate_lt_anim, 1.0);
- efl_animation_target_set(translate_lt_anim, btn);
efl_animation_final_state_keep_set(translate_lt_anim, EINA_TRUE);
//Initialize App Data
ad->translate_rb_anim = translate_rb_anim;
ad->translate_lt_anim = translate_lt_anim;
- ad->anim_obj = NULL;
ad->is_btn_translated = EINA_FALSE;
+ ad->anim_obj = efl_add(EFL_ANIMATION_PLAYER_CLASS, win,
+ efl_animation_player_target_set(efl_added, btn));
+ //Register callback called when animation starts
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, _anim_started_cb, NULL);
+ //Register callback called when animation ends
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, _anim_ended_cb, NULL);
+ //Register callback called while animation is executed
+ efl_event_callback_add(ad->anim_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING, _anim_running_cb, NULL);
//Button to start animation
Evas_Object *btn2 = elm_button_add(win);
diff --git a/src/lib/efl/Efl.h b/src/lib/efl/Efl.h
index 8505afa176..fac7a995aa 100644
--- a/src/lib/efl/Efl.h
+++ b/src/lib/efl/Efl.h
@@ -82,6 +82,7 @@ typedef Efl_Gfx_Path_Command_Type Efl_Gfx_Path_Command;
#include "interfaces/efl_image_animated.eo.h"
#include "interfaces/efl_image_load.eo.h"
#include "interfaces/efl_part.eo.h"
+#include "interfaces/efl_playable.eo.h"
#include "interfaces/efl_player.eo.h"
#include "interfaces/efl_text.eo.h"
#include "interfaces/efl_text_types.eot.h"
diff --git a/src/lib/efl/interfaces/efl_interfaces_main.c b/src/lib/efl/interfaces/efl_interfaces_main.c
index af61237416..a203c338d5 100644
--- a/src/lib/efl/interfaces/efl_interfaces_main.c
+++ b/src/lib/efl/interfaces/efl_interfaces_main.c
@@ -15,6 +15,7 @@
#include "interfaces/efl_image_animated.eo.c"
#include "interfaces/efl_image_load.eo.c"
#include "interfaces/efl_part.eo.c"
+#include "interfaces/efl_playable.eo.c"
#include "interfaces/efl_player.eo.c"
#include "interfaces/efl_text.eo.c"
#include "interfaces/efl_text_properties.eo.c"
diff --git a/src/lib/efl/interfaces/efl_playable.eo b/src/lib/efl/interfaces/efl_playable.eo
new file mode 100644
index 0000000000..56dbc9e51b
--- /dev/null
+++ b/src/lib/efl/interfaces/efl_playable.eo
@@ -0,0 +1,29 @@
+interface Efl.Playable
+{
+ [[Efl media playable interface]]
+ methods {
+ @property length {
+ [[Get the length of play for the media file.]]
+ get {
+ }
+ values {
+ length: double; [[The length of the stream in seconds.]]
+ }
+ }
+ @property playable {
+ get {
+ }
+ values {
+ playable: bool;
+ }
+ }
+ @property seekable {
+ [[Get whether the media file is seekable.]]
+ get {
+ }
+ values {
+ seekable: bool; [[$true if seekable.]]
+ }
+ }
+ }
+}
diff --git a/src/lib/efl/interfaces/efl_player.eo b/src/lib/efl/interfaces/efl_player.eo
index 86c2c5296c..2e977d94be 100644
--- a/src/lib/efl/interfaces/efl_player.eo
+++ b/src/lib/efl/interfaces/efl_player.eo
@@ -2,8 +2,14 @@ interface Efl.Player
{
[[Efl media player interface]]
methods {
+ start {
+ [[Start a playing playable object.]]
+ }
+ stop {
+ [[Stop playable object.]]
+ }
@property playable {
- [[Whether or not the object data can be played.]]
+ [[Whether or not the playable can be played.]]
get {
}
values {
diff --git a/src/lib/elementary/efl_ui_video.c b/src/lib/elementary/efl_ui_video.c
index 9046777b07..9d19b8ad4d 100644
--- a/src/lib/elementary/efl_ui_video.c
+++ b/src/lib/elementary/efl_ui_video.c
@@ -99,7 +99,7 @@ _key_action_move(Evas_Object *obj, const char *params)
static Eina_Bool
_key_action_play(Evas_Object *obj, const char *params EINA_UNUSED)
{
- if (elm_video_is_playing_get(obj))
+ if (efl_player_play_get(obj))
elm_video_pause(obj);
else
elm_video_play(obj);
@@ -305,33 +305,39 @@ _efl_ui_video_emotion_get(Eo *obj EINA_UNUSED, Efl_Ui_Video_Data *sd)
}
EOLIAN static void
-_efl_ui_video_play(Eo *obj EINA_UNUSED, Efl_Ui_Video_Data *sd)
+_efl_ui_video_efl_player_start(Eo *obj, Efl_Ui_Video_Data *sd EINA_UNUSED)
{
- if (emotion_object_play_get(sd->emotion)) return;
-
- ELM_SAFE_FREE(sd->timer, ecore_timer_del);
- sd->stop = EINA_FALSE;
- emotion_object_play_set(sd->emotion, EINA_TRUE);
- elm_layout_signal_emit(obj, "elm,video,play", "elm");
+ efl_player_position_set(obj, 0.0);
+ efl_player_play_set(obj, EINA_TRUE);
}
-/* FIXME: pause will setup timer and go into sleep or
- * hibernate after a while without activity.
- */
EOLIAN static void
-_efl_ui_video_pause(Eo *obj, Efl_Ui_Video_Data *sd)
+_efl_ui_video_efl_player_play_set(Eo *obj, Efl_Ui_Video_Data *sd, Eina_Bool play)
{
- if (!emotion_object_play_get(sd->emotion)) return;
+ if (emotion_object_play_get(sd->emotion) == !!play) return;
- if (!sd->timer) sd->timer = ecore_timer_add(20.0, _suspend_cb, obj);
- emotion_object_play_set(sd->emotion, EINA_FALSE);
- elm_layout_signal_emit(obj, "elm,video,pause", "elm");
+ if (play)
+ {
+ ELM_SAFE_FREE(sd->timer, ecore_timer_del);
+ sd->stop = EINA_FALSE;
+ emotion_object_play_set(sd->emotion, EINA_TRUE);
+ elm_layout_signal_emit(obj, "elm,video,play", "elm");
+ }
+ else
+ {
+ /* FIXME: pause will setup timer and go into sleep or
+ * hibernate after a while without activity.
+ */
+ if (!sd->timer) sd->timer = ecore_timer_add(20.0, _suspend_cb, obj);
+ emotion_object_play_set(sd->emotion, EINA_FALSE);
+ elm_layout_signal_emit(obj, "elm,video,pause", "elm");
+ }
}
/* FIXME: stop should go into hibernate state directly.
*/
EOLIAN static void
-_efl_ui_video_stop(Eo *obj, Efl_Ui_Video_Data *sd)
+_efl_ui_video_efl_player_stop(Eo *obj, Efl_Ui_Video_Data *sd)
{
if (!emotion_object_play_get(sd->emotion) && sd->stop) return;
@@ -344,7 +350,7 @@ _efl_ui_video_stop(Eo *obj, Efl_Ui_Video_Data *sd)
}
EOLIAN static Eina_Bool
-_efl_ui_video_is_playing_get(Eo *obj EINA_UNUSED, Efl_Ui_Video_Data *sd)
+_efl_ui_video_efl_player_play_get(Eo *obj EINA_UNUSED, Efl_Ui_Video_Data *sd)
{
return emotion_object_play_get(sd->emotion);
}
@@ -445,6 +451,30 @@ elm_video_play_position_get(const Evas_Object *obj)
return efl_player_position_get(obj);
}
+EAPI Eina_Bool
+elm_video_is_playing_get(Evas_Object *obj)
+{
+ return efl_player_play_get(obj);
+}
+
+EAPI void
+elm_video_play(Evas_Object *obj)
+{
+ efl_player_play_set(obj, EINA_TRUE);
+}
+
+EAPI void
+elm_video_stop(Evas_Object *obj)
+{
+ efl_player_stop(obj);
+}
+
+EAPI void
+elm_video_pause(Evas_Object *obj)
+{
+ efl_player_play_set(obj, EINA_FALSE);
+}
+
/* Internal EO APIs and hidden overrides */
ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(efl_ui_video, Efl_Ui_Video_Data)
diff --git a/src/lib/elementary/efl_ui_video.eo b/src/lib/elementary/efl_ui_video.eo
index 87d4b586b3..5971f26df4 100644
--- a/src/lib/elementary/efl_ui_video.eo
+++ b/src/lib/elementary/efl_ui_video.eo
@@ -23,16 +23,6 @@ class Efl.Ui.Video (Efl.Ui.Layout, Efl.File,
remember: bool; [[$true when the object can remember the last position, $false otherwise]]
}
}
- @property is_playing {
- get {
- [[Is the video actually playing.
-
- You should consider watching event on the object instead of
- polling the object state.
- ]]
- return: bool; [[$true if the video is playing, $false otherwise]]
- }
- }
@property emotion {
get {
[[Get the underlying Emotion object.]]
@@ -50,15 +40,6 @@ class Efl.Ui.Video (Efl.Ui.Layout, Efl.File,
return: string; [[A string containing the title.]]
}
}
- play {
- [[Start playing a video.]]
- }
- pause {
- [[Pause a video.]]
- }
- stop {
- [[Stop a video.]]
- }
}
implements {
class.constructor;
@@ -66,5 +47,8 @@ class Efl.Ui.Video (Efl.Ui.Layout, Efl.File,
Efl.File.file { get; set; }
Efl.Ui.Widget.widget_event;
Efl.Access.Widget.Action.elm_actions { get; }
+ Efl.Player.start;
+ Efl.Player.stop;
+ Efl.Player.play { get; set; }
}
}
diff --git a/src/lib/elementary/efl_ui_video_legacy.h b/src/lib/elementary/efl_ui_video_legacy.h
index 0cc087b02b..a92a1e3284 100644
--- a/src/lib/elementary/efl_ui_video_legacy.h
+++ b/src/lib/elementary/efl_ui_video_legacy.h
@@ -135,4 +135,36 @@ EAPI void elm_video_play_position_set(Evas_Object *obj, double position);
*/
EAPI double elm_video_play_position_get(const Evas_Object *obj);
+/**
+ * @brief Get whether the video actually playing.
+ * You should consider watching event on the object instead of
+ * polling the object state.
+ *
+ * @return @c true if the video is playing, @c false otherwise.
+ *
+ * @ingroup Elm_Video
+ */
+EAPI Eina_Bool elm_video_is_playing_get(Evas_Object *obj);
+
+/**
+ * @brief Start playing a video.
+ *
+ * @ingroup Elm_Video
+ */
+EAPI void elm_video_play(Evas_Object *obj);
+
+/**
+ * @brief Stop a video.
+ *
+ * @ingroup Elm_Video
+ */
+EAPI void elm_video_stop(Evas_Object *obj);
+
+/**
+ * @brief Pause a video.
+ *
+ * @ingroup Elm_Video
+ */
+EAPI void elm_video_pause(Evas_Object *obj);
+
#include "efl_ui_video.eo.legacy.h"
diff --git a/src/lib/evas/Evas_Common.h b/src/lib/evas/Evas_Common.h
index 356edc7c3a..fd745ce1be 100644
--- a/src/lib/evas/Evas_Common.h
+++ b/src/lib/evas/Evas_Common.h
@@ -3386,45 +3386,45 @@ typedef Eo Efl_Animation_Group_Sequential;
#endif
-#ifndef _EFL_ANIMATION_OBJECT_EO_CLASS_TYPE
-#define _EFL_ANIMATION_OBJECT_EO_CLASS_TYPE
+#ifndef _EFL_ANIMATION_PLAYER_EO_CLASS_TYPE
+#define _EFL_ANIMATION_PLAYER_EO_CLASS_TYPE
-typedef Eo Efl_Animation_Object;
+typedef Eo Efl_Animation_Player;
#endif
-#ifndef _EFL_ANIMATION_OBJECT_ALPHA_EO_CLASS_TYPE
-#define _EFL_ANIMATION_OBJECT_ALPHA_EO_CLASS_TYPE
+#ifndef _EFL_ANIMATION_PLAYER_ALPHA_EO_CLASS_TYPE
+#define _EFL_ANIMATION_PLAYER_ALPHA_EO_CLASS_TYPE
-typedef Eo Efl_Animation_Object_Alpha;
+typedef Eo Efl_Animation_Player_Alpha;
#endif
-#ifndef _EFL_ANIMATION_OBJECT_ROTATE_EO_CLASS_TYPE
-#define _EFL_ANIMATION_OBJECT_ROTATE_EO_CLASS_TYPE
+#ifndef _EFL_ANIMATION_PLAYER_ROTATE_EO_CLASS_TYPE
+#define _EFL_ANIMATION_PLAYER_ROTATE_EO_CLASS_TYPE
-typedef Eo Efl_Animation_Object_Rotate;
+typedef Eo Efl_Animation_Player_Rotate;
#endif
-#ifndef _EFL_ANIMATION_OBJECT_SCALE_EO_CLASS_TYPE
-#define _EFL_ANIMATION_OBJECT_SCALE_EO_CLASS_TYPE
+#ifndef _EFL_ANIMATION_PLAYER_SCALE_EO_CLASS_TYPE
+#define _EFL_ANIMATION_PLAYER_SCALE_EO_CLASS_TYPE
-typedef Eo Efl_Animation_Object_Scale;
+typedef Eo Efl_Animation_Player_Scale;
#endif
-#ifndef _EFL_ANIMATION_OBJECT_TRANSLATE_EO_CLASS_TYPE
-#define _EFL_ANIMATION_OBJECT_TRANSLATE_EO_CLASS_TYPE
+#ifndef _EFL_ANIMATION_PLAYER_TRANSLATE_EO_CLASS_TYPE
+#define _EFL_ANIMATION_PLAYER_TRANSLATE_EO_CLASS_TYPE
-typedef Eo Efl_Animation_Object_Translate;
+typedef Eo Efl_Animation_Player_Translate;
#endif
-#ifndef _EFL_ANIMATION_OBJECT_GROUP_EO_CLASS_TYPE
-#define _EFL_ANIMATION_OBJECT_GROUP_EO_CLASS_TYPE
+#ifndef _EFL_ANIMATION_PLAYER_GROUP_EO_CLASS_TYPE
+#define _EFL_ANIMATION_PLAYER_GROUP_EO_CLASS_TYPE
-typedef Eo Efl_Animation_Object_Group;
+typedef Eo Efl_Animation_Player_Group;
#endif
@@ -3442,16 +3442,16 @@ typedef Eo Efl_Animation_Group_Sequential;
#endif
-struct _Efl_Animation_Object_Running_Event_Info
+struct _Efl_Animation_Player_Running_Event_Info
{
double progress;
};
#define EFL_ANIMATION_GROUP_DURATION_NONE -1
-#define EFL_ANIMATION_OBJECT_GROUP_DURATION_NONE -1
+#define EFL_ANIMATION_PLAYER_GROUP_DURATION_NONE -1
#define EFL_ANIMATION_REPEAT_INFINITE -1
-#define EFL_ANIMATION_OBJECT_REPEAT_INFINITE -1
+#define EFL_ANIMATION_PLAYER_REPEAT_INFINITE -1
/**
* @}
diff --git a/src/lib/evas/Evas_Eo.h b/src/lib/evas/Evas_Eo.h
index fcc7fc67fe..d6664a2ddd 100644
--- a/src/lib/evas/Evas_Eo.h
+++ b/src/lib/evas/Evas_Eo.h
@@ -61,14 +61,7 @@
#include "canvas/efl_animation_group.eo.h"
#include "canvas/efl_animation_group_parallel.eo.h"
#include "canvas/efl_animation_group_sequential.eo.h"
-#include "canvas/efl_animation_object.eo.h"
-#include "canvas/efl_animation_object_alpha.eo.h"
-#include "canvas/efl_animation_object_rotate.eo.h"
-#include "canvas/efl_animation_object_scale.eo.h"
-#include "canvas/efl_animation_object_translate.eo.h"
-#include "canvas/efl_animation_object_group.eo.h"
-#include "canvas/efl_animation_object_group_parallel.eo.h"
-#include "canvas/efl_animation_object_group_sequential.eo.h"
+#include "canvas/efl_animation_player.eo.h"
#endif /* EFL_EO_API_SUPPORT */
diff --git a/src/lib/evas/Evas_Internal.h b/src/lib/evas/Evas_Internal.h
index 5dcf351066..a8a0361a9d 100644
--- a/src/lib/evas/Evas_Internal.h
+++ b/src/lib/evas/Evas_Internal.h
@@ -89,79 +89,10 @@ EWAPI extern const Efl_Event_Description _EVAS_CANVAS_EVENT_VIEWPORT_RESIZE;
#define EFL_CANVAS_GROUP_ADD_OPS(kls) EFL_OBJECT_OP_FUNC(efl_canvas_group_add, _##kls##_efl_canvas_group_group_add)
#define EFL_CANVAS_GROUP_ADD_DEL_OPS(kls) EFL_CANVAS_GROUP_ADD_OPS(kls), EFL_CANVAS_GROUP_DEL_OPS(kls)
-/* Efl.Animation.Object */
-EOAPI void efl_animation_object_target_set(Eo *obj, Efl_Canvas_Object *target);
-EOAPI Efl_Canvas_Object *efl_animation_object_target_get(const Eo *obj);
-
-EOAPI void efl_animation_object_final_state_keep_set(Eo *obj, Eina_Bool state_keep);
-EOAPI Eina_Bool efl_animation_object_final_state_keep_get(const Eo *obj);
-
-EOAPI void efl_animation_object_duration_set(Eo *obj, double duration);
-EOAPI double efl_animation_object_duration_get(const Eo *obj);
-
-EOAPI double efl_animation_object_total_duration_get(const Eo *obj);
-
-EOAPI void efl_animation_object_start_delay_set(Eo *obj, double delay_time);
-EOAPI double efl_animation_object_start_delay_get(const Eo *obj);
-
-typedef enum
-{
- EFL_ANIMATION_OBJECT_REPEAT_MODE_RESTART = 0,
- EFL_ANIMATION_OBJECT_REPEAT_MODE_REVERSE
-} Efl_Animation_Object_Repeat_Mode;
-
-EOAPI void efl_animation_object_repeat_mode_set(Eo *obj, Efl_Animation_Object_Repeat_Mode mode);
-EOAPI Efl_Animation_Object_Repeat_Mode efl_animation_object_repeat_mode_get(const Eo *obj);
-
-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);
-
-EOAPI void efl_animation_object_target_state_save(Eo *obj);
-EOAPI void efl_animation_object_target_state_reset(Eo *obj);
-EOAPI void efl_animation_object_target_map_reset(Eo *obj);
-
-EWAPI extern const Efl_Event_Description _EFL_ANIMATION_OBJECT_EVENT_PRE_STARTED;
-#define EFL_ANIMATION_OBJECT_EVENT_PRE_STARTED (&(_EFL_ANIMATION_OBJECT_EVENT_PRE_STARTED))
-/* Efl.Animation.Object END */
-
-/* Efl.Animation.Object.Alpha */
-EOAPI void efl_animation_object_alpha_set(Eo *obj, double from_alpha, double to_alpha);
-EOAPI void efl_animation_object_alpha_get(const Eo *obj, double *from_alpha, double *to_alpha);
-/* Efl.Animation.Object.Alpha END */
-
-/* Efl.Animation.Object.Rotate */
-EOAPI void efl_animation_object_rotate_set(Eo *obj, double from_degree, double to_degree, Efl_Canvas_Object *pivot, double cx, double cy);
-EOAPI void efl_animation_object_rotate_get(const Eo *obj, double *from_degree, double *to_degree, Efl_Canvas_Object **pivot, double *cx, double *cy);
-
-EOAPI void efl_animation_object_rotate_absolute_set(Eo *obj, double from_degree, double to_degree, int cx, int cy);
-EOAPI void efl_animation_object_rotate_absolute_get(const Eo *obj, double *from_degree, double *to_degree, int *cx, int *cy);
-/* Efl.Animation.Object.Rotate END */
-
-/* Efl.Animation.Object.Scale */
-EOAPI void efl_animation_object_scale_set(Eo *obj, double from_scale_x, double from_scale_y, double to_scale_x, double to_scale_y, Efl_Canvas_Object *pivot, double cx, double cy);
-EOAPI void efl_animation_object_scale_get(const Eo *obj, double *from_scale_x, double *from_scale_y, double *to_scale_x, double *to_scale_y, Efl_Canvas_Object **pivot, double *cx, double *cy);
-
-EOAPI void efl_animation_object_scale_absolute_set(Eo *obj, double from_scale_x, double from_scale_y, double to_scale_x, double to_scale_y, int cx, int cy);
-EOAPI void efl_animation_object_scale_absolute_get(const Eo *obj, double *from_scale_x, double *from_scale_y, double *to_scale_x, double *to_scale_y, int *cx, int *cy);
-/* Efl.Animation.Object.Scale END */
-
-/* Efl.Animation.Object.Translate */
-EOAPI void efl_animation_object_translate_set(Eo *obj, int from_x, int from_y, int to_x, int to_y);
-EOAPI void efl_animation_object_translate_get(const Eo *obj, int *from_x, int *from_y, int *to_x, int *to_y);
-
-EOAPI void efl_animation_object_translate_absolute_set(Eo *obj, int from_x, int from_y, int to_x, int to_y);
-EOAPI void efl_animation_object_translate_absolute_get(const Eo *obj, int *from_x, int *from_y, int *to_x, int *to_y);
-/* Efl.Animation.Object.Translate END */
-
-/* Efl.Animation.Object.Group */
-EOAPI void efl_animation_object_group_object_add(Eo *obj, Efl_Animation_Object *anim_obj);
-EOAPI void efl_animation_object_group_object_del(Eo *obj, Efl_Animation_Object *anim_obj);
-
-EOAPI Eina_List *efl_animation_object_group_objects_get(Eo *obj);
-/* Efl.Animation.Object.Group END */
+/* Efl.Animation.Player */
+EWAPI extern const Efl_Event_Description _EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED;
+#define EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED (&(_EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED))
+/* Efl.Animation.Player END */
#ifdef __cplusplus
}
diff --git a/src/lib/evas/canvas/efl_animation.c b/src/lib/evas/canvas/efl_animation.c
index c5c461e0b1..f1ad508517 100644
--- a/src/lib/evas/canvas/efl_animation.c
+++ b/src/lib/evas/canvas/efl_animation.c
@@ -1,37 +1,13 @@
#include "efl_animation_private.h"
-static void
-_target_del_cb(void *data, const Efl_Event *event EINA_UNUSED)
-{
- Eo *eo_obj = data;
-
- EFL_ANIMATION_DATA_GET(eo_obj, pd);
-
- pd->target = NULL;
-}
-
-EOLIAN static void
-_efl_animation_target_set(Eo *eo_obj,
- Efl_Animation_Data *pd,
- Efl_Canvas_Object *target)
-{
- efl_event_callback_add(target, EFL_EVENT_DEL, _target_del_cb, eo_obj);
-
- pd->target = target;
-}
-
-EOLIAN static Efl_Canvas_Object *
-_efl_animation_target_get(Eo *eo_obj EINA_UNUSED, Efl_Animation_Data *pd)
-{
- return pd->target;
-}
+#define MY_CLASS EFL_ANIMATION_CLASS
EOLIAN static void
_efl_animation_duration_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Data *pd,
- double duration)
+ double sec)
{
- pd->duration = duration;
+ pd->duration = sec;
}
EOLIAN static double
@@ -40,21 +16,14 @@ _efl_animation_duration_get(Eo *eo_obj EINA_UNUSED, Efl_Animation_Data *pd)
return pd->duration;
}
-EOLIAN static double
-_efl_animation_total_duration_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Data *pd)
-{
- return pd->duration;
-}
-
EOLIAN static void
_efl_animation_final_state_keep_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Data *pd,
- Eina_Bool keep_final_state)
+ Eina_Bool keep)
{
- if (pd->keep_final_state == keep_final_state) return;
+ if (pd->keep_final_state == keep) return;
- pd->keep_final_state = !!keep_final_state;
+ pd->keep_final_state = !!keep;
}
EOLIAN static Eina_Bool
@@ -64,27 +33,6 @@ _efl_animation_final_state_keep_get(Eo *eo_obj EINA_UNUSED,
return pd->keep_final_state;
}
-EOLIAN static Efl_Animation_Object *
-_efl_animation_object_create(Eo *eo_obj, Efl_Animation_Data *pd EINA_UNUSED)
-{
- Efl_Animation_Object *anim_obj
- = efl_add(EFL_ANIMATION_OBJECT_CLASS, NULL);
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- efl_animation_object_target_set(anim_obj, target);
-
- Eina_Bool state_keep = efl_animation_final_state_keep_get(eo_obj);
- efl_animation_object_final_state_keep_set(anim_obj, state_keep);
-
- double duration = efl_animation_duration_get(eo_obj);
- efl_animation_object_duration_set(anim_obj, duration);
-
- int repeat_count = efl_animation_repeat_count_get(eo_obj);
- efl_animation_object_repeat_count_set(anim_obj, repeat_count);
-
- return anim_obj;
-}
-
EOLIAN static void
_efl_animation_repeat_mode_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Data *pd,
@@ -121,11 +69,11 @@ _efl_animation_repeat_count_get(Eo *eo_obj EINA_UNUSED, Efl_Animation_Data *pd)
EOLIAN static void
_efl_animation_start_delay_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Data *pd,
- double delay_time)
+ double sec)
{
- if (delay_time < 0.0) return;
+ if (sec < 0.0) return;
- pd->start_delay_time = delay_time;
+ pd->start_delay_time = sec;
}
EOLIAN static double
@@ -150,34 +98,41 @@ _efl_animation_interpolator_get(Eo *eo_obj EINA_UNUSED,
return pd->interpolator;
}
-EOLIAN static Efl_Object *
-_efl_animation_efl_object_constructor(Eo *eo_obj,
- Efl_Animation_Data *pd)
+EOLIAN static double
+_efl_animation_animation_apply(Eo *eo_obj,
+ Efl_Animation_Data *pd EINA_UNUSED,
+ double progress,
+ Efl_Canvas_Object *target EINA_UNUSED)
{
- eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
-
- pd->target = NULL;
-
- pd->duration = 0.0;
-
- pd->start_delay_time = 0.0;
+ Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
+ if (interpolator)
+ progress = efl_interpolator_interpolate(interpolator, progress);
- pd->repeat_count = 0;
-
- pd->interpolator = NULL;
+ return progress;
+}
- pd->keep_final_state = EINA_FALSE;
+EOLIAN static double
+_efl_animation_efl_playable_length_get(Eo *eo_obj, Efl_Animation_Data *pd EINA_UNUSED)
+{
+ if (efl_animation_repeat_count_get(eo_obj) == EFL_ANIMATION_REPEAT_INFINITE)
+ {
+ //TODO: what's correct?
+ return (double)EFL_ANIMATION_REPEAT_INFINITE;
+ }
- return eo_obj;
+ return (efl_animation_duration_get(eo_obj) * (efl_animation_repeat_count_get(eo_obj) + 1));
}
-EOLIAN static void
-_efl_animation_efl_object_destructor(Eo *eo_obj, Efl_Animation_Data *pd)
+EOLIAN static Eina_Bool
+_efl_animation_efl_playable_playable_get(Eo *eo_obj EINA_UNUSED, Efl_Animation_Data *pd EINA_UNUSED)
{
- if (pd->target)
- efl_event_callback_del(pd->target, EFL_EVENT_DEL, _target_del_cb, eo_obj);
+ return EINA_TRUE;
+}
- efl_destructor(efl_super(eo_obj, MY_CLASS));
+EOLIAN static Eina_Bool
+_efl_animation_efl_playable_seekable_get(Eo *eo_obj EINA_UNUSED, Efl_Animation_Data *pd EINA_UNUSED)
+{
+ return EINA_TRUE;
}
#include "efl_animation.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation.eo b/src/lib/evas/canvas/efl_animation.eo
index d8a728d3b9..35f5739f0d 100644
--- a/src/lib/evas/canvas/efl_animation.eo
+++ b/src/lib/evas/canvas/efl_animation.eo
@@ -1,20 +1,9 @@
import efl_animation_types;
-class Efl.Animation (Efl.Object)
+class Efl.Animation (Efl.Object, Efl.Playable)
{
[[Efl animation class]]
- data: Efl_Animation_Data;
methods {
- @property target {
- [[Target object property]]
- set {
- }
- get {
- }
- values {
- target: Efl.Canvas.Object; [[Target object which is applied animation.]]
- }
- }
@property final_state_keep {
[[Keep final state property]]
set {
@@ -22,7 +11,7 @@ class Efl.Animation (Efl.Object)
get {
}
values {
- keep_final_state: bool; [[$true to keep final state, $false otherwise.]]
+ keep: bool; [[$true to keep final state, $false otherwise.]]
}
}
@property duration {
@@ -32,15 +21,7 @@ class Efl.Animation (Efl.Object)
get {
}
values {
- duration: double; [[Duration value.]]
- }
- }
- @property total_duration {
- [[Total duration property]]
- get {
- }
- values {
- total_duration: double; [[Total duration value.]]
+ sec: double; [[Duration value.]]
}
}
@property repeat_mode {
@@ -70,7 +51,7 @@ class Efl.Animation (Efl.Object)
get {
}
values {
- delay_time: double; [[Delay time, in seconds, from when the animation starts until the animation is animated]]
+ sec: double; [[Delay time, in seconds, from when the animation starts until the animation is animated]]
}
}
@property interpolator {
@@ -83,13 +64,17 @@ class Efl.Animation (Efl.Object)
interpolator: Efl.Object; [[Interpolator which indicates interpolation fucntion. Efl_Interpolator is required.]]
}
}
- object_create {
- [[Create object of the animation.]]
- return: Efl.Animation.Object; [[Created object of the animation]]
+ animation_apply {
+ params {
+ @in progress: double;
+ @in target: Efl.Canvas.Object;
+ }
+ return: double; [[Final applied progress.]]
}
}
implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
+ Efl.Playable.length { get; }
+ Efl.Playable.seekable { get; }
+ Efl.Playable.playable { get; }
}
}
diff --git a/src/lib/evas/canvas/efl_animation_alpha.c b/src/lib/evas/canvas/efl_animation_alpha.c
index d077120881..4da7165bac 100644
--- a/src/lib/evas/canvas/efl_animation_alpha.c
+++ b/src/lib/evas/canvas/efl_animation_alpha.c
@@ -1,5 +1,7 @@
#include "efl_animation_alpha_private.h"
+#define MY_CLASS EFL_ANIMATION_ALPHA_CLASS
+
EOLIAN static void
_efl_animation_alpha_alpha_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Alpha_Data *pd,
@@ -22,38 +24,29 @@ _efl_animation_alpha_alpha_get(Eo *eo_obj EINA_UNUSED,
*to_alpha = pd->to.alpha;
}
-EOLIAN static Efl_Animation_Object *
-_efl_animation_alpha_efl_animation_object_create(Eo *eo_obj,
- Efl_Animation_Alpha_Data *pd)
-{
- Efl_Animation_Object_Alpha *anim_obj
- = efl_add(EFL_ANIMATION_OBJECT_ALPHA_CLASS, NULL);
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- efl_animation_object_target_set(anim_obj, target);
-
- Eina_Bool state_keep = efl_animation_final_state_keep_get(eo_obj);
- efl_animation_object_final_state_keep_set(anim_obj, state_keep);
- double duration = efl_animation_duration_get(eo_obj);
- efl_animation_object_duration_set(anim_obj, duration);
-
- double start_delay_time = efl_animation_start_delay_get(eo_obj);
- efl_animation_object_start_delay_set(anim_obj, start_delay_time);
-
- Efl_Animation_Object_Repeat_Mode repeat_mode =
- (Efl_Animation_Object_Repeat_Mode)efl_animation_repeat_mode_get(eo_obj);
- efl_animation_object_repeat_mode_set(anim_obj, repeat_mode);
+EOLIAN static double
+_efl_animation_alpha_efl_animation_animation_apply(Eo *eo_obj,
+ Efl_Animation_Alpha_Data *pd EINA_UNUSED,
+ double progress,
+ Efl_Canvas_Object *target)
+{
+ double from_alpha, to_alpha;
+ int cur_alpha;
+ int i;
- int repeat_count = efl_animation_repeat_count_get(eo_obj);
- efl_animation_object_repeat_count_set(anim_obj, repeat_count);
+ progress = efl_animation_apply(efl_super(eo_obj, MY_CLASS), progress, target);
+ if (!target) return progress;
- Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
- efl_animation_object_interpolator_set(anim_obj, interpolator);
+ efl_animation_alpha_get(eo_obj, &from_alpha, &to_alpha);
+ cur_alpha = (int)(GET_STATUS(from_alpha, to_alpha, progress) * 255);
- efl_animation_object_alpha_set(anim_obj, pd->from.alpha, pd->to.alpha);
+ for (i = 0; i < 4; i++)
+ {
+ efl_gfx_map_color_set(target, i, cur_alpha, cur_alpha, cur_alpha, cur_alpha);
+ }
- return anim_obj;
+ return progress;
}
EOLIAN static Efl_Object *
diff --git a/src/lib/evas/canvas/efl_animation_alpha.eo b/src/lib/evas/canvas/efl_animation_alpha.eo
index d5da203d19..ab10138b13 100644
--- a/src/lib/evas/canvas/efl_animation_alpha.eo
+++ b/src/lib/evas/canvas/efl_animation_alpha.eo
@@ -19,6 +19,6 @@ class Efl.Animation.Alpha (Efl.Animation)
}
implements {
Efl.Object.constructor;
- Efl.Animation.object_create;
+ Efl.Animation.animation_apply;
}
}
diff --git a/src/lib/evas/canvas/efl_animation_alpha_private.h b/src/lib/evas/canvas/efl_animation_alpha_private.h
index 9350fd1d77..d1861df092 100644
--- a/src/lib/evas/canvas/efl_animation_alpha_private.h
+++ b/src/lib/evas/canvas/efl_animation_alpha_private.h
@@ -2,9 +2,7 @@
#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)
+#include "efl_animation_private.h"
#define EFL_ANIMATION_ALPHA_DATA_GET(o, pd) \
Efl_Animation_Alpha_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_ALPHA_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_group.c b/src/lib/evas/canvas/efl_animation_group.c
index 2e657e67f1..0aef2eac51 100644
--- a/src/lib/evas/canvas/efl_animation_group.c
+++ b/src/lib/evas/canvas/efl_animation_group.c
@@ -7,11 +7,7 @@ _efl_animation_group_animation_add(Eo *eo_obj,
{
if (!animation) return;
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- efl_animation_target_set(animation, target);
-
- double duration = efl_animation_duration_get(eo_obj);
+ double duration = efl_animation_duration_get(efl_super(eo_obj, MY_CLASS));
/* if group animation duration is available value, then the duration is
* propagated to its child. */
if (duration != EFL_ANIMATION_GROUP_DURATION_NONE)
@@ -21,6 +17,7 @@ _efl_animation_group_animation_add(Eo *eo_obj,
efl_animation_final_state_keep_set(animation, keep_final_state);
pd->animations = eina_list_append(pd->animations, animation);
+ efl_ref(animation);
}
EOLIAN static void
@@ -28,9 +25,19 @@ _efl_animation_group_animation_del(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Group_Data *pd,
Efl_Animation*animation)
{
+ Eina_List *list;
if (!animation) return;
- pd->animations = eina_list_remove(pd->animations, animation);
+ list = eina_list_data_find_list(pd->animations, animation);
+ if (list)
+ {
+ pd->animations = eina_list_remove_list(pd->animations, list);
+ efl_unref(animation);
+ }
+ else
+ {
+ ERR("Animation(%p) is not in the group animation.");
+ }
}
EOLIAN static Eina_List *
@@ -41,21 +48,6 @@ _efl_animation_group_animations_get(Eo *eo_obj EINA_UNUSED,
}
EOLIAN static void
-_efl_animation_group_efl_animation_target_set(Eo *eo_obj,
- Efl_Animation_Group_Data *pd,
- Efl_Canvas_Object *target)
-{
- Eina_List *l;
- Efl_Animation *anim;
- EINA_LIST_FOREACH(pd->animations, l, anim)
- {
- efl_animation_target_set(anim, target);
- }
-
- efl_animation_target_set(efl_super(eo_obj, MY_CLASS), target);
-}
-
-EOLIAN static void
_efl_animation_group_efl_animation_duration_set(Eo *eo_obj,
Efl_Animation_Group_Data *pd,
double duration)
@@ -114,8 +106,7 @@ _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_set(eo_obj, EFL_ANIMATION_GROUP_DURATION_NONE);
return eo_obj;
}
@@ -126,8 +117,8 @@ _efl_animation_group_efl_object_destructor(Eo *eo_obj,
{
Efl_Animation *anim;
- EINA_LIST_FREE(pd->animations, anim)
- efl_del(anim);
+ EINA_LIST_FREE(pd->animations, anim);
+ efl_unref(anim);
efl_destructor(efl_super(eo_obj, MY_CLASS));
}
diff --git a/src/lib/evas/canvas/efl_animation_group.eo b/src/lib/evas/canvas/efl_animation_group.eo
index a431e39737..ab42604821 100644
--- a/src/lib/evas/canvas/efl_animation_group.eo
+++ b/src/lib/evas/canvas/efl_animation_group.eo
@@ -25,7 +25,6 @@ abstract Efl.Animation.Group (Efl.Animation)
implements {
Efl.Object.constructor;
Efl.Object.destructor;
- 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 0e401614e8..d85d527412 100644
--- a/src/lib/evas/canvas/efl_animation_group_parallel.c
+++ b/src/lib/evas/canvas/efl_animation_group_parallel.c
@@ -1,98 +1,77 @@
#include "efl_animation_group_parallel_private.h"
-EOLIAN static void
-_efl_animation_group_parallel_efl_animation_group_animation_add(Eo *eo_obj,
- Efl_Animation_Group_Parallel_Data *pd EINA_UNUSED,
- Efl_Animation *animation)
-{
- if (!animation) return;
-
- efl_animation_group_animation_add(efl_super(eo_obj, MY_CLASS),
- animation);
-}
+#define MY_CLASS EFL_ANIMATION_GROUP_PARALLEL_CLASS
-EOLIAN static void
-_efl_animation_group_parallel_efl_animation_group_animation_del(Eo *eo_obj,
- Efl_Animation_Group_Parallel_Data *pd EINA_UNUSED,
- Efl_Animation *animation)
+EOLIAN static double
+_efl_animation_group_parallel_efl_animation_animation_apply(Eo *eo_obj,
+ void *_pd EINA_UNUSED,
+ double progress,
+ Efl_Canvas_Object *target)
{
- if (!animation) return;
+ double group_length, group_elapsed_time;
+ double anim_length, anim_duration, anim_start_delay, anim_progress, anim_elapsed_time;
+ int anim_repeated_count;
- efl_animation_group_animation_del(efl_super(eo_obj, MY_CLASS),
- animation);
-}
+ progress = efl_animation_apply(efl_super(eo_obj, MY_CLASS), progress, target);
+ Eina_List *group_anim = efl_animation_group_animations_get(eo_obj);
+ if (!group_anim) return progress;
-EOLIAN static double
-_efl_animation_group_parallel_efl_animation_total_duration_get(Eo *eo_obj,
- Efl_Animation_Group_Parallel_Data *pd EINA_UNUSED)
-{
- Eina_List *animations =
- efl_animation_group_animations_get(eo_obj);
- if (!animations) return 0.0;
+ group_length = efl_playable_length_get(eo_obj);
+ group_elapsed_time = group_length * progress;
- double total_duration = 0.0;
Eina_List *l;
Efl_Animation *anim;
- EINA_LIST_FOREACH(animations, l, anim)
+ EINA_LIST_FOREACH(group_anim, l, anim)
{
- double child_total_duration = efl_animation_total_duration_get(anim);
-
- double start_delay = efl_animation_start_delay_get(anim);
- if (start_delay > 0.0)
- child_total_duration += start_delay;
-
- int child_repeat_count = efl_animation_repeat_count_get(anim);
- if (child_repeat_count > 0)
- child_total_duration *= (child_repeat_count + 1);
-
- if (child_total_duration > total_duration)
- total_duration = child_total_duration;
+ anim_length = efl_playable_length_get(anim);
+ anim_duration = efl_animation_duration_get(anim);
+ anim_start_delay = efl_animation_start_delay_get(anim);
+
+ anim_repeated_count = (int)(group_elapsed_time / anim_length);
+
+ if ((anim_length + anim_start_delay) <= group_elapsed_time)
+ {
+ if (efl_animation_final_state_keep_get(anim) && (!FINAL_STATE_IS_REVERSE(anim)))
+ anim_progress = 1.0;
+ else
+ anim_progress = 0.0;
+ efl_animation_apply(anim, anim_progress, target);
+
+ continue;
+ }
+
+ anim_elapsed_time =
+ MAX(((group_elapsed_time - (anim_length * anim_repeated_count)) - anim_start_delay), 0.0);
+ anim_progress = MIN((anim_elapsed_time / anim_duration), 1.0);
+ if (FINAL_STATE_IS_REVERSE(anim))
+ anim_progress = 1.0 - anim_progress;
+
+ efl_animation_apply(anim, anim_progress, target);
}
- return total_duration;
+
+ return progress;
}
-EOLIAN static Efl_Animation_Object *
-_efl_animation_group_parallel_efl_animation_object_create(Eo *eo_obj,
- Efl_Animation_Group_Parallel_Data *pd EINA_UNUSED)
+EOLIAN static double
+_efl_animation_group_parallel_efl_animation_duration_get(Eo *eo_obj, void *_pd EINA_UNUSED)
{
- Efl_Animation_Object_Group_Parallel *group_anim_obj
- = efl_add(EFL_ANIMATION_OBJECT_GROUP_PARALLEL_CLASS, NULL);
+ double child_total_duration;
+ double total_duration = 0.0;
Eina_List *animations = efl_animation_group_animations_get(eo_obj);
- Eina_List *l;
- Efl_Animation *child_anim;
- Efl_Animation_Object *child_anim_obj;
+ if (!animations) return 0.0;
- EINA_LIST_FOREACH(animations, l, child_anim)
+ Eina_List *l;
+ Efl_Animation *anim;
+ EINA_LIST_FOREACH(animations, l, anim)
{
- child_anim_obj = efl_animation_object_create(child_anim);
- efl_animation_object_group_object_add(group_anim_obj, child_anim_obj);
+ child_total_duration = efl_playable_length_get(anim);
+ child_total_duration += efl_animation_start_delay_get(anim);
+ if (child_total_duration > total_duration)
+ total_duration = child_total_duration;
}
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- efl_animation_object_target_set(group_anim_obj, target);
-
- Eina_Bool state_keep = efl_animation_final_state_keep_get(eo_obj);
- efl_animation_object_final_state_keep_set(group_anim_obj, state_keep);
-
- double duration = efl_animation_duration_get(eo_obj);
- efl_animation_object_duration_set(group_anim_obj, duration);
-
- double start_delay_time = efl_animation_start_delay_get(eo_obj);
- efl_animation_object_start_delay_set(group_anim_obj, start_delay_time);
-
- Efl_Animation_Object_Repeat_Mode repeat_mode =
- (Efl_Animation_Object_Repeat_Mode)efl_animation_repeat_mode_get(eo_obj);
- efl_animation_object_repeat_mode_set(group_anim_obj, repeat_mode);
-
- 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;
+ return total_duration;
}
#include "efl_animation_group_parallel.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_group_parallel.eo b/src/lib/evas/canvas/efl_animation_group_parallel.eo
index ca0beb6478..944e2ad451 100644
--- a/src/lib/evas/canvas/efl_animation_group_parallel.eo
+++ b/src/lib/evas/canvas/efl_animation_group_parallel.eo
@@ -3,13 +3,11 @@ import efl_animation_types;
class Efl.Animation.Group.Parallel (Efl.Animation.Group)
{
[[Efl group parallel animation class]]
- data: Efl_Animation_Group_Parallel_Data;
+ data: null;
methods {
}
implements {
- Efl.Animation.object_create;
- Efl.Animation.Group.animation_add;
- Efl.Animation.Group.animation_del;
- Efl.Animation.total_duration { get; }
+ Efl.Animation.duration { get; }
+ Efl.Animation.animation_apply;
}
}
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 963a8adf74..c3498a7569 100644
--- a/src/lib/evas/canvas/efl_animation_group_parallel_private.h
+++ b/src/lib/evas/canvas/efl_animation_group_parallel_private.h
@@ -2,13 +2,4 @@
#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)
-
-#define EFL_ANIMATION_GROUP_PARALLEL_DATA_GET(o, pd) \
- Efl_Animation_Group_Parallel_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_GROUP_PARALLEL_CLASS)
-
-typedef struct _Efl_Animation_Group_Parallel_Data
-{
-} Efl_Animation_Group_Parallel_Data;
+#include "efl_animation_private.h"
diff --git a/src/lib/evas/canvas/efl_animation_group_sequential.c b/src/lib/evas/canvas/efl_animation_group_sequential.c
index 8db4928ff4..8bc83848a3 100644
--- a/src/lib/evas/canvas/efl_animation_group_sequential.c
+++ b/src/lib/evas/canvas/efl_animation_group_sequential.c
@@ -1,94 +1,81 @@
#include "efl_animation_group_sequential_private.h"
-EOLIAN static void
-_efl_animation_group_sequential_efl_animation_group_animation_add(Eo *eo_obj,
- Efl_Animation_Group_Sequential_Data *pd EINA_UNUSED,
- Efl_Animation *animation)
-{
- if (!animation) return;
-
- efl_animation_group_animation_add(efl_super(eo_obj, MY_CLASS), animation);
-}
+#define MY_CLASS EFL_ANIMATION_GROUP_SEQUENTIAL_CLASS
-EOLIAN static void
-_efl_animation_group_sequential_efl_animation_group_animation_del(Eo *eo_obj,
- Efl_Animation_Group_Sequential_Data *pd EINA_UNUSED,
- Efl_Animation *animation)
+EOLIAN static double
+_efl_animation_group_sequential_efl_animation_animation_apply(Eo *eo_obj,
+ void *_pd EINA_UNUSED,
+ double progress,
+ Efl_Canvas_Object *target)
{
- if (!animation) return;
+ double group_length, group_elapsed_time;
+ double anim_length, anim_duration, anim_start_delay, anim_progress, anim_play_time, anim_position;
+ double total_anim_elapsed_time = 0.0;
+ double temp;
+ int anim_repeated_count;
- efl_animation_group_animation_del(efl_super(eo_obj, MY_CLASS), animation);
-}
+ progress = efl_animation_apply(efl_super(eo_obj, MY_CLASS), progress, target);
+ Eina_List *group_anim = efl_animation_group_animations_get(eo_obj);
+ if (!group_anim) return progress;
-EOLIAN static double
-_efl_animation_group_sequential_efl_animation_total_duration_get(Eo *eo_obj,
- Efl_Animation_Group_Sequential_Data *pd EINA_UNUSED)
-{
- Eina_List *animations = efl_animation_group_animations_get(eo_obj);
- if (!animations) return 0.0;
+ group_length = efl_playable_length_get(eo_obj);
+ group_elapsed_time = group_length * progress;
- double total_duration = 0.0;
Eina_List *l;
Efl_Animation *anim;
- EINA_LIST_FOREACH(animations, l, anim)
+ EINA_LIST_FOREACH(group_anim, l, anim)
{
- double child_total_duration = efl_animation_total_duration_get(anim);
-
- double start_delay = efl_animation_start_delay_get(anim);
- if (start_delay > 0.0)
- child_total_duration += start_delay;
-
- int child_repeat_count = efl_animation_repeat_count_get(anim);
- if (child_repeat_count > 0)
- child_total_duration *= (child_repeat_count + 1);
-
- total_duration += child_total_duration;
+ anim_start_delay = efl_animation_start_delay_get(anim);
+ anim_length = efl_playable_length_get(anim) + anim_start_delay;
+ anim_duration = efl_animation_duration_get(anim);
+
+ //Check whether this animation is playing.
+ temp = total_anim_elapsed_time + anim_length + anim_start_delay;
+ if (temp <= group_elapsed_time)
+ {
+ if (efl_animation_final_state_keep_get(anim) && (!FINAL_STATE_IS_REVERSE(anim)))
+ anim_progress = 1.0;
+ else
+ anim_progress = 0.0;
+ efl_animation_apply(anim, anim_progress, target);
+ total_anim_elapsed_time = temp;
+ continue;
+ }
+
+ anim_play_time = group_elapsed_time - total_anim_elapsed_time - anim_start_delay;
+ //TODO: check infinite repeat
+ anim_repeated_count = (int)(anim_play_time / anim_length);
+ anim_position = MAX(((anim_play_time - anim_duration * anim_repeated_count)), 0.0);
+ anim_progress = MIN((anim_position / anim_duration), 1.0);
+ if (FINAL_STATE_IS_REVERSE(anim))
+ anim_progress = 1.0 - anim_progress;
+ efl_animation_apply(anim, anim_progress, target);
+
+ break;
}
- return total_duration;
+
+ return progress;
}
-EOLIAN static Efl_Animation_Object *
-_efl_animation_group_sequential_efl_animation_object_create(Eo *eo_obj,
- Efl_Animation_Group_Sequential_Data *pd EINA_UNUSED)
+EOLIAN static double
+_efl_animation_group_sequential_efl_animation_duration_get(Eo *eo_obj, void *_pd EINA_UNUSED)
{
- Efl_Animation_Object_Group_Sequential *group_anim_obj
- = efl_add(EFL_ANIMATION_OBJECT_GROUP_SEQUENTIAL_CLASS, NULL);
+ double total_duration = 0.0;
+ double child_total_duration;
Eina_List *animations = efl_animation_group_animations_get(eo_obj);
- Eina_List *l;
- Efl_Animation *child_anim;
- Efl_Animation_Object *child_anim_obj;
+ if (!animations) return 0.0;
- EINA_LIST_FOREACH(animations, l, child_anim)
+ Eina_List *l;
+ Efl_Animation *anim;
+ EINA_LIST_FOREACH(animations, l, anim)
{
- child_anim_obj = efl_animation_object_create(child_anim);
- efl_animation_object_group_object_add(group_anim_obj, child_anim_obj);
+ child_total_duration = efl_playable_length_get(anim);
+ child_total_duration += efl_animation_start_delay_get(anim);
+ total_duration += child_total_duration;
}
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- efl_animation_object_target_set(group_anim_obj, target);
-
- Eina_Bool state_keep = efl_animation_final_state_keep_get(eo_obj);
- efl_animation_object_final_state_keep_set(group_anim_obj, state_keep);
-
- double duration = efl_animation_duration_get(eo_obj);
- efl_animation_object_duration_set(group_anim_obj, duration);
-
- double start_delay_time = efl_animation_start_delay_get(eo_obj);
- efl_animation_object_start_delay_set(group_anim_obj, start_delay_time);
-
- Efl_Animation_Object_Repeat_Mode repeat_mode =
- (Efl_Animation_Object_Repeat_Mode)efl_animation_repeat_mode_get(eo_obj);
- efl_animation_object_repeat_mode_set(group_anim_obj, repeat_mode);
-
- 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;
+ return total_duration;
}
#include "efl_animation_group_sequential.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_group_sequential.eo b/src/lib/evas/canvas/efl_animation_group_sequential.eo
index 650b017b71..2124f23494 100644
--- a/src/lib/evas/canvas/efl_animation_group_sequential.eo
+++ b/src/lib/evas/canvas/efl_animation_group_sequential.eo
@@ -3,13 +3,11 @@ import efl_animation_types;
class Efl.Animation.Group.Sequential (Efl.Animation.Group)
{
[[Efl group sequential animation class]]
- data: Efl_Animation_Group_Sequential_Data;
+ data: null;
methods {
}
implements {
- Efl.Animation.object_create;
- Efl.Animation.Group.animation_add;
- Efl.Animation.Group.animation_del;
- Efl.Animation.total_duration { get; }
+ Efl.Animation.duration { get; }
+ Efl.Animation.animation_apply;
}
}
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 69503e9751..c3498a7569 100644
--- a/src/lib/evas/canvas/efl_animation_group_sequential_private.h
+++ b/src/lib/evas/canvas/efl_animation_group_sequential_private.h
@@ -2,13 +2,4 @@
#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)
-
-#define EFL_ANIMATION_GROUP_SEQUENTIAL_DATA_GET(o, pd) \
- Efl_Animation_Group_Sequential_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_GROUP_SEQUENTIAL_CLASS)
-
-typedef struct _Efl_Animation_Group_Sequential_Data
-{
-} Efl_Animation_Group_Sequential_Data;
+#include "efl_animation_private.h"
diff --git a/src/lib/evas/canvas/efl_animation_object.c b/src/lib/evas/canvas/efl_animation_object.c
deleted file mode 100644
index 87d1988c91..0000000000
--- a/src/lib/evas/canvas/efl_animation_object.c
+++ /dev/null
@@ -1,585 +0,0 @@
-#include "efl_animation_object_private.h"
-
-EOLIAN static void
-_efl_animation_object_auto_del_set(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd,
- Eina_Bool auto_del)
-{
- pd->auto_del = auto_del;
-}
-
-EOLIAN static Eina_Bool
-_efl_animation_object_auto_del_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- return pd->auto_del;
-}
-
-static void
-_target_del_cb(void *data, const Efl_Event *event EINA_UNUSED)
-{
- Eo *eo_obj = data;
-
- EFL_ANIMATION_OBJECT_DATA_GET(eo_obj, pd);
-
- pd->target = NULL;
- efl_animation_object_cancel(eo_obj);
-}
-
-EOLIAN static void
-_efl_animation_object_target_set(Eo *eo_obj,
- Efl_Animation_Object_Data *pd,
- Efl_Canvas_Object *target)
-{
- if (pd->target == target) return;
-
- if (pd->target)
- efl_event_callback_del(pd->target, EFL_EVENT_DEL, _target_del_cb, eo_obj);
-
- efl_event_callback_add(target, EFL_EVENT_DEL, _target_del_cb, eo_obj);
-
- pd->target = target;
-}
-
-EOLIAN static Efl_Canvas_Object *
-_efl_animation_object_target_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- return pd->target;
-}
-
-EOLIAN static void
-_efl_animation_object_duration_set(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd,
- double duration)
-{
- pd->duration = duration;
-}
-
-EOLIAN static double
-_efl_animation_object_duration_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- return pd->duration;
-}
-
-EOLIAN static double
-_efl_animation_object_total_duration_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- return pd->duration;
-}
-
-EOLIAN static void
-_efl_animation_object_repeat_mode_set(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd,
- Efl_Animation_Object_Repeat_Mode mode)
-{
- if ((mode == EFL_ANIMATION_OBJECT_REPEAT_MODE_RESTART) ||
- (mode == EFL_ANIMATION_OBJECT_REPEAT_MODE_REVERSE))
- pd->repeat_mode = mode;
-}
-
-EOLIAN static Efl_Animation_Object_Repeat_Mode
-_efl_animation_object_repeat_mode_get(const Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- return pd->repeat_mode;
-}
-
-EOLIAN static void
-_efl_animation_object_repeat_count_set(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd,
- int count)
-{
- //EFL_ANIMATION_OBJECT_REPEAT_INFINITE repeats animation infinitely
- if ((count < 0) && (count != EFL_ANIMATION_OBJECT_REPEAT_INFINITE)) return;
-
- pd->repeat_count = count;
-}
-
-EOLIAN static int
-_efl_animation_object_repeat_count_get(const Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- return pd->repeat_count;
-}
-
-EOLIAN static void
-_efl_animation_object_start_delay_set(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd,
- double delay_time)
-{
- if (delay_time < 0.0) return;
-
- pd->start_delay_time = delay_time;
-}
-
-EOLIAN static double
-_efl_animation_object_start_delay_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- return pd->start_delay_time;
-}
-
-EOLIAN static void
-_efl_animation_object_interpolator_set(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd,
- Efl_Interpolator *interpolator)
-{
- pd->interpolator = interpolator;
-}
-
-EOLIAN static Efl_Interpolator *
-_efl_animation_object_interpolator_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- return pd->interpolator;
-}
-
-EOLIAN static void
-_efl_animation_object_target_state_save(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- if (!pd->target || !pd->target_state) return;
-
- Evas_Coord x, y, w, h;
- evas_object_geometry_get(pd->target, &x, &y, &w, &h);
-
- pd->target_state->x = x;
- pd->target_state->y = y;
- pd->target_state->w = w;
- pd->target_state->h = h;
-
- int r, g, b, a;
- evas_object_color_get(pd->target, &r, &g, &b, &a);
-
- pd->target_state->r = r;
- pd->target_state->g = g;
- pd->target_state->b = b;
- pd->target_state->a = a;
-
- Evas_Map *map = evas_map_dup(evas_object_map_get(pd->target));
- pd->target_state->map = map;
-
- Eina_Bool enable_map = evas_object_map_enable_get(pd->target);
- pd->target_state->enable_map = enable_map;
-}
-
-EOLIAN static void
-_efl_animation_object_target_state_reset(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- if (!pd->target) return;
-
- if (efl_gfx_map_has(pd->target))
- efl_gfx_map_reset(pd->target);
-
- if (!pd->target_state) return;
-
- Evas_Coord x, y, w, h;
- x = pd->target_state->x;
- y = pd->target_state->y;
- w = pd->target_state->w;
- h = pd->target_state->h;
-
- evas_object_resize(pd->target, w, h);
- evas_object_move(pd->target, x, y);
-
- int r, g, b, a;
- r = pd->target_state->r;
- g = pd->target_state->g;
- b = pd->target_state->b;
- a = pd->target_state->a;
-
- evas_object_color_set(pd->target, r, g, b, a);
-
- Evas_Map *map = pd->target_state->map;
- evas_object_map_set(pd->target, map);
-
- Eina_Bool enable_map = pd->target_state->enable_map;
- evas_object_map_enable_set(pd->target, enable_map);
-}
-
-EOLIAN static void
-_efl_animation_object_target_map_reset(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- if (!pd->target) return;
-
- if (efl_gfx_map_has(pd->target))
- efl_gfx_map_reset(pd->target);
-}
-
-EOLIAN static void
-_efl_animation_object_final_state_keep_set(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd,
- Eina_Bool keep_final_state)
-{
- if (pd->keep_final_state == keep_final_state) return;
-
- pd->keep_final_state = !!keep_final_state;
-}
-
-EOLIAN static Eina_Bool
-_efl_animation_object_final_state_keep_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- return pd->keep_final_state;
-}
-
-static Eina_Bool
-_animator_cb(void *data)
-{
- Eo *eo_obj = data;
- EFL_ANIMATION_OBJECT_DATA_GET(eo_obj, pd);
-
- if (pd->is_paused)
- {
- pd->animator = NULL;
- return ECORE_CALLBACK_CANCEL;
- }
-
- if (pd->is_cancelled) goto end;
-
- double paused_time = pd->paused_time;
-
- double total_duration = efl_animation_object_total_duration_get(eo_obj);
-
- pd->time.current = ecore_loop_time_get();
- double elapsed_time = pd->time.current - pd->time.begin;
-
- if ((elapsed_time - paused_time) > total_duration)
- elapsed_time = total_duration + paused_time;
-
- if (total_duration < 0.0) goto end;
-
- if (total_duration == 0.0)
- {
- ecore_animator_del(pd->animator);
- pd->animator = NULL;
-
- pd->progress = 1.0;
- }
- else
- pd->progress = (elapsed_time - paused_time) / total_duration;
-
- if (!pd->is_direction_forward)
- pd->progress = 1.0 - pd->progress;
-
- //If the direction is changed, then reset the target state.
- if (pd->is_direction_changed)
- {
- pd->is_direction_changed = EINA_FALSE;
- efl_animation_object_target_state_reset(eo_obj);
- }
-
- //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.
- * In this case, incorrect geometry is saved and the target moves to the
- * incorrect position when animation is paused and resumed.
- * As a result, flicking issue happens.
- * To avoid the flicking issue, reset map only during animation. */
- efl_animation_object_target_map_reset(eo_obj);
-
- efl_animation_object_progress_set(eo_obj, pd->progress);
-
- //Not end. Keep going.
- if ((elapsed_time - paused_time) < total_duration)
- return ECORE_CALLBACK_RENEW;
-
-end:
- //Repeat animation
- if ((pd->repeat_count == EFL_ANIMATION_OBJECT_REPEAT_INFINITE) ||
- (pd->remaining_repeat_count > 0))
- {
- if (pd->remaining_repeat_count > 0)
- pd->remaining_repeat_count--;
-
- pd->time.begin = ecore_loop_time_get();
- pd->paused_time = 0.0;
-
- if (pd->repeat_mode == EFL_ANIMATION_OBJECT_REPEAT_MODE_REVERSE)
- {
- pd->is_direction_forward = !pd->is_direction_forward;
- pd->is_direction_changed = EINA_TRUE;
- }
-
- return ECORE_CALLBACK_RENEW;
- }
-
- pd->is_ended = EINA_TRUE;
- pd->animator = NULL;
-
- //Reset the state of the target to the initial state
- if (!pd->keep_final_state)
- efl_animation_object_target_state_reset(eo_obj);
-
- efl_event_callback_call(eo_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, NULL);
-
- if (pd->auto_del) efl_del(eo_obj);
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-static void
-_start(Eo *eo_obj, Efl_Animation_Object_Data *pd)
-{
- double total_duration = efl_animation_object_total_duration_get(eo_obj);
- if (total_duration < 0.0) return;
-
- //Save the current state of the target
- efl_animation_object_target_state_save(eo_obj);
-
- pd->is_started = EINA_TRUE;
- pd->is_cancelled = EINA_FALSE;
- pd->is_ended = EINA_FALSE;
- pd->is_direction_forward = EINA_TRUE;
- pd->is_direction_changed = EINA_FALSE;
-
- pd->paused_time = 0.0;
-
- pd->remaining_repeat_count = pd->repeat_count;
-
- ecore_animator_del(pd->animator);
- pd->animator = NULL;
-
- pd->time.begin = ecore_loop_time_get();
-
- //pre started event is supported within class only (protected event)
- efl_event_callback_call(eo_obj, EFL_ANIMATION_OBJECT_EVENT_PRE_STARTED,
- NULL);
- efl_event_callback_call(eo_obj, EFL_ANIMATION_OBJECT_EVENT_STARTED, NULL);
-
- 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_OBJECT_DATA_GET(eo_obj, pd);
-
- pd->start_delay_timer = NULL;
-
- _start(eo_obj, pd);
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-EOLIAN static void
-_efl_animation_object_start(Eo *eo_obj,
- Efl_Animation_Object_Data *pd)
-{
- if (pd->start_delay_timer) return;
-
- 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_object_cancel(Eo *eo_obj,
- Efl_Animation_Object_Data *pd)
-{
- ecore_timer_del(pd->start_delay_timer);
- pd->start_delay_timer = NULL;
-
- pd->is_cancelled = EINA_TRUE;
- pd->is_ended = EINA_TRUE;
-
- if (pd->animator)
- {
- ecore_animator_del(pd->animator);
- pd->animator = NULL;
-
- //Reset the state of the target to the initial state
- if (!pd->keep_final_state)
- efl_animation_object_target_state_reset(eo_obj);
-
- efl_event_callback_call(eo_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, NULL);
- }
-
- if (pd->auto_del) efl_del(eo_obj);
-}
-
-EOLIAN static void
-_efl_animation_object_progress_set(Eo *eo_obj,
- Efl_Animation_Object_Data *pd EINA_UNUSED,
- double progress)
-{
- if ((progress < 0.0) || (progress > 1.0)) return;
-
- 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_Running_Event_Info event_info;
- event_info.progress = progress;
-
- efl_event_callback_call(eo_obj, EFL_ANIMATION_OBJECT_EVENT_RUNNING,
- &event_info);
-}
-
-EOLIAN static void
-_efl_animation_object_pause(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Data *pd)
-{
- if (!pd->is_started) return;
- if (pd->is_ended) return;
- if (pd->is_paused) return;
-
- pd->is_paused = EINA_TRUE;
-
- if (pd->start_delay_timer) return;
-
- ecore_animator_del(pd->animator);
- pd->animator = NULL;
-
- pd->time.pause_begin = ecore_loop_time_get();
-}
-
-EOLIAN static void
-_efl_animation_object_resume(Eo *eo_obj,
- Efl_Animation_Object_Data *pd)
-{
- if (!pd->is_started) return;
- if (pd->is_ended) return;
- if (!pd->is_paused) return;
-
- pd->is_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);
-
- _animator_cb(eo_obj);
-}
-
-EOLIAN static Efl_Object *
-_efl_animation_object_efl_object_constructor(Eo *eo_obj,
- Efl_Animation_Object_Data *pd)
-{
- eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
-
- pd->time.begin = 0.0;
- pd->time.current = 0.0;
-
- pd->target = NULL;
- pd->target_state = (Target_State *) calloc(1, sizeof(Target_State));
-
- pd->progress = 0.0;
-
- pd->duration = 0.0;
-
- pd->repeat_mode = EFL_ANIMATION_OBJECT_REPEAT_MODE_RESTART;
- pd->repeat_count = 0;
-
- pd->auto_del = EINA_TRUE;
- pd->is_cancelled = EINA_FALSE;
- pd->keep_final_state = EINA_FALSE;
-
- return eo_obj;
-}
-
-EOLIAN static void
-_efl_animation_object_efl_object_destructor(Eo *eo_obj,
- Efl_Animation_Object_Data *pd)
-{
- if (pd->animator)
- {
- ecore_animator_del(pd->animator);
- pd->animator = NULL;
-
- //Reset the state of the target to the initial state
- if (!pd->keep_final_state)
- efl_animation_object_target_state_reset(eo_obj);
-
- efl_event_callback_call(eo_obj, EFL_ANIMATION_OBJECT_EVENT_ENDED, NULL);
- }
-
- if (pd->target)
- efl_event_callback_del(pd->target, EFL_EVENT_DEL, _target_del_cb, eo_obj);
-
- free(pd->target_state);
- pd->target_state = NULL;
-
- efl_destructor(efl_super(eo_obj, MY_CLASS));
-}
-
-/* Internal EO APIs */
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_target_set, EFL_FUNC_CALL(target), Efl_Canvas_Object *target);
-EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_target_get, Efl_Canvas_Object *, NULL);
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_final_state_keep_set, EFL_FUNC_CALL(state_keep), Eina_Bool state_keep);
-EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_final_state_keep_get, Eina_Bool, 0);
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_duration_set, EFL_FUNC_CALL(duration), double duration);
-EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_duration_get, double, 0);
-
-EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_total_duration_get, double, 0);
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_start_delay_set, EFL_FUNC_CALL(delay_time), double delay_time);
-EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_start_delay_get, double, 0);
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_repeat_mode_set, EFL_FUNC_CALL(mode), Efl_Animation_Object_Repeat_Mode mode);
-EOAPI EFL_FUNC_BODY_CONST(efl_animation_object_repeat_mode_get, Efl_Animation_Object_Repeat_Mode, 0);
-
-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);
-
-EOAPI EFL_VOID_FUNC_BODY(efl_animation_object_target_state_save);
-EOAPI EFL_VOID_FUNC_BODY(efl_animation_object_target_state_reset);
-EOAPI EFL_VOID_FUNC_BODY(efl_animation_object_target_map_reset);
-
-#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), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_final_state_keep_set, _efl_animation_object_final_state_keep_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_final_state_keep_get, _efl_animation_object_final_state_keep_get), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_duration_set, _efl_animation_object_duration_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_duration_get, _efl_animation_object_duration_get), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_total_duration_get, _efl_animation_object_total_duration_get), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_start_delay_set, _efl_animation_object_start_delay_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_start_delay_get, _efl_animation_object_start_delay_get), \
- 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_interpolator_set, _efl_animation_object_interpolator_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_interpolator_get, _efl_animation_object_interpolator_get), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_target_state_save, _efl_animation_object_target_state_save), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_target_state_reset, _efl_animation_object_target_state_reset), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_target_map_reset, _efl_animation_object_target_map_reset)
-
-EWAPI const Efl_Event_Description _EFL_ANIMATION_OBJECT_EVENT_PRE_STARTED =
- EFL_EVENT_DESCRIPTION("pre_started");
-
-#include "efl_animation_object.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_object.eo b/src/lib/evas/canvas/efl_animation_object.eo
deleted file mode 100644
index 2543982fa1..0000000000
--- a/src/lib/evas/canvas/efl_animation_object.eo
+++ /dev/null
@@ -1,46 +0,0 @@
-import efl_animation_types;
-
-class Efl.Animation.Object (Efl.Object)
-{
- [[Efl animation object class]]
- data: Efl_Animation_Object_Data;
- methods {
- @property auto_del {
- [[Auto delete property]]
- set {
- }
- get {
- }
- values {
- auto_del: bool; [[$true to delete animation object automatically when animation is finished or animation is cancelled, $false otherwise.]]
- }
- }
- start {
- [[Start animation.]]
- }
- cancel {
- [[Cancel animation.]]
- }
- pause {
- [[Pause animation.]]
- }
- resume {
- [[Resume animation.]]
- }
- progress_set @protected {
- [[Display the moment of animation according to the given progress.]]
- params {
- @in progress: double; [[The value between 0.0 and 1.0 which indicates the progress of the animation]]
- }
- }
- }
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- }
- events {
- started; [[Animation is started.]]
- running; [[Animation is running.]]
- ended; [[Animation is ended.]]
- }
-}
diff --git a/src/lib/evas/canvas/efl_animation_object_alpha.c b/src/lib/evas/canvas/efl_animation_object_alpha.c
deleted file mode 100644
index d98b0590c3..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_alpha.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "efl_animation_object_alpha_private.h"
-
-EOLIAN static void
-_efl_animation_object_alpha_alpha_set(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Alpha_Data *pd,
- double from_alpha,
- double to_alpha)
-{
- pd->from.alpha = from_alpha;
- pd->to.alpha = to_alpha;
-}
-
-EOLIAN static void
-_efl_animation_object_alpha_alpha_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Alpha_Data *pd,
- double *from_alpha,
- double *to_alpha)
-{
- if (from_alpha)
- *from_alpha = pd->from.alpha;
- if (to_alpha)
- *to_alpha = pd->to.alpha;
-}
-
-static void
-_progress_set(Eo *eo_obj, double progress)
-{
- EFL_ANIMATION_OBJECT_ALPHA_DATA_GET(eo_obj, pd);
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (!target) return;
-
- double alpha
- = (pd->from.alpha * (1.0 - progress)) + (pd->to.alpha * progress);
-
- int r[4], g[4], b[4], a[4];
- int i;
- for (i = 0; i < 4; i++)
- efl_gfx_map_color_get(target, i, &r[i], &g[i], &b[i], &a[i]);
-
- for (i = 0; i < 4; i++)
- {
- r[i] = (int)(r[i] * alpha);
- g[i] = (int)(g[i] * alpha);
- b[i] = (int)(b[i] * alpha);
- a[i] = (int)(a[i] * alpha);
- efl_gfx_map_color_set(target, i, r[i], g[i], b[i], a[i]);
- }
-}
-
-EOLIAN static void
-_efl_animation_object_alpha_efl_animation_object_progress_set(Eo *eo_obj,
- Efl_Animation_Object_Alpha_Data *pd EINA_UNUSED,
- double progress)
-{
- if ((progress < 0.0) || (progress > 1.0)) return;
-
- _progress_set(eo_obj, progress);
-
- efl_animation_object_progress_set(efl_super(eo_obj, MY_CLASS), progress);
-}
-
-EOLIAN static Efl_Object *
-_efl_animation_object_alpha_efl_object_constructor(Eo *eo_obj,
- Efl_Animation_Object_Alpha_Data *pd)
-{
- eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
-
- pd->from.alpha = 1.0;
- pd->to.alpha = 1.0;
-
- return eo_obj;
-}
-
-/* Internal EO APIs */
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_alpha_set, EFL_FUNC_CALL(from_alpha, to_alpha), double from_alpha, double to_alpha);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(efl_animation_object_alpha_get, EFL_FUNC_CALL(from_alpha, to_alpha), double *from_alpha, double *to_alpha);
-
-#define EFL_ANIMATION_OBJECT_ALPHA_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_animation_object_alpha_set, _efl_animation_object_alpha_alpha_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_alpha_get, _efl_animation_object_alpha_alpha_get)
-
-#include "efl_animation_object_alpha.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_object_alpha.eo b/src/lib/evas/canvas/efl_animation_object_alpha.eo
deleted file mode 100644
index 8aa28b8c7b..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_alpha.eo
+++ /dev/null
@@ -1,11 +0,0 @@
-import efl_animation_types;
-
-class Efl.Animation.Object.Alpha (Efl.Animation.Object)
-{
- [[Efl alpha animation object class]]
- data: Efl_Animation_Object_Alpha_Data;
- implements {
- Efl.Object.constructor;
- Efl.Animation.Object.progress_set;
- }
-}
diff --git a/src/lib/evas/canvas/efl_animation_object_alpha_private.h b/src/lib/evas/canvas/efl_animation_object_alpha_private.h
deleted file mode 100644
index 799edc1b66..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_alpha_private.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#define EFL_ANIMATION_OBJECT_PROTECTED
-#define EFL_ANIMATION_OBJECT_ALPHA_PROTECTED
-
-#include "evas_common_private.h"
-
-#define MY_CLASS EFL_ANIMATION_OBJECT_ALPHA_CLASS
-#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
-
-#define MY_CLASS EFL_ANIMATION_OBJECT_ALPHA_CLASS
-#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
-
-#define EFL_ANIMATION_OBJECT_ALPHA_DATA_GET(o, pd) \
- Efl_Animation_Object_Alpha_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_OBJECT_ALPHA_CLASS)
-
-typedef struct _Efl_Animation_Object_Alpha_Property
-{
- double alpha;
-} Efl_Animation_Object_Alpha_Property;
-
-typedef struct _Efl_Animation_Object_Alpha_Data
-{
- Efl_Animation_Object_Alpha_Property from;
- Efl_Animation_Object_Alpha_Property to;
-} Efl_Animation_Object_Alpha_Data;
diff --git a/src/lib/evas/canvas/efl_animation_object_group.c b/src/lib/evas/canvas/efl_animation_object_group.c
deleted file mode 100644
index 092ae02809..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_group.c
+++ /dev/null
@@ -1,200 +0,0 @@
-#include "efl_animation_object_group_private.h"
-
-EOLIAN static void
-_efl_animation_object_group_object_add(Eo *eo_obj,
- Efl_Animation_Object_Group_Data *pd,
- Efl_Animation_Object *anim_obj)
-{
- if (!anim_obj) return;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- efl_animation_object_target_set(anim_obj, target);
-
- double duration = efl_animation_object_duration_get(eo_obj);
- /* if group animation object duration is available value, then the duration
- * is propagated to its child. */
- if (duration != EFL_ANIMATION_OBJECT_GROUP_DURATION_NONE)
- efl_animation_object_duration_set(anim_obj, duration);
-
- Eina_Bool state_keep = efl_animation_object_final_state_keep_get(eo_obj);
- efl_animation_object_final_state_keep_set(anim_obj, state_keep);
-
- pd->anim_objs = eina_list_append(pd->anim_objs, anim_obj);
-}
-
-EOLIAN static void
-_efl_animation_object_group_object_del(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Group_Data *pd,
- Efl_Animation_Object *anim_obj)
-{
- if (!anim_obj) return;
-
- pd->anim_objs = eina_list_remove(pd->anim_objs, anim_obj);
-}
-
-EOLIAN static Eina_List *
-_efl_animation_object_group_objects_get(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Group_Data *pd)
-{
- return pd->anim_objs;
-}
-
-EOLIAN static void
-_efl_animation_object_group_efl_animation_object_target_set(Eo *eo_obj,
- Efl_Animation_Object_Group_Data *pd,
- Efl_Canvas_Object *target)
-{
- Eina_List *l;
- Efl_Animation_Object *anim_obj;
-
- EINA_LIST_FOREACH(pd->anim_objs, l, anim_obj)
- {
- efl_animation_object_target_set(anim_obj, target);
- }
-
- efl_animation_object_target_set(efl_super(eo_obj, MY_CLASS), target);
-}
-
-EOLIAN static void
-_efl_animation_object_group_efl_animation_object_duration_set(Eo *eo_obj,
- Efl_Animation_Object_Group_Data *pd,
- double duration)
-{
- if (duration == EFL_ANIMATION_OBJECT_GROUP_DURATION_NONE) goto end;
-
- if (duration < 0.0) return;
-
- Eina_List *l;
- Efl_Animation_Object *anim_obj;
-
- EINA_LIST_FOREACH(pd->anim_objs, l, anim_obj)
- {
- efl_animation_object_duration_set(anim_obj, duration);
- }
-
-end:
- efl_animation_object_duration_set(efl_super(eo_obj, MY_CLASS), duration);
-}
-
-EOLIAN static void
-_efl_animation_object_group_efl_animation_object_final_state_keep_set(Eo *eo_obj,
- Efl_Animation_Object_Group_Data *pd,
- Eina_Bool state_keep)
-{
- Eina_List *l;
- Efl_Animation_Object *anim_obj;
-
- EINA_LIST_FOREACH(pd->anim_objs, l, anim_obj)
- {
- efl_animation_object_final_state_keep_set(anim_obj, state_keep);
- }
-
- efl_animation_object_final_state_keep_set(efl_super(eo_obj, MY_CLASS),
- 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)
-{
- 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)
-{
- eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
-
- pd->anim_objs = NULL;
-
- //group animation object does not affect its child duration by default.
- efl_animation_object_duration_set(efl_super(eo_obj, MY_CLASS),
- EFL_ANIMATION_OBJECT_GROUP_DURATION_NONE);
-
- return eo_obj;
-}
-
-EOLIAN static void
-_efl_animation_object_group_efl_object_destructor(Eo *eo_obj,
- Efl_Animation_Object_Group_Data *pd)
-{
- Efl_Animation_Object *anim_obj;
-
- EINA_LIST_FREE(pd->anim_objs, anim_obj)
- efl_del(anim_obj);
-
- efl_destructor(efl_super(eo_obj, MY_CLASS));
-}
-
-EOLIAN static void
-_efl_animation_object_group_efl_animation_object_target_state_save(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Group_Data *pd)
-{
- Eina_List *l;
- Efl_Animation_Object *anim_obj;
-
- EINA_LIST_FOREACH(pd->anim_objs, l, anim_obj)
- {
- efl_animation_object_target_state_save(anim_obj);
- }
-}
-
-EOLIAN static void
-_efl_animation_object_group_efl_animation_object_target_state_reset(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Group_Data *pd)
-{
- Eina_List *l;
- Efl_Animation_Object *anim_obj;
-
- EINA_LIST_FOREACH(pd->anim_objs, l, anim_obj)
- {
- efl_animation_object_target_state_reset(anim_obj);
- }
-}
-
-EOLIAN static void
-_efl_animation_object_group_efl_animation_object_target_map_reset(Eo *eo_obj EINA_UNUSED,
- Efl_Animation_Object_Group_Data *pd)
-{
- Eina_List *l;
- Efl_Animation_Object *anim_obj;
-
- EINA_LIST_FOREACH(pd->anim_objs, l, anim_obj)
- {
- efl_animation_object_target_map_reset(anim_obj);
- }
-}
-
-/* Internal EO APIs */
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_group_object_add, EFL_FUNC_CALL(anim_obj), Efl_Animation_Object *anim_obj);
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_group_object_del, EFL_FUNC_CALL(anim_obj), Efl_Animation_Object *anim_obj);
-
-EOAPI EFL_FUNC_BODY(efl_animation_object_group_objects_get, Eina_List *, NULL);
-
-#define EFL_ANIMATION_OBJECT_GROUP_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_animation_object_group_object_add, _efl_animation_object_group_object_add), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_group_object_del, _efl_animation_object_group_object_del), \
- 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_interpolator_set, _efl_animation_object_group_efl_animation_object_interpolator_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_target_state_save, _efl_animation_object_group_efl_animation_object_target_state_save), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_target_state_reset, _efl_animation_object_group_efl_animation_object_target_state_reset), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_target_map_reset, _efl_animation_object_group_efl_animation_object_target_map_reset)
-
-#include "efl_animation_object_group.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_object_group.eo b/src/lib/evas/canvas/efl_animation_object_group.eo
deleted file mode 100644
index 1ad80394f0..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_group.eo
+++ /dev/null
@@ -1,11 +0,0 @@
-import efl_animation_types;
-
-abstract Efl.Animation.Object.Group (Efl.Animation.Object)
-{
- [[Efl group animation object abstract class]]
- data: Efl_Animation_Object_Group_Data;
- implements {
- Efl.Object.constructor;
- Efl.Object.destructor;
- }
-}
diff --git a/src/lib/evas/canvas/efl_animation_object_group_parallel.c b/src/lib/evas/canvas/efl_animation_object_group_parallel.c
deleted file mode 100644
index 3c9d928d7b..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_group_parallel.c
+++ /dev/null
@@ -1,256 +0,0 @@
-#include "efl_animation_object_group_parallel_private.h"
-
-/* Add member object data and append the data to the member object data list.
- * The member object data contains the repeated count of the member object.
- */
-static void
-_member_anim_obj_data_add(Efl_Animation_Object_Group_Parallel_Data *pd,
- Efl_Animation_Object *anim_obj,
- int repeated_count)
-{
- Member_Object_Data *member_anim_obj_data =
- calloc(1, sizeof(Member_Object_Data));
-
- if (!member_anim_obj_data) return;
-
- member_anim_obj_data->anim_obj = anim_obj;
- member_anim_obj_data->repeated_count = repeated_count;
-
- pd->member_anim_obj_data_list =
- eina_list_append(pd->member_anim_obj_data_list, member_anim_obj_data);
-}
-
-/* Find the member object data which contains the repeated count of the member
- * object. */
-static Member_Object_Data *
-_member_anim_obj_data_find(Efl_Animation_Object_Group_Parallel_Data *pd,
- Efl_Animation_Object *anim_obj)
-{
- Eina_List *l;
- Member_Object_Data *member_anim_obj_data = NULL;
- EINA_LIST_FOREACH(pd->member_anim_obj_data_list, l, member_anim_obj_data)
- {
- if (member_anim_obj_data->anim_obj == anim_obj)
- break;
- }
-
- return member_anim_obj_data;
-}
-
-/* Delete member object data and remove the data from the member object data
- * list.
- * The member object data contains the repeated count of the member object.
- */
-static void
-_member_anim_obj_data_del(Efl_Animation_Object_Group_Parallel_Data *pd,
- Efl_Animation_Object *anim_obj)
-{
- Member_Object_Data *member_anim_obj_data = _member_anim_obj_data_find(pd, anim_obj);
- if (member_anim_obj_data)
- {
- pd->member_anim_obj_data_list =
- eina_list_remove(pd->member_anim_obj_data_list, member_anim_obj_data);
- free(member_anim_obj_data);
- }
-}
-
-EOLIAN static void
-_efl_animation_object_group_parallel_efl_animation_object_group_object_add(Eo *eo_obj,
- Efl_Animation_Object_Group_Parallel_Data *pd,
- Efl_Animation_Object *anim_obj)
-{
- if (!anim_obj) return;
-
- efl_animation_object_group_object_add(efl_super(eo_obj, MY_CLASS), anim_obj);
-
- /* Add member object data and append the data to the member object data
- * list. */
- _member_anim_obj_data_add(pd, anim_obj, 0);
-}
-
-EOLIAN static void
-_efl_animation_object_group_parallel_efl_animation_object_group_object_del(Eo *eo_obj,
- Efl_Animation_Object_Group_Parallel_Data *pd EINA_UNUSED,
- Efl_Animation_Object *anim_obj)
-{
- if (!anim_obj) return;
-
- efl_animation_object_group_object_del(efl_super(eo_obj, MY_CLASS), anim_obj);
-
- /* Delete member object data and remove the data from the member object
- * data list. */
- _member_anim_obj_data_del(pd, anim_obj);
-}
-
-EOLIAN static double
-_efl_animation_object_group_parallel_efl_animation_object_total_duration_get(Eo *eo_obj,
- Efl_Animation_Object_Group_Parallel_Data *pd EINA_UNUSED)
-{
- Eina_List *anim_objs = efl_animation_object_group_objects_get(eo_obj);
- if (!anim_objs) return 0.0;
-
- double total_duration = 0.0;
- Eina_List *l;
- Efl_Animation *anim_obj;
- EINA_LIST_FOREACH(anim_objs, l, anim_obj)
- {
- double child_total_duration =
- efl_animation_object_total_duration_get(anim_obj);
-
- double start_delay = efl_animation_object_start_delay_get(anim_obj);
- if (start_delay > 0.0)
- child_total_duration += start_delay;
-
- int child_repeat_count =
- efl_animation_object_repeat_count_get(anim_obj);
- if (child_repeat_count > 0)
- child_total_duration *= (child_repeat_count + 1);
-
- if (child_total_duration > total_duration)
- total_duration = child_total_duration;
- }
- return total_duration;
-}
-
-//Set how many times the given object has been repeated.
-static void
-_repeated_count_set(Efl_Animation_Object_Group_Parallel_Data *pd,
- Efl_Animation_Object *anim_obj,
- int repeated_count)
-{
-
- Member_Object_Data *member_anim_obj_data =
- _member_anim_obj_data_find(pd, anim_obj);
- if (!member_anim_obj_data) return;
-
- member_anim_obj_data->repeated_count = repeated_count;
-}
-
-//Get how many times the given object has been repeated.
-static int
-_repeated_count_get(Efl_Animation_Object_Group_Parallel_Data *pd,
- Efl_Animation_Object *anim_obj)
-{
- Member_Object_Data *member_anim_obj_data =
- _member_anim_obj_data_find(pd, anim_obj);
- if (!member_anim_obj_data) return 0;
-
- return member_anim_obj_data->repeated_count;
-}
-
-EOLIAN static void
-_efl_animation_object_group_parallel_efl_animation_object_progress_set(Eo *eo_obj,
- Efl_Animation_Object_Group_Parallel_Data *pd,
- double progress)
-{
- if ((progress < 0.0) || (progress > 1.0)) return;
-
- Eina_List *anim_objs = efl_animation_object_group_objects_get(eo_obj);
- if (!anim_objs) return;
-
- double group_total_duration =
- efl_animation_object_total_duration_get(eo_obj);
-
- double elapsed_time = progress * group_total_duration;
-
- Eina_List *l;
- Efl_Animation_Object *anim_obj;
- EINA_LIST_FOREACH(anim_objs, l, anim_obj)
- {
- double total_duration =
- efl_animation_object_total_duration_get(anim_obj);
- double start_delay = efl_animation_object_start_delay_get(anim_obj);
- double anim_obj_progress;
-
- Eina_Bool start_repeat = EINA_FALSE;
-
- if (total_duration == 0.0)
- anim_obj_progress = 1.0;
- else
- {
- double elapsed_time_without_delay;
-
- //If object is repeated, then recalculate progress.
- int repeated_count = _repeated_count_get(pd, anim_obj);
- if (repeated_count > 0)
- elapsed_time_without_delay =
- (elapsed_time - ((total_duration + start_delay) * repeated_count)) - start_delay;
- else
- elapsed_time_without_delay = elapsed_time - start_delay;
-
- //Object should not start to wait for start delay time.
- if (elapsed_time_without_delay < 0.0) continue;
-
- anim_obj_progress = elapsed_time_without_delay / total_duration;
-
- if (anim_obj_progress > 1.0)
- anim_obj_progress = 1.0;
-
- //Animation has been finished.
- if (anim_obj_progress == 1.0)
- {
- /* If object is finished and it should be repeated, then
- * increate the repeated count to recalculate progress. */
- int repeat_count =
- efl_animation_object_repeat_count_get(anim_obj);
- if (repeat_count > 0)
- {
- repeated_count = _repeated_count_get(pd, anim_obj);
- if (repeated_count < repeat_count)
- {
- repeated_count++;
- _repeated_count_set(pd, anim_obj, repeated_count);
-
- start_repeat = EINA_TRUE;
- }
- }
- }
- }
-
- /* If object is repeated with reverse mode, then the progress value
- * should be modified as (1.0 - progress). */
- Efl_Animation_Object_Repeat_Mode repeat_mode
- = efl_animation_object_repeat_mode_get(anim_obj);
- if (repeat_mode == EFL_ANIMATION_OBJECT_REPEAT_MODE_REVERSE)
- {
- int repeated_count = _repeated_count_get(pd, anim_obj);
- if (repeated_count > 0)
- {
- if ((((repeated_count % 2) == 1) && (!start_repeat)) ||
- (((repeated_count % 2) == 0) && (start_repeat)))
- anim_obj_progress = 1.0 - anim_obj_progress;
- }
- }
-
- //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);
- }
-
- efl_animation_object_progress_set(efl_super(eo_obj, MY_CLASS), progress);
-}
-
-/* Internal EO APIs */
-
-#define EFL_ANIMATION_OBJECT_GROUP_PARALLEL_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_animation_object_group_object_add, _efl_animation_object_group_parallel_efl_animation_object_group_object_add), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_group_object_del, _efl_animation_object_group_parallel_efl_animation_object_group_object_del), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_total_duration_get, _efl_animation_object_group_parallel_efl_animation_object_total_duration_get)
-
-#include "efl_animation_object_group_parallel.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_object_group_parallel.eo b/src/lib/evas/canvas/efl_animation_object_group_parallel.eo
deleted file mode 100644
index 50609f8344..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_group_parallel.eo
+++ /dev/null
@@ -1,12 +0,0 @@
-import efl_animation_types;
-
-class Efl.Animation.Object.Group.Parallel (Efl.Animation.Object.Group)
-{
- [[Efl group parallel animation object class]]
- data: Efl_Animation_Object_Group_Parallel_Data;
- methods {
- }
- implements {
- Efl.Animation.Object.progress_set;
- }
-}
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
deleted file mode 100644
index e0026ec6f4..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_group_parallel_private.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#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)
-
-#define EFL_ANIMATION_OBJECT_GROUP_PARALLEL_DATA_GET(o, pd) \
- Efl_Animation_Object_Group_Parallel_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_OBJECT_GROUP_PARALLEL_CLASS)
-
-typedef struct _Member_Object_Data
-{
- Efl_Animation_Object *anim_obj;
-
- int repeated_count; /* How many times object has been
- * repeated. */
-} Member_Object_Data;
-
-typedef struct _Efl_Animation_Object_Group_Parallel_Data
-{
- Eina_List *member_anim_obj_data_list; //List of Member_Object_Data
-} Efl_Animation_Object_Group_Parallel_Data;
diff --git a/src/lib/evas/canvas/efl_animation_object_group_private.h b/src/lib/evas/canvas/efl_animation_object_group_private.h
deleted file mode 100644
index 5342e2c22f..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_group_private.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#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)
-
-#define EFL_ANIMATION_OBJECT_GROUP_DATA_GET(o, pd) \
- Efl_Animation_Object_Group_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_OBJECT_GROUP_CLASS)
-
-typedef struct _Efl_Animation_Object_Group_Data
-{
- Eina_List *anim_objs;
-} Efl_Animation_Object_Group_Data;
diff --git a/src/lib/evas/canvas/efl_animation_object_group_sequential.c b/src/lib/evas/canvas/efl_animation_object_group_sequential.c
deleted file mode 100644
index bc171a830d..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_group_sequential.c
+++ /dev/null
@@ -1,269 +0,0 @@
-#include "efl_animation_object_group_sequential_private.h"
-
-/* Add member object data and append the data to the member object data list.
- * The member object data contains the repeated count of the member object.
- */
-static void
-_member_anim_obj_data_add(Efl_Animation_Object_Group_Sequential_Data *pd,
- Efl_Animation_Object *anim_obj,
- int repeated_count)
-{
- Member_Object_Data *member_anim_obj_data =
- calloc(1, sizeof(Member_Object_Data));
-
- if (!member_anim_obj_data) return;
-
- member_anim_obj_data->anim_obj = anim_obj;
- member_anim_obj_data->repeated_count = repeated_count;
-
- pd->member_anim_obj_data_list =
- eina_list_append(pd->member_anim_obj_data_list, member_anim_obj_data);
-}
-
-/* Find the member object data which contains the repeated count of the member
- * object. */
-static Member_Object_Data *
-_member_anim_obj_data_find(Efl_Animation_Object_Group_Sequential_Data *pd,
- Efl_Animation_Object *anim_obj)
-{
- Eina_List *l;
- Member_Object_Data *member_anim_obj_data = NULL;
- EINA_LIST_FOREACH(pd->member_anim_obj_data_list, l, member_anim_obj_data)
- {
- if (member_anim_obj_data->anim_obj == anim_obj)
- break;
- }
-
- return member_anim_obj_data;
-}
-
-/* Delete member object data and remove the data from the member object data
- * list.
- * The member object data contains the repeated count of the member object.
- */
-static void
-_member_anim_obj_data_del(Efl_Animation_Object_Group_Sequential_Data *pd,
- Efl_Animation_Object *anim_obj)
-{
- Member_Object_Data *member_anim_obj_data =
- _member_anim_obj_data_find(pd, anim_obj);
- if (member_anim_obj_data)
- {
- pd->member_anim_obj_data_list =
- eina_list_remove(pd->member_anim_obj_data_list,
- member_anim_obj_data);
- free(member_anim_obj_data);
- }
-}
-
-EOLIAN static void
-_efl_animation_object_group_sequential_efl_animation_object_group_object_add(Eo *eo_obj,
- Efl_Animation_Object_Group_Sequential_Data *pd EINA_UNUSED,
- Efl_Animation_Object *anim_obj)
-{
- if (!anim_obj) return;
-
- efl_animation_object_group_object_add(efl_super(eo_obj, MY_CLASS), anim_obj);
-
- /* Add member object data and append the data to the member object data
- * list. */
- _member_anim_obj_data_add(pd, anim_obj, 0);
-}
-
-EOLIAN static void
-_efl_animation_object_group_sequential_efl_animation_object_group_object_del(Eo *eo_obj,
- Efl_Animation_Object_Group_Sequential_Data *pd EINA_UNUSED,
- Efl_Animation_Object *anim_obj)
-{
- if (!anim_obj) return;
-
- efl_animation_object_group_object_del(efl_super(eo_obj, MY_CLASS), anim_obj);
-
- /* Delete member object data and remove the data from the member object
- * data list. */
- _member_anim_obj_data_del(pd, anim_obj);
-}
-
-EOLIAN static double
-_efl_animation_object_group_sequential_efl_animation_object_total_duration_get(Eo *eo_obj,
- Efl_Animation_Object_Group_Sequential_Data *pd EINA_UNUSED)
-{
- Eina_List *anim_objs = efl_animation_object_group_objects_get(eo_obj);
- if (!anim_objs) return 0.0;
-
- double total_duration = 0.0;
- Eina_List *l;
- Efl_Animation *anim_obj;
- EINA_LIST_FOREACH(anim_objs, l, anim_obj)
- {
- double child_total_duration =
- efl_animation_object_total_duration_get(anim_obj);
-
- double start_delay = efl_animation_object_start_delay_get(anim_obj);
- if (start_delay > 0.0)
- child_total_duration += start_delay;
-
- int child_repeat_count =
- efl_animation_object_repeat_count_get(anim_obj);
- if (child_repeat_count > 0)
- child_total_duration *= (child_repeat_count + 1);
-
- total_duration += child_total_duration;
- }
- return total_duration;
-}
-
-//Set how many times the given object has been repeated.
-static void
-_repeated_count_set(Efl_Animation_Object_Group_Sequential_Data *pd,
- Efl_Animation_Object *anim_obj,
- int repeated_count)
-{
-
- Member_Object_Data *member_anim_obj_data = _member_anim_obj_data_find(pd, anim_obj);
- if (!member_anim_obj_data) return;
-
- member_anim_obj_data->repeated_count = repeated_count;
-}
-
-//Get how many times the given object has been repeated.
-static int
-_repeated_count_get(Efl_Animation_Object_Group_Sequential_Data *pd,
- Efl_Animation_Object *anim_obj)
-{
- Member_Object_Data *member_anim_obj_data =
- _member_anim_obj_data_find(pd, anim_obj);
- if (!member_anim_obj_data) return 0;
-
- return member_anim_obj_data->repeated_count;
-}
-
-EOLIAN static void
-_efl_animation_object_group_sequential_efl_animation_object_progress_set(Eo *eo_obj,
- Efl_Animation_Object_Group_Sequential_Data *pd EINA_UNUSED,
- double progress)
-{
- if ((progress < 0.0) || (progress > 1.0)) return;
-
- Eina_List *anim_objs = efl_animation_object_group_objects_get(eo_obj);
- if (!anim_objs) return;
-
- double group_total_duration =
- efl_animation_object_total_duration_get(eo_obj);
-
- double elapsed_time = progress * group_total_duration;
-
- double sum_prev_total_duration = 0.0;
-
- Eina_List *l;
- Efl_Animation_Object *anim_obj;
- EINA_LIST_FOREACH(anim_objs, l, anim_obj)
- {
- //Current animation object does not start
- if (sum_prev_total_duration > elapsed_time) break;
-
- //Sum the current total duration
- double total_duration =
- efl_animation_object_total_duration_get(anim_obj);
- double start_delay = efl_animation_object_start_delay_get(anim_obj);
- double anim_obj_progress;
-
- Eina_Bool start_repeat = EINA_FALSE;
-
- if (total_duration == 0.0)
- anim_obj_progress = 1.0;
- else
- {
- //If object is repeated, then recalculate progress.
- int repeated_count = _repeated_count_get(pd, anim_obj);
- if (repeated_count > 0)
- sum_prev_total_duration +=
- ((total_duration + start_delay) * repeated_count);
-
- double elapsed_time_without_delay =
- elapsed_time - sum_prev_total_duration - start_delay;
-
- //Object should not start to wait for start delay time.
- if (elapsed_time_without_delay < 0.0) break;
-
- anim_obj_progress = elapsed_time_without_delay / total_duration;
-
- if (anim_obj_progress > 1.0)
- anim_obj_progress = 1.0;
-
- //Animation has been finished.
- if (anim_obj_progress == 1.0)
- {
- /* If object is finished and it should be repeated, then
- * increate the repeated count to recalculate progress. */
- int repeat_count =
- efl_animation_object_repeat_count_get(anim_obj);
- if (repeat_count > 0)
- {
- repeated_count = _repeated_count_get(pd, anim_obj);
- if (repeated_count < repeat_count)
- {
- repeated_count++;
- _repeated_count_set(pd, anim_obj, repeated_count);
-
- start_repeat = EINA_TRUE;
- }
- }
- }
- }
-
- /* Update the sum of the previous objects' total durations and start
- * delays */
- sum_prev_total_duration += (total_duration + start_delay);
-
- if ((anim_obj_progress == 1.0) && (!start_repeat) &&
- (!efl_animation_object_final_state_keep_get(anim_obj)))
- continue;
-
- /* If object is repeated with reverse mode, then the progress value
- * should be modified as (1.0 - progress). */
- Efl_Animation_Object_Repeat_Mode repeat_mode
- = efl_animation_object_repeat_mode_get(anim_obj);
- if (repeat_mode == EFL_ANIMATION_OBJECT_REPEAT_MODE_REVERSE)
- {
- int repeated_count = _repeated_count_get(pd, anim_obj);
- if (repeated_count > 0)
- {
- if ((((repeated_count % 2) == 1) && (!start_repeat)) ||
- (((repeated_count % 2) == 0) && (start_repeat)))
- anim_obj_progress = 1.0 - anim_obj_progress;
- }
- }
-
- //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);
- }
-
- efl_animation_object_progress_set(efl_super(eo_obj, MY_CLASS), progress);
-}
-
-/* Internal EO APIs */
-
-#define EFL_ANIMATION_OBJECT_GROUP_SEQUENTIAL_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_animation_object_group_object_add, _efl_animation_object_group_sequential_efl_animation_object_group_object_add), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_group_object_del, _efl_animation_object_group_sequential_efl_animation_object_group_object_del), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_total_duration_get, _efl_animation_object_group_sequential_efl_animation_object_total_duration_get)
-
-#include "efl_animation_object_group_sequential.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_object_group_sequential.eo b/src/lib/evas/canvas/efl_animation_object_group_sequential.eo
deleted file mode 100644
index d32841bfb9..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_group_sequential.eo
+++ /dev/null
@@ -1,12 +0,0 @@
-import efl_animation_types;
-
-class Efl.Animation.Object.Group.Sequential (Efl.Animation.Object.Group)
-{
- [[Efl group sequential animation object class]]
- data: Efl_Animation_Object_Group_Sequential_Data;
- methods {
- }
- implements {
- Efl.Animation.Object.progress_set;
- }
-}
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
deleted file mode 100644
index 2c8515a68c..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_group_sequential_private.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#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)
-
-#define EFL_ANIMATION_OBJECT_GROUP_SEQUENTIAL_DATA_GET(o, pd) \
- Efl_Animation_Object_Group_Sequential_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_OBJECT_GROUP_SEQUENTIAL_CLASS)
-
-typedef struct _Member_Object_Data
-{
- Efl_Animation_Object *anim_obj;
-
- int repeated_count; /* How many times object has been
- * repeated. */
-} Member_Object_Data;
-
-typedef struct _Efl_Animation_Object_Group_Sequential_Data
-{
- Eina_List *member_anim_obj_data_list; //List of Member_Object_Data
-} Efl_Animation_Object_Group_Sequential_Data;
diff --git a/src/lib/evas/canvas/efl_animation_object_private.h b/src/lib/evas/canvas/efl_animation_object_private.h
deleted file mode 100644
index 27e9d13ea7..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_private.h
+++ /dev/null
@@ -1,56 +0,0 @@
-#define EFL_ANIMATION_OBJECT_PROTECTED
-
-#include "evas_common_private.h"
-#include <Ecore.h>
-
-#define MY_CLASS EFL_ANIMATION_OBJECT_CLASS
-#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
-
-typedef struct _Target_State
-{
- Evas_Coord x, y, w, h;
- int r, g, b, a;
-
- Evas_Map *map;
- Eina_Bool enable_map : 1;
-} Target_State;
-
-typedef struct _Efl_Animation_Object_Data
-{
- Ecore_Animator *animator;
-
- Ecore_Timer *start_delay_timer;
- double start_delay_time;
-
- struct {
- double begin;
- double current;
- double pause_begin;
- } time;
-
- Efl_Canvas_Object *target;
- Target_State *target_state;
-
- double progress;
-
- double duration;
- double paused_time;
-
- Efl_Animation_Object_Repeat_Mode repeat_mode;
- int repeat_count;
- int remaining_repeat_count;
-
- Efl_Interpolator *interpolator;
-
- Eina_Bool auto_del : 1;
- Eina_Bool is_started : 1;
- Eina_Bool is_cancelled : 1;
- Eina_Bool is_ended : 1;
- Eina_Bool is_paused : 1;
- Eina_Bool keep_final_state : 1;
- Eina_Bool is_direction_forward : 1;
- Eina_Bool is_direction_changed : 1;
-} Efl_Animation_Object_Data;
-
-#define EFL_ANIMATION_OBJECT_DATA_GET(o, pd) \
- Efl_Animation_Object_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_OBJECT_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_object_rotate.c b/src/lib/evas/canvas/efl_animation_object_rotate.c
deleted file mode 100644
index 65972d090d..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_rotate.c
+++ /dev/null
@@ -1,243 +0,0 @@
-#include "efl_animation_object_rotate_private.h"
-
-EOLIAN static void
-_efl_animation_object_rotate_rotate_set(Eo *eo_obj,
- Efl_Animation_Object_Rotate_Data *pd,
- double from_degree,
- double to_degree,
- Efl_Canvas_Object *pivot,
- double cx,
- double cy)
-{
- pd->from.degree = from_degree;
- pd->to.degree = to_degree;
-
- pd->rel_pivot.obj = pivot;
- pd->rel_pivot.cx = cx;
- pd->rel_pivot.cy = cy;
-
- //Update absolute pivot based on relative pivot
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- if (pivot)
- evas_object_geometry_get(pivot, &x, &y, &w, &h);
- else
- {
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
- }
-
- pd->abs_pivot.cx = x + (w * cx);
- pd->abs_pivot.cy = y + (h * cy);
-
- pd->use_rel_pivot = EINA_TRUE;
-}
-
-EOLIAN static void
-_efl_animation_object_rotate_rotate_get(Eo *eo_obj,
- Efl_Animation_Object_Rotate_Data *pd,
- double *from_degree,
- double *to_degree,
- Efl_Canvas_Object **pivot,
- double *cx,
- double *cy)
-{
- //Update relative pivot based on absolute pivot
- if (!pd->use_rel_pivot)
- {
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
-
- if (w != 0)
- pd->rel_pivot.cx = (double)(pd->abs_pivot.cx - x) / w;
- else
- pd->rel_pivot.cx = 0.0;
-
- if (h != 0)
- pd->rel_pivot.cy = (double)(pd->abs_pivot.cy - y) / h;
- else
- pd->rel_pivot.cy = 0.0;
- }
-
- if (from_degree)
- *from_degree = pd->from.degree;
-
- if (to_degree)
- *to_degree = pd->to.degree;
-
- if (pivot)
- *pivot = pd->rel_pivot.obj;
-
- if (cx)
- *cx = pd->rel_pivot.cx;
-
- if (cy)
- *cy = pd->rel_pivot.cy;
-}
-
-EOLIAN static void
-_efl_animation_object_rotate_rotate_absolute_set(Eo *eo_obj,
- Efl_Animation_Object_Rotate_Data *pd,
- double from_degree,
- double to_degree,
- Evas_Coord cx,
- Evas_Coord cy)
-{
- pd->from.degree = from_degree;
- pd->to.degree = to_degree;
-
- pd->abs_pivot.cx = cx;
- pd->abs_pivot.cy = cy;
-
- //Update relative pivot based on absolute pivot
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
-
- pd->rel_pivot.obj = NULL;
-
- if (w != 0)
- pd->rel_pivot.cx = (double)(cx - x) / w;
- else
- pd->rel_pivot.cx = 0.0;
-
- if (h != 0)
- pd->rel_pivot.cy = (double)(cy - y) / h;
- else
- pd->rel_pivot.cy = 0.0;
-
- pd->use_rel_pivot = EINA_FALSE;
-}
-
-EOLIAN static void
-_efl_animation_object_rotate_rotate_absolute_get(Eo *eo_obj,
- Efl_Animation_Object_Rotate_Data *pd,
- double *from_degree,
- double *to_degree,
- Evas_Coord *cx,
- Evas_Coord *cy)
-{
- //Update absolute pivot based on relative pivot
- if (pd->use_rel_pivot)
- {
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- if (pd->rel_pivot.obj)
- evas_object_geometry_get(pd->rel_pivot.obj, &x, &y, &w, &h);
- else
- {
- Efl_Canvas_Object *target
- = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
- }
-
- pd->abs_pivot.cx = x + (w * pd->rel_pivot.cx);
- pd->abs_pivot.cy = y + (h * pd->rel_pivot.cy);
- }
-
- if (from_degree)
- *from_degree = pd->from.degree;
-
- if (to_degree)
- *to_degree = pd->to.degree;
-
- if (cx)
- *cx = pd->abs_pivot.cx;
-
- if (cy)
- *cy = pd->abs_pivot.cy;
-}
-
-static void
-_progress_set(Eo *eo_obj, double progress)
-{
- EFL_ANIMATION_OBJECT_ROTATE_DATA_GET(eo_obj, pd);
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (!target) return;
-
- double degree =
- (pd->from.degree * (1.0 - progress)) + (pd->to.degree * progress);
-
- if (pd->use_rel_pivot)
- {
- efl_gfx_map_rotate(target,
- degree,
- pd->rel_pivot.obj,
- pd->rel_pivot.cx, pd->rel_pivot.cy);
- }
- else
- {
- efl_gfx_map_rotate_absolute(target,
- degree,
- pd->abs_pivot.cx, pd->abs_pivot.cy);
- }
-}
-
-EOLIAN static void
-_efl_animation_object_rotate_efl_animation_object_progress_set(Eo *eo_obj,
- Efl_Animation_Object_Rotate_Data *pd EINA_UNUSED,
- double progress)
-{
- if ((progress < 0.0) || (progress > 1.0)) return;
-
- _progress_set(eo_obj, progress);
-
- efl_animation_object_progress_set(efl_super(eo_obj, MY_CLASS), progress);
-}
-
-EOLIAN static Efl_Object *
-_efl_animation_object_rotate_efl_object_constructor(Eo *eo_obj,
- Efl_Animation_Object_Rotate_Data *pd)
-{
- eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
-
- pd->from.degree = 0.0;
- pd->to.degree = 0.0;
-
- pd->rel_pivot.obj = NULL;
- pd->rel_pivot.cx = 0.5;
- pd->rel_pivot.cy = 0.5;
-
- pd->abs_pivot.cx = 0;
- pd->abs_pivot.cy = 0;
-
- pd->use_rel_pivot = EINA_TRUE;
-
- return eo_obj;
-}
-
-/* Internal EO APIs */
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_rotate_set, EFL_FUNC_CALL(from_degree, to_degree, pivot, cx, cy), double from_degree, double to_degree, Efl_Canvas_Object *pivot, double cx, double cy);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(efl_animation_object_rotate_get, EFL_FUNC_CALL(from_degree, to_degree, pivot, cx, cy), double *from_degree, double *to_degree, Efl_Canvas_Object **pivot, double *cx, double *cy);
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_rotate_absolute_set, EFL_FUNC_CALL(from_degree, to_degree, cx, cy), double from_degree, double to_degree, int cx, int cy);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(efl_animation_object_rotate_absolute_get, EFL_FUNC_CALL(from_degree, to_degree, cx, cy), double *from_degree, double *to_degree, int *cx, int *cy);
-
-#define EFL_ANIMATION_OBJECT_ROTATE_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_animation_object_rotate_set, _efl_animation_object_rotate_rotate_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_rotate_get, _efl_animation_object_rotate_rotate_get), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_rotate_absolute_set, _efl_animation_object_rotate_rotate_absolute_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_rotate_absolute_get, _efl_animation_object_rotate_rotate_absolute_get)
-
-#include "efl_animation_object_rotate.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_object_rotate.eo b/src/lib/evas/canvas/efl_animation_object_rotate.eo
deleted file mode 100644
index 4cf898b05e..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_rotate.eo
+++ /dev/null
@@ -1,11 +0,0 @@
-import efl_animation_types;
-
-class Efl.Animation.Object.Rotate (Efl.Animation.Object)
-{
- [[Efl rotate animation object class]]
- data: Efl_Animation_Object_Rotate_Data;
- implements {
- Efl.Object.constructor;
- Efl.Animation.Object.progress_set;
- }
-}
diff --git a/src/lib/evas/canvas/efl_animation_object_rotate_private.h b/src/lib/evas/canvas/efl_animation_object_rotate_private.h
deleted file mode 100644
index f1bfed9a3c..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_rotate_private.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#define EFL_ANIMATION_OBJECT_PROTECTED
-#define EFL_ANIMATION_OBJECT_ROTATE_PROTECTED
-
-#include "evas_common_private.h"
-
-#define MY_CLASS EFL_ANIMATION_OBJECT_ROTATE_CLASS
-#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
-
-#define EFL_ANIMATION_OBJECT_ROTATE_DATA_GET(o, pd) \
- Efl_Animation_Object_Rotate_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_OBJECT_ROTATE_CLASS)
-
-typedef struct _Efl_Animation_Object_Rotate_Property
-{
- double degree;
-} Efl_Animation_Object_Rotate_Property;
-
-typedef struct _Efl_Animation_Object_Rotate_Absolute_Pivot
-{
- Evas_Coord cx, cy;
-} Efl_Animation_Object_Rotate_Absolute_Pivot;
-
-typedef struct _Efl_Animation_Object_Rotate_Relative_Pivot
-{
- Efl_Canvas_Object *obj;
- double cx, cy;
-} Efl_Animation_Object_Rotate_Relative_Pivot;
-
-typedef struct _Efl_Animation_Object_Rotate_Data
-{
- Efl_Animation_Object_Rotate_Property from;
- Efl_Animation_Object_Rotate_Property to;
-
- Efl_Animation_Object_Rotate_Absolute_Pivot abs_pivot;
- Efl_Animation_Object_Rotate_Relative_Pivot rel_pivot;
-
- Eina_Bool use_rel_pivot;
-} Efl_Animation_Object_Rotate_Data;
diff --git a/src/lib/evas/canvas/efl_animation_object_scale.c b/src/lib/evas/canvas/efl_animation_object_scale.c
deleted file mode 100644
index 1e1ed28fd9..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_scale.c
+++ /dev/null
@@ -1,272 +0,0 @@
-#include "efl_animation_object_scale_private.h"
-
-EOLIAN static void
-_efl_animation_object_scale_scale_set(Eo *eo_obj,
- Efl_Animation_Object_Scale_Data *pd,
- double from_scale_x,
- double from_scale_y,
- double to_scale_x,
- double to_scale_y,
- Efl_Canvas_Object *pivot,
- double cx,
- double cy)
-{
- pd->from.scale_x = from_scale_x;
- pd->from.scale_y = from_scale_y;
-
- pd->to.scale_x = to_scale_x;
- pd->to.scale_y = to_scale_y;
-
- pd->rel_pivot.obj = pivot;
- pd->rel_pivot.cx = cx;
- pd->rel_pivot.cy = cy;
-
- //Update absolute pivot based on relative pivot
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- if (pivot)
- evas_object_geometry_get(pivot, &x, &y, &w, &h);
- else
- {
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
- }
-
- pd->abs_pivot.cx = x + (w * cx);
- pd->abs_pivot.cy = y + (h * cy);
-
- pd->use_rel_pivot = EINA_TRUE;
-}
-
-EOLIAN static void
-_efl_animation_object_scale_scale_get(Eo *eo_obj,
- Efl_Animation_Object_Scale_Data *pd,
- double *from_scale_x,
- double *from_scale_y,
- double *to_scale_x,
- double *to_scale_y,
- Efl_Canvas_Object **pivot,
- double *cx,
- double *cy)
-{
- //Update relative pivot based on absolute pivot
- if (!pd->use_rel_pivot)
- {
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
-
- if (w != 0)
- pd->rel_pivot.cx = (double)(pd->abs_pivot.cx - x) / w;
- else
- pd->rel_pivot.cx = 0.0;
-
- if (h != 0)
- pd->rel_pivot.cy = (double)(pd->abs_pivot.cy - y) / h;
- else
- pd->rel_pivot.cy = 0.0;
- }
-
- if (from_scale_x)
- *from_scale_x = pd->from.scale_x;
-
- if (from_scale_y)
- *from_scale_y = pd->from.scale_y;
-
- if (to_scale_x)
- *to_scale_x = pd->to.scale_x;
-
- if (to_scale_y)
- *to_scale_y = pd->to.scale_y;
-
- if (pivot)
- *pivot = pd->rel_pivot.obj;
-
- if (cx)
- *cx = pd->rel_pivot.cx;
-
- if (cy)
- *cy = pd->rel_pivot.cy;
-}
-
-EOLIAN static void
-_efl_animation_object_scale_scale_absolute_set(Eo *eo_obj,
- Efl_Animation_Object_Scale_Data *pd,
- double from_scale_x,
- double from_scale_y,
- double to_scale_x,
- double to_scale_y,
- Evas_Coord cx,
- Evas_Coord cy)
-{
- pd->from.scale_x = from_scale_x;
- pd->from.scale_y = from_scale_y;
-
- pd->to.scale_x = to_scale_x;
- pd->to.scale_y = to_scale_y;
-
- pd->abs_pivot.cx = cx;
- pd->abs_pivot.cy = cy;
-
- //Update relative pivot based on absolute pivot
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
-
- pd->rel_pivot.obj = NULL;
-
- if (w != 0)
- pd->rel_pivot.cx = (double)(cx - x) / w;
- else
- pd->rel_pivot.cx = 0.0;
-
- if (h != 0)
- pd->rel_pivot.cy = (double)(cy - y) / h;
- else
- pd->rel_pivot.cy = 0.0;
-
- pd->use_rel_pivot = EINA_FALSE;
-}
-
-EOLIAN static void
-_efl_animation_object_scale_scale_absolute_get(Eo *eo_obj,
- Efl_Animation_Object_Scale_Data *pd,
- double *from_scale_x,
- double *from_scale_y,
- double *to_scale_x,
- double *to_scale_y,
- Evas_Coord *cx,
- Evas_Coord *cy)
-{
- //Update absolute pivot based on relative pivot
- if (pd->use_rel_pivot)
- {
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- if (pd->rel_pivot.obj)
- evas_object_geometry_get(pd->rel_pivot.obj, &x, &y, &w, &h);
- else
- {
- Efl_Canvas_Object *target
- = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
- }
-
- pd->abs_pivot.cx = x + (w * pd->rel_pivot.cx);
- pd->abs_pivot.cy = y + (h * pd->rel_pivot.cy);
- }
-
- if (from_scale_x)
- *from_scale_x = pd->from.scale_x;
-
- if (from_scale_y)
- *from_scale_y = pd->from.scale_y;
-
- if (to_scale_x)
- *to_scale_x = pd->to.scale_x;
-
- if (to_scale_y)
- *to_scale_y = pd->to.scale_y;
-
- if (cx)
- *cx = pd->abs_pivot.cx;
-
- if (cy)
- *cy = pd->abs_pivot.cy;
-}
-
-static void
-_progress_set(Eo *eo_obj, double progress)
-{
- EFL_ANIMATION_OBJECT_SCALE_DATA_GET(eo_obj, pd);
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (!target) return;
-
- double scale_x =
- (pd->from.scale_x * (1.0 - progress)) + (pd->to.scale_x * progress);
-
- double scale_y =
- (pd->from.scale_y * (1.0 - progress)) + (pd->to.scale_y * progress);
-
- if (pd->use_rel_pivot)
- {
- efl_gfx_map_zoom(target,
- scale_x, scale_y,
- pd->rel_pivot.obj,
- pd->rel_pivot.cx, pd->rel_pivot.cy);
- }
- else
- {
- efl_gfx_map_zoom_absolute(target,
- scale_x, scale_y,
- pd->abs_pivot.cx, pd->abs_pivot.cy);
- }
-}
-
-EOLIAN static void
-_efl_animation_object_scale_efl_animation_object_progress_set(Eo *eo_obj,
- Efl_Animation_Object_Scale_Data *pd EINA_UNUSED,
- double progress)
-{
- if ((progress < 0.0) || (progress > 1.0)) return;
-
- _progress_set(eo_obj, progress);
-
- efl_animation_object_progress_set(efl_super(eo_obj, MY_CLASS), progress);
-}
-
-EOLIAN static Efl_Object *
-_efl_animation_object_scale_efl_object_constructor(Eo *eo_obj,
- Efl_Animation_Object_Scale_Data *pd)
-{
- eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
-
- pd->from.scale_x = 1.0;
- pd->from.scale_y = 1.0;
-
- pd->rel_pivot.obj = NULL;
- pd->rel_pivot.cx = 0.5;
- pd->rel_pivot.cy = 0.5;
-
- pd->abs_pivot.cx = 0;
- pd->abs_pivot.cy = 0;
-
- pd->use_rel_pivot = EINA_TRUE;
-
- return eo_obj;
-}
-
-/* Internal EO APIs */
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_scale_set, EFL_FUNC_CALL(from_scale_x, from_scale_y, to_scale_x, to_scale_y, pivot, cx, cy), double from_scale_x, double from_scale_y, double to_scale_x, double to_scale_y, Efl_Canvas_Object *pivot, double cx, double cy);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(efl_animation_object_scale_get, EFL_FUNC_CALL(from_scale_x, from_scale_y, to_scale_x, to_scale_y, pivot, cx, cy), double *from_scale_x, double *from_scale_y, double *to_scale_x, double *to_scale_y, Efl_Canvas_Object **pivot, double *cx, double *cy);
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_scale_absolute_set, EFL_FUNC_CALL(from_scale_x, from_scale_y, to_scale_x, to_scale_y, cx, cy), double from_scale_x, double from_scale_y, double to_scale_x, double to_scale_y, int cx, int cy);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(efl_animation_object_scale_absolute_get, EFL_FUNC_CALL(from_scale_x, from_scale_y, to_scale_x, to_scale_y, cx, cy), double *from_scale_x, double *from_scale_y, double *to_scale_x, double *to_scale_y, int *cx, int *cy);
-
-#define EFL_ANIMATION_OBJECT_SCALE_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_animation_object_scale_set, _efl_animation_object_scale_scale_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_scale_get, _efl_animation_object_scale_scale_get), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_scale_absolute_set, _efl_animation_object_scale_scale_absolute_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_scale_absolute_get, _efl_animation_object_scale_scale_absolute_get)
-
-#include "efl_animation_object_scale.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_object_scale.eo b/src/lib/evas/canvas/efl_animation_object_scale.eo
deleted file mode 100644
index 1278fb0988..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_scale.eo
+++ /dev/null
@@ -1,11 +0,0 @@
-import efl_animation_types;
-
-class Efl.Animation.Object.Scale (Efl.Animation.Object)
-{
- [[Efl scale animation object class]]
- data: Efl_Animation_Object_Scale_Data;
- implements {
- Efl.Object.constructor;
- Efl.Animation.Object.progress_set;
- }
-}
diff --git a/src/lib/evas/canvas/efl_animation_object_scale_private.h b/src/lib/evas/canvas/efl_animation_object_scale_private.h
deleted file mode 100644
index 2b049005f5..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_scale_private.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#define EFL_ANIMATION_OBJECT_PROTECTED
-#define EFL_ANIMATION_OBJECT_SCALE_PROTECTED
-
-#include "evas_common_private.h"
-
-#define MY_CLASS EFL_ANIMATION_OBJECT_SCALE_CLASS
-#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
-
-#define EFL_ANIMATION_OBJECT_SCALE_DATA_GET(o, pd) \
- Efl_Animation_Object_Scale_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_OBJECT_SCALE_CLASS)
-
-typedef struct _Efl_Animation_Object_Scale_Property
-{
- double scale_x, scale_y;
-} Efl_Animation_Object_Scale_Property;
-
-typedef struct _Efl_Animation_Object_Scale_Absolute_Pivot
-{
- Evas_Coord cx, cy;
-} Efl_Animation_Object_Scale_Absolute_Pivot;
-
-typedef struct _Efl_Animation_Object_Scale_Relative_Pivot
-{
- Efl_Canvas_Object *obj;
- double cx, cy;
-} Efl_Animation_Object_Scale_Relative_Pivot;
-
-typedef struct _Efl_Animation_Object_Scale_Data
-{
- Efl_Animation_Object_Scale_Property from;
- Efl_Animation_Object_Scale_Property to;
-
- Efl_Animation_Object_Scale_Absolute_Pivot abs_pivot;
- Efl_Animation_Object_Scale_Relative_Pivot rel_pivot;
-
- Eina_Bool use_rel_pivot;
-} Efl_Animation_Object_Scale_Data;
diff --git a/src/lib/evas/canvas/efl_animation_object_translate.c b/src/lib/evas/canvas/efl_animation_object_translate.c
deleted file mode 100644
index 78ac9e7ee5..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_translate.c
+++ /dev/null
@@ -1,240 +0,0 @@
-#include "efl_animation_object_translate_private.h"
-
-EOLIAN static void
-_efl_animation_object_translate_translate_set(Eo *eo_obj,
- Efl_Animation_Object_Translate_Data *pd,
- Evas_Coord from_x,
- Evas_Coord from_y,
- Evas_Coord to_x,
- Evas_Coord to_y)
-{
- pd->from.move_x = from_x;
- pd->from.move_y = from_y;
-
- pd->to.move_x = to_x;
- pd->to.move_y = to_y;
-
- //Update absolute coordinate based on relative move
- Evas_Coord x = 0;
- Evas_Coord y = 0;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, NULL, NULL);
-
- pd->from.x = pd->from.move_x + x;
- pd->from.y = pd->from.move_y + y;
-
- pd->to.x = pd->to.move_x + x;
- pd->to.y = pd->to.move_y + y;
-
- pd->use_rel_move = EINA_TRUE;
-}
-
-EOLIAN static void
-_efl_animation_object_translate_translate_get(Eo *eo_obj,
- Efl_Animation_Object_Translate_Data *pd,
- Evas_Coord *from_x,
- Evas_Coord *from_y,
- Evas_Coord *to_x,
- Evas_Coord *to_y)
-{
- //Update relative move based on absolute coordinate
- if (!pd->use_rel_move)
- {
- Evas_Coord x = 0;
- Evas_Coord y = 0;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, NULL, NULL);
-
- pd->from.move_x = pd->from.x - x;
- pd->from.move_y = pd->from.y - y;
-
- pd->to.move_x = pd->to.x - x;
- pd->to.move_y = pd->to.y - y;
- }
-
- if (from_x)
- *from_x = pd->from.move_x;
- if (from_y)
- *from_y = pd->from.move_y;
-
- if (to_x)
- *to_x = pd->to.move_x;
- if (to_y)
- *to_y = pd->to.move_y;
-}
-
-EOLIAN static void
-_efl_animation_object_translate_translate_absolute_set(Eo *eo_obj,
- Efl_Animation_Object_Translate_Data *pd,
- Evas_Coord from_x,
- Evas_Coord from_y,
- Evas_Coord to_x,
- Evas_Coord to_y)
-{
- pd->from.x = from_x;
- pd->from.y = from_y;
-
- pd->to.x = to_x;
- pd->to.y = to_y;
-
- //Update relative move based on absolute coordinate
- Evas_Coord x = 0;
- Evas_Coord y = 0;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, NULL, NULL);
-
- pd->from.move_x = pd->from.x - x;
- pd->from.move_y = pd->from.y - y;
-
- pd->to.move_x = pd->to.x - x;
- pd->to.move_y = pd->to.y - y;
-
- pd->use_rel_move = EINA_FALSE;
-}
-
-EOLIAN static void
-_efl_animation_object_translate_translate_absolute_get(Eo *eo_obj,
- Efl_Animation_Object_Translate_Data *pd,
- Evas_Coord *from_x,
- Evas_Coord *from_y,
- Evas_Coord *to_x,
- Evas_Coord *to_y)
-{
- //Update absolute coordinate based on relative move
- if (pd->use_rel_move)
- {
- Evas_Coord x = 0;
- Evas_Coord y = 0;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, NULL, NULL);
-
- pd->from.x = pd->from.move_x + x;
- pd->from.y = pd->from.move_y + y;
-
- pd->to.x = pd->to.move_x + x;
- pd->to.y = pd->to.move_y + y;
- }
-
- if (from_x)
- *from_x = pd->from.x;
- if (from_y)
- *from_y = pd->from.y;
-
- if (to_x)
- *to_x = pd->to.x;
- if (to_y)
- *to_y = pd->to.y;
-}
-
-static void
-_pre_started_cb(void *data EINA_UNUSED, const Efl_Event *event)
-{
- EFL_ANIMATION_OBJECT_TRANSLATE_DATA_GET(event->object, pd);
-
- pd->start_x = 0;
- pd->start_y = 0;
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(event->object);
- if (!target) return;
-
- Evas_Coord x, y;
- evas_object_geometry_get(target, &x, &y, NULL, NULL);
-
- pd->start_x = x;
- pd->start_y = y;
-}
-
-static void
-_progress_set(Eo *eo_obj, double progress)
-{
- EFL_ANIMATION_OBJECT_TRANSLATE_DATA_GET(eo_obj, pd);
-
- Efl_Canvas_Object *target = efl_animation_object_target_get(eo_obj);
- if (!target) return;
-
- Evas_Coord new_x = 0;
- Evas_Coord new_y = 0;
-
- if (pd->use_rel_move)
- {
- new_x =
- (pd->from.move_x * (1.0 - progress)) + (pd->to.move_x * progress);
- new_y =
- (pd->from.move_y * (1.0 - progress)) + (pd->to.move_y * progress);
- }
- else
- {
- /* Since efl_gfx_map_translate() moves position relatively, the original
- * position should be subtracted to move position absolutely. */
- new_x =
- (pd->from.x * (1.0 - progress)) + (pd->to.x * progress) - pd->start_x;
- new_y =
- (pd->from.y * (1.0 - progress)) + (pd->to.y * progress) - pd->start_y;
- }
-
- efl_gfx_map_translate(target, (double) new_x, (double) new_y, 0.0);
-}
-
-EOLIAN static void
-_efl_animation_object_translate_efl_animation_object_progress_set(Eo *eo_obj,
- Efl_Animation_Object_Translate_Data *pd EINA_UNUSED,
- double progress)
-{
- if ((progress < 0.0) || (progress > 1.0)) return;
-
- _progress_set(eo_obj, progress);
-
- efl_animation_object_progress_set(efl_super(eo_obj, MY_CLASS), progress);
-}
-
-EOLIAN static Efl_Object *
-_efl_animation_object_translate_efl_object_constructor(Eo *eo_obj,
- Efl_Animation_Object_Translate_Data *pd)
-{
- eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
-
- pd->from.move_x = 0;
- pd->from.move_y = 0;
- pd->from.x = 0;
- pd->from.y = 0;
-
- pd->to.move_x = 0;
- pd->to.move_y = 0;
- pd->to.x = 0;
- pd->to.y = 0;
-
- pd->start_x = 0;
- pd->start_y = 0;
-
- pd->use_rel_move = EINA_TRUE;
-
- //pre_started event is supported within class only (protected event)
- efl_event_callback_add(eo_obj, EFL_ANIMATION_OBJECT_EVENT_PRE_STARTED,
- _pre_started_cb, NULL);
-
- return eo_obj;
-}
-
-/* Internal EO APIs */
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_translate_set, EFL_FUNC_CALL(from_x, from_y, to_x, to_y), int from_x, int from_y, int to_x, int to_y);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(efl_animation_object_translate_get, EFL_FUNC_CALL(from_x, from_y, to_x, to_y), int *from_x, int *from_y, int *to_x, int *to_y);
-
-EOAPI EFL_VOID_FUNC_BODYV(efl_animation_object_translate_absolute_set, EFL_FUNC_CALL(from_x, from_y, to_x, to_y), int from_x, int from_y, int to_x, int to_y);
-EOAPI EFL_VOID_FUNC_BODYV_CONST(efl_animation_object_translate_absolute_get, EFL_FUNC_CALL(from_x, from_y, to_x, to_y), int *from_x, int *from_y, int *to_x, int *to_y);
-
-#define EFL_ANIMATION_OBJECT_TRANSLATE_EXTRA_OPS \
- EFL_OBJECT_OP_FUNC(efl_animation_object_translate_set, _efl_animation_object_translate_translate_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_translate_get, _efl_animation_object_translate_translate_get), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_translate_absolute_set, _efl_animation_object_translate_translate_absolute_set), \
- EFL_OBJECT_OP_FUNC(efl_animation_object_translate_absolute_get, _efl_animation_object_translate_translate_absolute_get)
-
-#include "efl_animation_object_translate.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_object_translate.eo b/src/lib/evas/canvas/efl_animation_object_translate.eo
deleted file mode 100644
index b3f778b609..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_translate.eo
+++ /dev/null
@@ -1,11 +0,0 @@
-import efl_animation_types;
-
-class Efl.Animation.Object.Translate (Efl.Animation.Object)
-{
- [[Efl translate animation object class]]
- data: Efl_Animation_Object_Translate_Data;
- implements {
- Efl.Object.constructor;
- Efl.Animation.Object.progress_set;
- }
-}
diff --git a/src/lib/evas/canvas/efl_animation_object_translate_private.h b/src/lib/evas/canvas/efl_animation_object_translate_private.h
deleted file mode 100644
index 6431c3e2c7..0000000000
--- a/src/lib/evas/canvas/efl_animation_object_translate_private.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#define EFL_ANIMATION_OBJECT_PROTECTED
-
-#include "evas_common_private.h"
-
-#define MY_CLASS EFL_ANIMATION_OBJECT_TRANSLATE_CLASS
-#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
-
-#define EFL_ANIMATION_OBJECT_TRANSLATE_DATA_GET(o, pd) \
- Efl_Animation_Object_Translate_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_OBJECT_TRANSLATE_CLASS)
-
-typedef struct _Efl_Animation_Object_Translate_Property
-{
- Evas_Coord move_x, move_y;
- Evas_Coord x, y;
-} Efl_Animation_Object_Translate_Property;
-
-typedef struct _Efl_Animation_Object_Translate_Data
-{
- Efl_Animation_Object_Translate_Property from;
- Efl_Animation_Object_Translate_Property to;
-
- Evas_Coord start_x, start_y;
-
- Eina_Bool use_rel_move;
-} Efl_Animation_Object_Translate_Data;
diff --git a/src/lib/evas/canvas/efl_animation_player.c b/src/lib/evas/canvas/efl_animation_player.c
new file mode 100644
index 0000000000..8b31524f34
--- /dev/null
+++ b/src/lib/evas/canvas/efl_animation_player.c
@@ -0,0 +1,384 @@
+#include "efl_animation_player_private.h"
+
+static void
+_target_del_cb(void *data, const Efl_Event *event EINA_UNUSED)
+{
+ Efl_Animation_Player_Data *pd = data;
+ pd->target = NULL;
+}
+
+EOLIAN static void
+_efl_animation_player_target_set(Eo *eo_obj EINA_UNUSED,
+ Efl_Animation_Player_Data *pd,
+ Efl_Canvas_Object *target)
+{
+ efl_event_callback_add(target, EFL_EVENT_DEL, _target_del_cb, pd);
+
+ pd->target = target;
+}
+
+EOLIAN static Efl_Canvas_Object *
+_efl_animation_player_target_get(Eo *eo_obj EINA_UNUSED, Efl_Animation_Player_Data *pd)
+{
+ return pd->target;
+}
+
+EOLIAN static void
+_efl_animation_player_auto_del_set(Eo *eo_obj EINA_UNUSED,
+ Efl_Animation_Player_Data *pd,
+ Eina_Bool auto_del)
+{
+ pd->auto_del = auto_del;
+}
+
+EOLIAN static Eina_Bool
+_efl_animation_player_auto_del_get(Eo *eo_obj EINA_UNUSED,
+ Efl_Animation_Player_Data *pd)
+{
+ return pd->auto_del;
+}
+
+EOLIAN static void
+_efl_animation_player_animation_set(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd,
+ Efl_Animation *anim)
+{
+ if (anim == pd->animation)
+ return;
+
+ if (!efl_isa(anim, EFL_ANIMATION_CLASS))
+ {
+ ERR("Passed argument [%p]:[%s] is not an Efl.Animation",
+ anim, efl_class_name_get(efl_class_get(anim)));
+ return;
+ }
+
+ if (pd->animation)
+ {
+ efl_player_stop(eo_obj);
+ efl_unref(pd->animation);
+ }
+ pd->animation = anim;
+ efl_ref(pd->animation);
+}
+
+EOLIAN static Efl_Animation *
+_efl_animation_player_animation_get(Eo *eo_obj EINA_UNUSED,
+ Efl_Animation_Player_Data *pd)
+{
+ return pd->animation;
+}
+
+static Eina_Bool
+_animator_cb(void *data)
+{
+ Eo *eo_obj = data;
+ EFL_ANIMATION_PLAYER_DATA_GET(eo_obj, pd);
+ EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
+ double duration, elapsed_time, vector;
+
+ if (efl_player_seekable_get(eo_obj))
+ {
+ pd->time.current = ecore_loop_time_get();
+
+ duration = efl_animation_duration_get(anim);
+ elapsed_time = pd->time.current - pd->time.prev;
+ vector = elapsed_time / duration;
+
+ if (vector <= DBL_EPSILON)
+ return ECORE_CALLBACK_RENEW; // There is no update.
+
+ //TODO: check negative play_speed.
+ if (!pd->is_direction_forward)
+ vector *= -1;
+ pd->progress += vector;
+
+ if (pd->progress > 1.0)
+ pd->progress = 1,0;
+ else if (pd->progress < 0.0)
+ pd->progress = 0,0;
+ }
+ else
+ {
+ pd->progress = (double)(pd->is_direction_forward);
+ }
+
+ efl_animation_apply(anim, pd->progress, efl_animation_player_target_get(eo_obj));
+
+ Efl_Animation_Player_Running_Event_Info event_info;
+ event_info.progress = pd->progress;
+ efl_event_callback_call(eo_obj, EFL_ANIMATION_PLAYER_EVENT_RUNNING,
+ &event_info);
+ pd->time.prev = pd->time.current;
+
+ //Not end. Keep going.
+ if (fabs((!!(pd->is_direction_forward)) - pd->progress) > DBL_EPSILON)
+ return ECORE_CALLBACK_RENEW;
+
+ //Repeat animation
+ if ((efl_animation_repeat_count_get(anim) == EFL_ANIMATION_REPEAT_INFINITE) ||
+ (pd->remaining_repeat_count > 0))
+ {
+ if (pd->remaining_repeat_count > 0)
+ pd->remaining_repeat_count--;
+
+ if (efl_animation_repeat_mode_get(anim) == EFL_ANIMATION_REPEAT_MODE_REVERSE)
+ {
+ pd->is_direction_forward = !pd->is_direction_forward;
+ }
+ else
+ {
+ pd->progress = 0.0;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+ }
+ efl_player_stop(eo_obj);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_start(Eo *eo_obj, Efl_Animation_Player_Data *pd)
+{
+ EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
+
+ pd->is_direction_forward = EINA_TRUE;
+
+ pd->remaining_repeat_count = efl_animation_repeat_count_get(anim);
+
+ ecore_animator_del(pd->animator);
+ pd->animator = NULL;
+ pd->time.prev = ecore_loop_time_get();
+
+ //pre started event is supported within class only (protected event)
+ efl_event_callback_call(eo_obj, EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED,
+ NULL);
+ efl_event_callback_call(eo_obj, EFL_ANIMATION_PLAYER_EVENT_STARTED, NULL);
+
+ 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_PLAYER_DATA_GET(eo_obj, pd);
+
+ pd->start_delay_timer = NULL;
+
+ _start(eo_obj, pd);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+EOLIAN static void
+_efl_animation_player_efl_player_start(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd)
+{
+ double start_delay;
+ EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
+
+ if (!efl_player_playable_get(eo_obj)) return;
+ pd->is_play = EINA_TRUE;
+ //TODO: check this case is correct
+ if (pd->start_delay_timer) return;
+
+ pd->progress = 0.0;
+ start_delay = efl_animation_start_delay_get(anim);
+ if (start_delay > 0.0)
+ {
+ pd->start_delay_timer = ecore_timer_add(start_delay,
+ _start_delay_timer_cb, eo_obj);
+ return;
+ }
+
+ _start(eo_obj, pd);
+}
+
+EOLIAN static void
+_efl_animation_player_efl_player_stop(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd)
+{
+ EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
+ Eina_Bool play = efl_player_play_get(eo_obj);
+ if (play)
+ {
+ efl_player_play_set(eo_obj, EINA_FALSE);
+ //Reset the state of the target to the initial state
+ if ((efl_animation_final_state_keep_get(anim)) &&
+ (efl_animation_repeat_mode_get(anim) != EFL_ANIMATION_REPEAT_MODE_REVERSE) &&
+ (!(efl_animation_repeat_count_get(anim) & 1)))
+ {
+ pd->progress = 1.0;
+ }
+ else
+ {
+ pd->progress = 0.0;
+ }
+ }
+ else
+ {
+ pd->progress = 0.0;
+ }
+ efl_animation_apply(anim, pd->progress, efl_animation_player_target_get(eo_obj));
+ if (play)
+ efl_event_callback_call(eo_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, NULL);
+
+ if (pd->auto_del) efl_del(eo_obj);
+}
+
+EOLIAN static void
+_efl_animation_player_efl_player_play_set(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd,
+ Eina_Bool play)
+{
+ if (efl_player_play_get(eo_obj) == !!play)
+ return;
+
+ pd->is_play = play;
+ if (play)
+ {
+ //TODO: check this case is correct.
+ if (pd->start_delay_timer) return;
+
+ pd->time.prev = ecore_loop_time_get();
+ pd->animator = ecore_animator_add(_animator_cb, eo_obj);
+
+ _animator_cb(eo_obj);
+ }
+ else
+ {
+ ecore_timer_del(pd->start_delay_timer);
+ pd->start_delay_timer = NULL;
+ ecore_animator_del(pd->animator);
+ pd->animator = NULL;
+ }
+}
+
+EOLIAN static Eina_Bool
+_efl_animation_player_efl_player_play_get(Eo *eo_obj EINA_UNUSED,
+ Efl_Animation_Player_Data *pd)
+{
+ return pd->is_play;
+}
+
+EOLIAN static Eina_Bool
+_efl_animation_player_efl_player_playable_get(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd EINA_UNUSED)
+{
+ Efl_Animation *anim = efl_animation_player_animation_get(eo_obj);
+
+ return efl_playable_get(anim);
+}
+
+EOLIAN static double
+_efl_animation_player_efl_player_position_get(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd EINA_UNUSED)
+{
+ //TODO: this is not correct
+ Efl_Animation *anim = efl_animation_player_animation_get(eo_obj);
+ double length = efl_player_length_get(anim);
+
+ return length * efl_player_progress_get(anim);
+}
+
+EOLIAN static void
+_efl_animation_player_efl_player_position_set(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd EINA_UNUSED,
+ double sec)
+{
+ //TODO: this is not correct
+ if (!efl_player_seekable_get(eo_obj))
+ return;
+
+ EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
+ double length = efl_player_length_get(anim);
+ pd->progress = sec / length;
+ efl_animation_apply(anim, pd->progress, efl_animation_player_target_get(eo_obj));
+}
+
+EOLIAN static double
+_efl_animation_player_efl_player_progress_get(Eo *eo_obj EINA_UNUSED,
+ Efl_Animation_Player_Data *pd)
+{
+ return pd->progress;
+}
+
+EOLIAN static void
+_efl_animation_player_efl_player_play_speed_set(Eo *eo_obj EINA_UNUSED,
+ Efl_Animation_Player_Data *pd,
+ double play_speed)
+{
+ //TODO: check reverse play case.
+ if (play_speed < 0)
+ return;
+ pd->play_speed = play_speed;
+}
+
+EOLIAN static double
+_efl_animation_player_efl_player_play_speed_get(Eo *eo_obj EINA_UNUSED,
+ Efl_Animation_Player_Data *pd)
+{
+ return pd->play_speed;
+}
+
+EOLIAN static double
+_efl_animation_player_efl_player_length_get(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd EINA_UNUSED)
+{
+ EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
+ return efl_playable_length_get(anim);
+}
+
+EOLIAN static Eina_Bool
+_efl_animation_player_efl_player_seekable_get(Eo *eo_obj EINA_UNUSED,
+ Efl_Animation_Player_Data *pd EINA_UNUSED)
+{
+ EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
+ return efl_playable_seekable_get(anim);
+}
+
+EOLIAN static Efl_Object *
+_efl_animation_player_efl_object_constructor(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd)
+{
+ eo_obj = efl_constructor(efl_super(eo_obj, MY_CLASS));
+
+ pd->time.begin = 0.0;
+ pd->time.current = 0.0;
+
+ pd->animation = NULL;
+
+ pd->progress = 0.0;
+
+ //pd->auto_del = EINA_TRUE;
+
+ return eo_obj;
+}
+
+EOLIAN static void
+_efl_animation_player_efl_object_destructor(Eo *eo_obj,
+ Efl_Animation_Player_Data *pd)
+{
+ if (pd->animator)
+ {
+ ecore_animator_del(pd->animator);
+ pd->animator = NULL;
+
+ //Reset the state of the target to the initial state
+ efl_player_stop(eo_obj);
+
+ efl_event_callback_call(eo_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, NULL);
+ }
+ efl_unref(pd->animation);
+
+ efl_destructor(efl_super(eo_obj, MY_CLASS));
+}
+
+EWAPI const Efl_Event_Description _EFL_ANIMATION_PLAYER_EVENT_PRE_STARTED =
+ EFL_EVENT_DESCRIPTION("pre_started");
+
+#include "efl_animation_player.eo.c"
diff --git a/src/lib/evas/canvas/efl_animation_player.eo b/src/lib/evas/canvas/efl_animation_player.eo
new file mode 100644
index 0000000000..b4df306d7e
--- /dev/null
+++ b/src/lib/evas/canvas/efl_animation_player.eo
@@ -0,0 +1,55 @@
+import efl_animation_types;
+
+class Efl.Animation.Player (Efl.Object, Efl.Player)
+{
+ [[Efl animation object class]]
+ methods {
+ @property animation {
+ set {}
+ get {}
+ values {
+ animation: Efl.Animation;
+ }
+ }
+ @property auto_del {
+ [[Auto delete property]]
+ set {
+ }
+ get {
+ }
+ values {
+ auto_del: bool; [[$true to delete animation object automatically when animation is finished or animation is cancelled, $false otherwise.]]
+ }
+ }
+ @property target {
+ [[Target object property]]
+ set {
+ }
+ get {
+ }
+ values {
+ target: Efl.Canvas.Object; [[Target object which is applied animation.]]
+ }
+ }
+ }
+ implements {
+ Efl.Object.constructor;
+ Efl.Object.destructor;
+ Efl.Player.start;
+ Efl.Player.stop;
+ Efl.Player.play { get; set; }
+ Efl.Player.playable { get; }
+ Efl.Player.position { get; set; }
+ Efl.Player.progress { get;}
+ Efl.Player.play_speed { get; set; }
+ //Efl.Player.volume { get; set; }
+ //Efl.Player.mute { get; set; }
+ Efl.Player.length { get; }
+ Efl.Player.seekable { get; }
+ }
+ events {
+ started; [[Animation is started.]]
+ running; [[Animation is running.]]
+ ended; [[Animation is ended.]]
+ }
+}
diff --git a/src/lib/evas/canvas/efl_animation_player_private.h b/src/lib/evas/canvas/efl_animation_player_private.h
new file mode 100644
index 0000000000..9b1a1fa3a5
--- /dev/null
+++ b/src/lib/evas/canvas/efl_animation_player_private.h
@@ -0,0 +1,52 @@
+#define EFL_ANIMATION_PLAYER_PROTECTED
+
+#include "evas_common_private.h"
+#include <Ecore.h>
+
+#define MY_CLASS EFL_ANIMATION_PLAYER_CLASS
+#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
+
+#if 0
+typedef struct _Target_State
+{
+ Evas_Coord x, y, w, h;
+ int r, g, b, a;
+
+ Evas_Map *map;
+ Eina_Bool enable_map : 1;
+} Target_State;
+#endif
+
+typedef struct _Efl_Animation_Player_Data
+{
+ Ecore_Animator *animator;
+ Ecore_Timer *start_delay_timer;
+
+ struct {
+ double prev;
+ double begin;
+ double current;
+ double pause_begin;
+ } time;
+
+ Efl_Animation *animation;
+ Efl_Canvas_Object *target;
+
+ double progress;
+ double play_speed;
+
+ int remaining_repeat_count;
+
+ Efl_Interpolator *interpolator;
+
+ Eina_Bool auto_del : 1;
+ Eina_Bool is_play : 1;
+ Eina_Bool keep_final_state : 1;
+ Eina_Bool is_direction_forward : 1;
+} Efl_Animation_Player_Data;
+
+#define EFL_ANIMATION_PLAYER_DATA_GET(o, pd) \
+ Efl_Animation_Player_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_PLAYER_CLASS)
+
+#define EFL_ANIMATION_PLAYER_ANIMATION_GET(o, anim) \
+ Efl_Animation *anim = efl_animation_player_animation_get(o)
diff --git a/src/lib/evas/canvas/efl_animation_private.h b/src/lib/evas/canvas/efl_animation_private.h
index 626eb78eb9..bcadf35c1a 100644
--- a/src/lib/evas/canvas/efl_animation_private.h
+++ b/src/lib/evas/canvas/efl_animation_private.h
@@ -3,13 +3,8 @@
#include "evas_common_private.h"
#include <Ecore.h>
-#define MY_CLASS EFL_ANIMATION_CLASS
-#define MY_CLASS_NAME efl_class_name_get(MY_CLASS)
-
typedef struct _Efl_Animation_Data
{
- Efl_Canvas_Object *target;
-
double duration;
double start_delay_time;
@@ -24,3 +19,10 @@ typedef struct _Efl_Animation_Data
#define EFL_ANIMATION_DATA_GET(o, pd) \
Efl_Animation_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_CLASS)
+
+#define GET_STATUS(from, to, progress) \
+ ((from) + (((to) - (from)) * (progress)))
+
+#define FINAL_STATE_IS_REVERSE(anim) \
+ ((efl_animation_repeat_mode_get(anim) == EFL_ANIMATION_REPEAT_MODE_REVERSE) && \
+ (efl_animation_repeat_count_get(anim) & 1))
diff --git a/src/lib/evas/canvas/efl_animation_rotate.c b/src/lib/evas/canvas/efl_animation_rotate.c
index f1238f71d9..72d30dc158 100644
--- a/src/lib/evas/canvas/efl_animation_rotate.c
+++ b/src/lib/evas/canvas/efl_animation_rotate.c
@@ -1,7 +1,22 @@
#include "efl_animation_rotate_private.h"
+#define MY_CLASS EFL_ANIMATION_ROTATE_CLASS
+
+static double
+_rotation_get(Eo *target)
+{
+ double x1, x2, y1, y2;
+ double theta;
+
+ efl_gfx_map_coord_absolute_get(target, 0, &x1, &y1, NULL);
+ efl_gfx_map_coord_absolute_get(target, 1, &x2, &y2, NULL);
+ theta = atan((y2 - y1) / (x2 - x1));
+
+ return theta * 180 / M_PI;
+}
+
EOLIAN static void
-_efl_animation_rotate_rotate_set(Eo *eo_obj,
+_efl_animation_rotate_rotate_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Rotate_Data *pd,
double from_degree,
double to_degree,
@@ -12,33 +27,15 @@ _efl_animation_rotate_rotate_set(Eo *eo_obj,
pd->from.degree = from_degree;
pd->to.degree = to_degree;
+ //TODO: check whether ref for pivot should be added.
pd->rel_pivot.obj = pivot;
pd->rel_pivot.cx = cx;
pd->rel_pivot.cy = cy;
-
- //Update absolute pivot based on relative pivot
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- if (pivot)
- evas_object_geometry_get(pivot, &x, &y, &w, &h);
- else
- {
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
- }
-
- pd->abs_pivot.cx = x + (w * cx);
- pd->abs_pivot.cy = y + (h * cy);
-
pd->use_rel_pivot = EINA_TRUE;
}
EOLIAN static void
-_efl_animation_rotate_rotate_get(Eo *eo_obj,
+_efl_animation_rotate_rotate_get(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Rotate_Data *pd,
double *from_degree,
double *to_degree,
@@ -46,27 +43,10 @@ _efl_animation_rotate_rotate_get(Eo *eo_obj,
double *cx,
double *cy)
{
- //Update relative pivot based on absolute pivot
if (!pd->use_rel_pivot)
{
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
-
- if (w != 0)
- pd->rel_pivot.cx = (double)(pd->abs_pivot.cx - x) / w;
- else
- pd->rel_pivot.cx = 0.0;
-
- if (h != 0)
- pd->rel_pivot.cy = (double)(pd->abs_pivot.cy - y) / h;
- else
- pd->rel_pivot.cy = 0.0;
+ ERR("Animation is done in absolute value.");
+ return;
}
if (from_degree)
@@ -86,7 +66,7 @@ _efl_animation_rotate_rotate_get(Eo *eo_obj,
}
EOLIAN static void
-_efl_animation_rotate_rotate_absolute_set(Eo *eo_obj,
+_efl_animation_rotate_rotate_absolute_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Rotate_Data *pd,
double from_degree,
double to_degree,
@@ -98,59 +78,21 @@ _efl_animation_rotate_rotate_absolute_set(Eo *eo_obj,
pd->abs_pivot.cx = cx;
pd->abs_pivot.cy = cy;
-
- //Update relative pivot based on absolute pivot
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
-
- pd->rel_pivot.obj = NULL;
-
- if (w != 0)
- pd->rel_pivot.cx = (double)(cx - x) / w;
- else
- pd->rel_pivot.cx = 0.0;
-
- if (h != 0)
- pd->rel_pivot.cy = (double)(cy - y) / h;
- else
- pd->rel_pivot.cy = 0.0;
-
pd->use_rel_pivot = EINA_FALSE;
}
EOLIAN static void
-_efl_animation_rotate_rotate_absolute_get(Eo *eo_obj,
+_efl_animation_rotate_rotate_absolute_get(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Rotate_Data *pd,
double *from_degree,
double *to_degree,
Evas_Coord *cx,
Evas_Coord *cy)
{
- //Update relative pivot based on absolute pivot
if (pd->use_rel_pivot)
{
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- if (pd->rel_pivot.obj)
- evas_object_geometry_get(pd->rel_pivot.obj, &x, &y, &w, &h);
- else
- {
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
- }
-
- pd->abs_pivot.cx = x + (w * pd->rel_pivot.cx);
- pd->abs_pivot.cy = y + (h * pd->rel_pivot.cy);
+ ERR("Animation is done in relative value.");
+ return;
}
if (from_degree)
@@ -166,54 +108,36 @@ _efl_animation_rotate_rotate_absolute_get(Eo *eo_obj,
*cy = pd->abs_pivot.cy;
}
-EOLIAN static Efl_Animation_Object *
-_efl_animation_rotate_efl_animation_object_create(Eo *eo_obj,
- Efl_Animation_Rotate_Data *pd)
+EOLIAN static double
+_efl_animation_rotate_efl_animation_animation_apply(Eo *eo_obj,
+ Efl_Animation_Rotate_Data *pd,
+ double progress,
+ Efl_Canvas_Object *target)
{
- Efl_Animation_Object_Rotate *anim_obj
- = efl_add(EFL_ANIMATION_OBJECT_ROTATE_CLASS, NULL);
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- efl_animation_object_target_set(anim_obj, target);
-
- Eina_Bool state_keep = efl_animation_final_state_keep_get(eo_obj);
- efl_animation_object_final_state_keep_set(anim_obj, state_keep);
-
- double duration = efl_animation_duration_get(eo_obj);
- efl_animation_object_duration_set(anim_obj, duration);
-
- double start_delay_time = efl_animation_start_delay_get(eo_obj);
- efl_animation_object_start_delay_set(anim_obj, start_delay_time);
-
- Efl_Animation_Object_Repeat_Mode repeat_mode =
- (Efl_Animation_Object_Repeat_Mode)efl_animation_repeat_mode_get(eo_obj);
- efl_animation_object_repeat_mode_set(anim_obj, repeat_mode);
+ double new_degree;
+ double prev_degree;
- int repeat_count = efl_animation_repeat_count_get(eo_obj);
- efl_animation_object_repeat_count_set(anim_obj, repeat_count);
+ progress = efl_animation_apply(efl_super(eo_obj, MY_CLASS), progress, target);
+ if (!target) return progress;
- Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
- efl_animation_object_interpolator_set(anim_obj, interpolator);
+ prev_degree = _rotation_get(target);
+ new_degree = GET_STATUS(pd->from.degree, pd->to.degree, progress);
if (pd->use_rel_pivot)
{
- efl_animation_object_rotate_set(anim_obj,
- pd->from.degree,
- pd->to.degree,
- pd->rel_pivot.obj,
- pd->rel_pivot.cx,
- pd->rel_pivot.cy);
+ efl_gfx_map_rotate(target,
+ new_degree - prev_degree,
+ (pd->rel_pivot.obj) ? pd->rel_pivot.obj : target,
+ pd->rel_pivot.cx, pd->rel_pivot.cy);
}
else
{
- efl_animation_object_rotate_absolute_set(anim_obj,
- pd->from.degree,
- pd->to.degree,
- pd->abs_pivot.cx,
- pd->abs_pivot.cy);
+ efl_gfx_map_rotate_absolute(target,
+ new_degree - prev_degree,
+ pd->abs_pivot.cx, pd->abs_pivot.cy);
}
- return anim_obj;
+ return progress;
}
EOLIAN static Efl_Object *
diff --git a/src/lib/evas/canvas/efl_animation_rotate.eo b/src/lib/evas/canvas/efl_animation_rotate.eo
index 2212de79d8..14c9901f2f 100644
--- a/src/lib/evas/canvas/efl_animation_rotate.eo
+++ b/src/lib/evas/canvas/efl_animation_rotate.eo
@@ -35,6 +35,6 @@ class Efl.Animation.Rotate (Efl.Animation)
}
implements {
Efl.Object.constructor;
- Efl.Animation.object_create;
+ Efl.Animation.animation_apply;
}
}
diff --git a/src/lib/evas/canvas/efl_animation_rotate_private.h b/src/lib/evas/canvas/efl_animation_rotate_private.h
index 63d3a0b390..5cbd64848a 100644
--- a/src/lib/evas/canvas/efl_animation_rotate_private.h
+++ b/src/lib/evas/canvas/efl_animation_rotate_private.h
@@ -2,9 +2,7 @@
#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)
+#include "efl_animation_private.h"
#define EFL_ANIMATION_ROTATE_DATA_GET(o, pd) \
Efl_Animation_Rotate_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_ROTATE_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_scale.c b/src/lib/evas/canvas/efl_animation_scale.c
index c34ddf7e8b..dbb4b765a4 100644
--- a/src/lib/evas/canvas/efl_animation_scale.c
+++ b/src/lib/evas/canvas/efl_animation_scale.c
@@ -1,7 +1,30 @@
#include "efl_animation_scale_private.h"
+#define MY_CLASS EFL_ANIMATION_SCALE_CLASS
+
+static Efl_Animation_Scale_Property
+_scale_get(Eo *target)
+{
+ double x1, x2, x3, y1, y2, y3, w, h;
+ Efl_Animation_Scale_Property scale;
+ Eina_Rect geometry;
+
+ geometry = efl_gfx_geometry_get(target);
+ efl_gfx_map_coord_absolute_get(target, 0, &x1, &y1, NULL);
+ efl_gfx_map_coord_absolute_get(target, 1, &x2, &y2, NULL);
+ efl_gfx_map_coord_absolute_get(target, 2, &x3, &y3, NULL);
+
+ w = sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));
+ h = sqrt(((x3 - x2) * (x3 - x2)) + ((y3 - y2) * (y3 - y2)));
+
+ scale.scale_x = w / geometry.w;
+ scale.scale_y = h / geometry.h;
+
+ return scale;
+}
+
EOLIAN static void
-_efl_animation_scale_scale_set(Eo *eo_obj,
+_efl_animation_scale_scale_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Scale_Data *pd,
double from_scale_x,
double from_scale_y,
@@ -21,29 +44,11 @@ _efl_animation_scale_scale_set(Eo *eo_obj,
pd->rel_pivot.cx = cx;
pd->rel_pivot.cy = cy;
- //Update absolute pivot based on relative pivot
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- if (pivot)
- evas_object_geometry_get(pivot, &x, &y, &w, &h);
- else
- {
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
- }
-
- pd->abs_pivot.cx = x + (w * cx);
- pd->abs_pivot.cy = y + (h * cy);
-
pd->use_rel_pivot = EINA_TRUE;
}
EOLIAN static void
-_efl_animation_scale_scale_get(Eo *eo_obj,
+_efl_animation_scale_scale_get(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Scale_Data *pd,
double *from_scale_x,
double *from_scale_y,
@@ -53,27 +58,10 @@ _efl_animation_scale_scale_get(Eo *eo_obj,
double *cx,
double *cy)
{
- //Update relative pivot based on absolute pivot
if (!pd->use_rel_pivot)
{
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
-
- if (w != 0)
- pd->rel_pivot.cx = (double)(pd->abs_pivot.cx - x) / w;
- else
- pd->rel_pivot.cx = 0.0;
-
- if (h != 0)
- pd->rel_pivot.cy = (double)(pd->abs_pivot.cy - y) / h;
- else
- pd->rel_pivot.cy = 0.0;
+ ERR("Animation is done in absolute value.");
+ return;
}
if (from_scale_x)
@@ -99,7 +87,7 @@ _efl_animation_scale_scale_get(Eo *eo_obj,
}
EOLIAN static void
-_efl_animation_scale_scale_absolute_set(Eo *eo_obj,
+_efl_animation_scale_scale_absolute_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Scale_Data *pd,
double from_scale_x,
double from_scale_y,
@@ -117,33 +105,11 @@ _efl_animation_scale_scale_absolute_set(Eo *eo_obj,
pd->abs_pivot.cx = cx;
pd->abs_pivot.cy = cy;
- //Update relative pivot based on absolute pivot
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
-
- pd->rel_pivot.obj = NULL;
-
- if (w != 0)
- pd->rel_pivot.cx = (double)(cx - x) / w;
- else
- pd->rel_pivot.cx = 0.0;
-
- if (h != 0)
- pd->rel_pivot.cy = (double)(cy - y) / h;
- else
- pd->rel_pivot.cy = 0.0;
-
pd->use_rel_pivot = EINA_FALSE;
}
EOLIAN static void
-_efl_animation_scale_scale_absolute_get(Eo *eo_obj,
+_efl_animation_scale_scale_absolute_get(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Scale_Data *pd,
double *from_scale_x,
double *from_scale_y,
@@ -152,25 +118,10 @@ _efl_animation_scale_scale_absolute_get(Eo *eo_obj,
Evas_Coord *cx,
Evas_Coord *cy)
{
- //Update absolute pivot based on relative pivot
if (pd->use_rel_pivot)
{
- Evas_Coord x = 0;
- Evas_Coord y = 0;
- Evas_Coord w = 0;
- Evas_Coord h = 0;
-
- if (pd->rel_pivot.obj)
- evas_object_geometry_get(pd->rel_pivot.obj, &x, &y, &w, &h);
- else
- {
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, &w, &h);
- }
-
- pd->abs_pivot.cx = x + (w * pd->rel_pivot.cx);
- pd->abs_pivot.cy = y + (h * pd->rel_pivot.cy);
+ ERR("Animation is done in relative value.");
+ return;
}
if (from_scale_x)
@@ -192,52 +143,39 @@ _efl_animation_scale_scale_absolute_get(Eo *eo_obj,
*cy = pd->abs_pivot.cy;
}
-EOLIAN static Efl_Animation_Object *
-_efl_animation_scale_efl_animation_object_create(Eo *eo_obj,
- Efl_Animation_Scale_Data *pd)
+EOLIAN static double
+_efl_animation_scale_efl_animation_animation_apply(Eo *eo_obj,
+ Efl_Animation_Scale_Data *pd,
+ double progress,
+ Efl_Canvas_Object *target)
{
- Efl_Animation_Object_Scale *anim_obj
- = efl_add(EFL_ANIMATION_OBJECT_SCALE_CLASS, NULL);
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- efl_animation_object_target_set(anim_obj, target);
-
- Eina_Bool state_keep = efl_animation_final_state_keep_get(eo_obj);
- efl_animation_object_final_state_keep_set(anim_obj, state_keep);
-
- double duration = efl_animation_duration_get(eo_obj);
- efl_animation_object_duration_set(anim_obj, duration);
-
- double start_delay_time = efl_animation_start_delay_get(eo_obj);
- efl_animation_object_start_delay_set(anim_obj, start_delay_time);
-
- Efl_Animation_Object_Repeat_Mode repeat_mode =
- (Efl_Animation_Object_Repeat_Mode)efl_animation_repeat_mode_get(eo_obj);
- efl_animation_object_repeat_mode_set(anim_obj, repeat_mode);
+ Efl_Animation_Scale_Property prev_scale;
+ Efl_Animation_Scale_Property new_scale;
- int repeat_count = efl_animation_repeat_count_get(eo_obj);
- efl_animation_object_repeat_count_set(anim_obj, repeat_count);
+ progress = efl_animation_apply(efl_super(eo_obj, MY_CLASS), progress, target);
+ if (!target) return progress;
- Efl_Interpolator *interpolator = efl_animation_interpolator_get(eo_obj);
- efl_animation_object_interpolator_set(anim_obj, interpolator);
+ prev_scale = _scale_get(target);
+ new_scale.scale_x = GET_STATUS(pd->from.scale_x, pd->to.scale_x, progress);
+ new_scale.scale_y = GET_STATUS(pd->from.scale_y, pd->to.scale_y, progress);
if (pd->use_rel_pivot)
{
- efl_animation_object_scale_set(anim_obj,
- pd->from.scale_x, pd->from.scale_y,
- pd->to.scale_x, pd->to.scale_y,
- pd->rel_pivot.obj,
- pd->rel_pivot.cx, pd->rel_pivot.cy);
+ efl_gfx_map_zoom(target,
+ new_scale.scale_x / prev_scale.scale_x,
+ new_scale.scale_y / prev_scale.scale_y,
+ (pd->rel_pivot.obj) ? pd->rel_pivot.obj : target,
+ pd->rel_pivot.cx, pd->rel_pivot.cy);
}
else
{
- efl_animation_object_scale_absolute_set(anim_obj,
- pd->from.scale_x, pd->from.scale_y,
- pd->to.scale_x, pd->to.scale_y,
- pd->abs_pivot.cx, pd->abs_pivot.cy);
+ efl_gfx_map_zoom_absolute(target,
+ new_scale.scale_x / prev_scale.scale_x,
+ new_scale.scale_y / prev_scale.scale_y,
+ pd->abs_pivot.cx, pd->abs_pivot.cy);
}
- return anim_obj;
+ return progress;
}
EOLIAN static Efl_Object *
@@ -248,6 +186,8 @@ _efl_animation_scale_efl_object_constructor(Eo *eo_obj,
pd->from.scale_x = 1.0;
pd->from.scale_y = 1.0;
+ pd->to.scale_x = 1.0;
+ pd->to.scale_y = 1.0;
pd->rel_pivot.obj = NULL;
pd->rel_pivot.cx = 0.5;
diff --git a/src/lib/evas/canvas/efl_animation_scale.eo b/src/lib/evas/canvas/efl_animation_scale.eo
index 34f1ec1cf4..312ac4e041 100644
--- a/src/lib/evas/canvas/efl_animation_scale.eo
+++ b/src/lib/evas/canvas/efl_animation_scale.eo
@@ -39,6 +39,6 @@ class Efl.Animation.Scale (Efl.Animation)
}
implements {
Efl.Object.constructor;
- Efl.Animation.object_create;
+ Efl.Animation.animation_apply;
}
}
diff --git a/src/lib/evas/canvas/efl_animation_scale_private.h b/src/lib/evas/canvas/efl_animation_scale_private.h
index 96a6030289..603eac3cc8 100644
--- a/src/lib/evas/canvas/efl_animation_scale_private.h
+++ b/src/lib/evas/canvas/efl_animation_scale_private.h
@@ -2,9 +2,7 @@
#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)
+#include "efl_animation_private.h"
#define EFL_ANIMATION_SCALE_DATA_GET(o, pd) \
Efl_Animation_Scale_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_SCALE_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_translate.c b/src/lib/evas/canvas/efl_animation_translate.c
index 4dad1d87ea..4464c59e6a 100644
--- a/src/lib/evas/canvas/efl_animation_translate.c
+++ b/src/lib/evas/canvas/efl_animation_translate.c
@@ -1,7 +1,32 @@
#include "efl_animation_translate_private.h"
+#define MY_CLASS EFL_ANIMATION_TRANSLATE_CLASS
+
+typedef struct __Translate_Property_Double
+{
+ double x;
+ double y;
+} _Translate_Property_Double;
+
+static _Translate_Property_Double
+_translation_get(Eo *target)
+{
+ double x1, x2, y1, y2;
+ _Translate_Property_Double translate;
+ Eina_Rect geometry;
+
+ geometry = efl_gfx_geometry_get(target);
+
+ efl_gfx_map_coord_absolute_get(target, 0, &x1, &y1, NULL);
+ efl_gfx_map_coord_absolute_get(target, 2, &x2, &y2, NULL);
+ translate.x = ((x1 + x2) / 2.0) - (geometry.x + (geometry.w / 2.0));
+ translate.y = ((y1 + y2) / 2.0) - (geometry.y + (geometry.h / 2.0));
+
+ return translate;
+}
+
EOLIAN static void
-_efl_animation_translate_translate_set(Eo *eo_obj,
+_efl_animation_translate_translate_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Translate_Data *pd,
Evas_Coord from_x,
Evas_Coord from_y,
@@ -14,46 +39,21 @@ _efl_animation_translate_translate_set(Eo *eo_obj,
pd->to.move_x = to_x;
pd->to.move_y = to_y;
- //Update absolute coordinate based on relative move
- Evas_Coord x = 0;
- Evas_Coord y = 0;
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, NULL, NULL);
-
- pd->from.x = pd->from.move_x + x;
- pd->from.y = pd->from.move_y + y;
-
- pd->to.x = pd->to.move_x + x;
- pd->to.y = pd->to.move_y + y;
-
pd->use_rel_move = EINA_TRUE;
}
EOLIAN static void
-_efl_animation_translate_translate_get(Eo *eo_obj,
+_efl_animation_translate_translate_get(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Translate_Data *pd,
Evas_Coord *from_x,
Evas_Coord *from_y,
Evas_Coord *to_x,
Evas_Coord *to_y)
{
- //Update relative move based on absolute coordinate
if (!pd->use_rel_move)
{
- Evas_Coord x = 0;
- Evas_Coord y = 0;
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, NULL, NULL);
-
- pd->from.move_x = pd->from.x - x;
- pd->from.move_y = pd->from.y - y;
-
- pd->to.move_x = pd->to.x - x;
- pd->to.move_y = pd->to.y - y;
+ ERR("Animation is done in absolute value.");
+ return;
}
if (from_x)
@@ -68,7 +68,7 @@ _efl_animation_translate_translate_get(Eo *eo_obj,
}
EOLIAN static void
-_efl_animation_translate_translate_absolute_set(Eo *eo_obj,
+_efl_animation_translate_translate_absolute_set(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Translate_Data *pd,
Evas_Coord from_x,
Evas_Coord from_y,
@@ -81,46 +81,21 @@ _efl_animation_translate_translate_absolute_set(Eo *eo_obj,
pd->to.x = to_x;
pd->to.y = to_y;
- //Update relative move based on absolute coordinate
- Evas_Coord x = 0;
- Evas_Coord y = 0;
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, NULL, NULL);
-
- pd->from.move_x = pd->from.x - x;
- pd->from.move_y = pd->from.y - y;
-
- pd->to.move_x = pd->to.x - x;
- pd->to.move_y = pd->to.y - y;
-
pd->use_rel_move = EINA_FALSE;
}
EOLIAN static void
-_efl_animation_translate_translate_absolute_get(Eo *eo_obj,
+_efl_animation_translate_translate_absolute_get(Eo *eo_obj EINA_UNUSED,
Efl_Animation_Translate_Data *pd,
Evas_Coord *from_x,
Evas_Coord *from_y,
Evas_Coord *to_x,
Evas_Coord *to_y)
{
- //Update absolute coordinate based on relative move
if (pd->use_rel_move)
{
- Evas_Coord x = 0;
- Evas_Coord y = 0;
-
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- if (target)
- evas_object_geometry_get(target, &x, &y, NULL, NULL);
-
- pd->from.x = pd->from.move_x + x;
- pd->from.y = pd->from.move_y + y;
-
- pd->to.x = pd->to.move_x + x;
- pd->to.y = pd->to.move_y + y;
+ ERR("Animation is done in absolute value.");
+ return;
}
if (from_x)
@@ -134,53 +109,33 @@ _efl_animation_translate_translate_absolute_get(Eo *eo_obj,
*to_y = pd->to.y;
}
-EOLIAN static Efl_Animation_Object *
-_efl_animation_translate_efl_animation_object_create(Eo *eo_obj,
- Efl_Animation_Translate_Data *pd)
+EOLIAN static double
+_efl_animation_translate_efl_animation_animation_apply(Eo *eo_obj,
+ Efl_Animation_Translate_Data *pd,
+ double progress,
+ Efl_Canvas_Object *target)
{
- Efl_Animation_Object_Translate *anim_obj
- = efl_add(EFL_ANIMATION_OBJECT_TRANSLATE_CLASS, NULL);
+ _Translate_Property_Double prev;
+ _Translate_Property_Double new;
- Efl_Canvas_Object *target = efl_animation_target_get(eo_obj);
- efl_animation_object_target_set(anim_obj, target);
-
- Eina_Bool state_keep = efl_animation_final_state_keep_get(eo_obj);
- efl_animation_object_final_state_keep_set(anim_obj, state_keep);
-
- double duration = efl_animation_duration_get(eo_obj);
- efl_animation_object_duration_set(anim_obj, duration);
-
- double start_delay_time = efl_animation_start_delay_get(eo_obj);
- efl_animation_object_start_delay_set(anim_obj, start_delay_time);
-
- Efl_Animation_Object_Repeat_Mode repeat_mode =
- (Efl_Animation_Object_Repeat_Mode)efl_animation_repeat_mode_get(eo_obj);
- efl_animation_object_repeat_mode_set(anim_obj, repeat_mode);
-
- 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);
+ progress = efl_animation_apply(efl_super(eo_obj, MY_CLASS), progress, target);
+ if (!target) return progress;
+ prev = _translation_get(target);
if (pd->use_rel_move)
{
- efl_animation_object_translate_set(anim_obj,
- pd->from.move_x,
- pd->from.move_y,
- pd->to.move_x,
- pd->to.move_y);
+ new.x = GET_STATUS(pd->from.move_x, pd->to.move_x, progress);
+ new.y = GET_STATUS(pd->from.move_y, pd->to.move_y, progress);
}
else
{
- efl_animation_object_translate_absolute_set(anim_obj,
- pd->from.x,
- pd->from.y,
- pd->to.x,
- pd->to.y);
+ new.x = GET_STATUS(pd->from.x, pd->to.x, progress);
+ new.y = GET_STATUS(pd->from.y, pd->to.y, progress);
}
- return anim_obj;
+ efl_gfx_map_translate(target, new.x - prev.x, new.y - prev.y, 0.0);
+
+ return progress;
}
EOLIAN static Efl_Object *
diff --git a/src/lib/evas/canvas/efl_animation_translate.eo b/src/lib/evas/canvas/efl_animation_translate.eo
index 68b7a77710..59e0c5e649 100644
--- a/src/lib/evas/canvas/efl_animation_translate.eo
+++ b/src/lib/evas/canvas/efl_animation_translate.eo
@@ -34,6 +34,6 @@ class Efl.Animation.Translate (Efl.Animation)
}
implements {
Efl.Object.constructor;
- Efl.Animation.object_create;
+ Efl.Animation.animation_apply;
}
}
diff --git a/src/lib/evas/canvas/efl_animation_translate_private.h b/src/lib/evas/canvas/efl_animation_translate_private.h
index 8243ee8bea..05f2f7c6f9 100644
--- a/src/lib/evas/canvas/efl_animation_translate_private.h
+++ b/src/lib/evas/canvas/efl_animation_translate_private.h
@@ -2,9 +2,7 @@
#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)
+#include "efl_animation_private.h"
#define EFL_ANIMATION_TRANSLATE_DATA_GET(o, pd) \
Efl_Animation_Translate_Data *pd = efl_data_scope_get(o, EFL_ANIMATION_TRANSLATE_CLASS)
diff --git a/src/lib/evas/canvas/efl_animation_types.eot b/src/lib/evas/canvas/efl_animation_types.eot
index bb29937f24..8eaf5fdb31 100644
--- a/src/lib/evas/canvas/efl_animation_types.eot
+++ b/src/lib/evas/canvas/efl_animation_types.eot
@@ -1,7 +1,7 @@
// ----------------------------------------------------------------------------
// All the below types are for Efl Animation
-struct Efl.Animation.Object.Running_Event_Info; [[Information of running event]]
+struct Efl.Animation.Player.Running_Event_Info; [[Information of running event]]
enum Efl.Animation.Repeat_Mode
{
diff --git a/src/lib/evas/canvas/evas_object_intercept.c b/src/lib/evas/canvas/evas_object_intercept.c
index 0676f6e759..c18e43d52c 100644
--- a/src/lib/evas/canvas/evas_object_intercept.c
+++ b/src/lib/evas/canvas/evas_object_intercept.c
@@ -106,11 +106,7 @@ _evas_object_intercept_call_internal(Evas_Object *eo_obj,
/* If show is called during hide animation is running, then the
* current hide animation is cancelled and show operation is
* proceeded. */
- if (i &&
- _efl_canvas_object_event_animation_is_running(eo_obj,
- EFL_GFX_EVENT_HIDE))
- _efl_canvas_object_event_animation_cancel(eo_obj);
- else
+ if ((!obj->anim_player) || (!efl_player_play_get(obj->anim_player)))
return 1;
}
if (!obj->interceptors) return 0;
diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c
index b18861f90a..bcc853534e 100644
--- a/src/lib/evas/canvas/evas_object_main.c
+++ b/src/lib/evas/canvas/evas_object_main.c
@@ -53,10 +53,6 @@ typedef struct _Event_Animation
const Efl_Event_Description *desc;
Efl_Animation *anim;
- Efl_Animation_Object *anim_obj;
-
- Eina_Bool hide_anim_started : 1;
- Eina_Bool hide_anim_ended : 1;
} Event_Animation;
static Eina_Bool
@@ -178,80 +174,57 @@ _evas_object_pointer_data_get(Evas_Pointer_Data *evas_pdata,
}
static void _animation_intercept_hide(void *data, Evas_Object *eo_obj);
+static void _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj);
static void
-_animation_hide_end_cb(void *data, const Efl_Event *event EINA_UNUSED)
+_animation_end_cb(void *data, const Efl_Event *event)
{
- Event_Animation *event_anim = data;
-
- event_anim->hide_anim_ended = EINA_TRUE;
+ Evas_Object_Protected_Data *obj;
+ Event_Animation *event_anim = data;
- //Animation Object is automatically deleted when animation is ended.
- event_anim->anim_obj = NULL;
+ obj = EVAS_OBJECT_DATA_SAFE_GET(efl_animation_player_target_get(event->object));
+ if (!obj) return;
- Evas_Object *target = efl_animation_target_get(event_anim->anim);
- _animation_intercept_hide(event_anim, target);
+ if (efl_animation_player_animation_get(event->object) != event_anim->anim)
+ return;
- event_anim->hide_anim_started = EINA_FALSE;
- event_anim->hide_anim_ended = EINA_FALSE;
+ _hide(obj->object, obj);
}
-static void _all_animation_objects_cancel(Evas_Object_Protected_Data *obj);
-
static void
_animation_intercept_hide(void *data, Evas_Object *eo_obj)
{
Event_Animation *event_anim = data;
Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
- if (event_anim->anim &&
- !event_anim->hide_anim_started && !event_anim->hide_anim_ended)
+ if (event_anim->anim && obj->anim_player &&
+ (event_anim->anim != efl_animation_player_animation_get(obj->anim_player)))
{
- event_anim->hide_anim_started = EINA_TRUE;
-
- if (obj) _all_animation_objects_cancel(obj);
-
- //Create animation object to start animation
- event_anim->anim_obj = efl_animation_object_create(event_anim->anim);
-
- efl_event_callback_add(event_anim->anim_obj,
- EFL_ANIMATION_OBJECT_EVENT_ENDED,
- _animation_hide_end_cb,
- event_anim);
-
+ efl_animation_player_animation_set(obj->anim_player, event_anim->anim);
//Start animation
- efl_animation_object_start(event_anim->anim_obj);
+ efl_player_start(obj->anim_player);
}
- else
- efl_gfx_visible_set(eo_obj, EINA_FALSE);
}
static void
-_event_anim_free(Event_Animation *event_anim)
+_event_anim_free(Event_Animation *event_anim, Evas_Object_Protected_Data *obj)
{
if (event_anim->anim)
{
//Deallocate memory and Unset callbacks for Hide event
if (event_anim->desc == EFL_GFX_EVENT_HIDE)
{
- Efl_Canvas_Object *target =
- efl_animation_target_get(event_anim->anim);
-
- evas_object_intercept_hide_callback_del(target,
+ evas_object_intercept_hide_callback_del(obj->object,
_animation_intercept_hide);
-
- if (event_anim->hide_anim_started &&
- !event_anim->hide_anim_ended)
- efl_gfx_visible_set(target, EINA_FALSE);
+ efl_event_callback_del(obj->anim_player,
+ EFL_ANIMATION_PLAYER_EVENT_ENDED,
+ _animation_end_cb,
+ event_anim);
+ if (efl_player_play_get(obj->anim_player))
+ efl_gfx_visible_set(obj->object, EINA_FALSE);
}
}
- if (event_anim->anim_obj)
- {
- efl_del(event_anim->anim_obj);
- event_anim->anim_obj = NULL;
- }
-
free(event_anim);
}
@@ -595,18 +568,6 @@ evas_object_free(Evas_Object *eo_obj, Eina_Bool clean_layer)
eina_cow_free(evas_object_mask_cow, (const Eina_Cow_Data**) &obj->mask);
eina_cow_free(evas_object_events_cow, (const Eina_Cow_Data**) &obj->events);
- //Free event animations
- while (obj->event_anims)
- {
- Event_Animation *event_anim =
- EINA_INLIST_CONTAINER_GET(obj->event_anims, Event_Animation);
-
- obj->event_anims =
- eina_inlist_remove(obj->event_anims, obj->event_anims);
-
- _event_anim_free(event_anim);
- }
-
efl_data_unref(eo_obj, obj->private_data);
obj->private_data = NULL;
@@ -1133,17 +1094,6 @@ _is_event_blocked(Eo *eo_obj, const Efl_Event_Description *desc,
return EINA_FALSE;
}
-static Eina_Bool
-_efl_animation_event_type_is_inform_call(const Efl_Event_Description *desc)
-{
- if ((desc == EFL_GFX_EVENT_SHOW) || (desc == EFL_GFX_EVENT_HIDE) ||
- (desc == EFL_GFX_EVENT_MOVE) || (desc == EFL_GFX_EVENT_RESIZE) ||
- (desc == EFL_GFX_EVENT_CHANGE_SIZE_HINTS))
- return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
static Event_Animation *
_event_animation_find(Evas_Object_Protected_Data *obj,
const Efl_Event_Description *desc)
@@ -1157,43 +1107,6 @@ _event_animation_find(Evas_Object_Protected_Data *obj,
return NULL;
}
-static Efl_Animation_Object *
-_event_animation_object_get(Evas_Object_Protected_Data *obj,
- const Efl_Event_Description *desc)
-{
- Event_Animation *event_anim = _event_animation_find(obj, desc);
- if (event_anim && event_anim->anim_obj)
- return event_anim->anim_obj;
-
- return NULL;
-}
-
-static void
-_all_animation_objects_cancel(Evas_Object_Protected_Data *obj)
-{
- if (obj->event_anims)
- {
- Event_Animation *event_anim;
- EINA_INLIST_FOREACH(obj->event_anims, event_anim)
- {
- if (event_anim && event_anim->anim_obj)
- {
- efl_animation_object_cancel(event_anim->anim_obj);
- event_anim->anim_obj = NULL;
- }
- }
- }
-}
-
-static void
-_animation_end_cb(void *data, const Efl_Event *event EINA_UNUSED)
-{
- Event_Animation *event_anim = data;
-
- //Animation Object is automatically deleted when animation is ended.
- event_anim->anim_obj = NULL;
-}
-
EOLIAN static Eina_Bool
_efl_canvas_object_efl_object_event_callback_call(Eo *eo_obj,
Evas_Object_Protected_Data *obj,
@@ -1205,24 +1118,16 @@ _efl_canvas_object_efl_object_event_callback_call(Eo *eo_obj,
//Start animation corresponding to the current event
if (desc)
{
- if (!_efl_animation_event_type_is_inform_call(desc))
+ if ((desc != EFL_GFX_EVENT_HIDE) && desc != (EFL_GFX_EVENT_SHOW))
{
Event_Animation *event_anim = _event_animation_find(obj, desc);
if (event_anim)
{
- _all_animation_objects_cancel(obj);
-
//Create animation object to start animation
- event_anim->anim_obj =
- efl_animation_object_create(event_anim->anim);
-
- efl_event_callback_add(event_anim->anim_obj,
- EFL_ANIMATION_OBJECT_EVENT_ENDED,
- _animation_end_cb,
- event_anim);
+ efl_animation_player_animation_set(obj->anim_player, event_anim->anim);
//Start animation
- efl_animation_object_start(event_anim->anim_obj);
+ efl_player_start(obj->anim_player);
}
}
}
@@ -1242,24 +1147,16 @@ _efl_canvas_object_efl_object_event_callback_legacy_call(Eo *eo_obj,
//Start animation corresponding to the current event
if (desc)
{
- if (!_efl_animation_event_type_is_inform_call(desc))
+ if ((desc != EFL_GFX_EVENT_HIDE) && desc != (EFL_GFX_EVENT_SHOW))
{
Event_Animation *event_anim = _event_animation_find(obj, desc);
if (event_anim)
{
- _all_animation_objects_cancel(obj);
-
//Create animation object to start animation
- event_anim->anim_obj =
- efl_animation_object_create(event_anim->anim);
-
- efl_event_callback_add(event_anim->anim_obj,
- EFL_ANIMATION_OBJECT_EVENT_ENDED,
- _animation_end_cb,
- event_anim);
+ efl_animation_player_animation_set(obj->anim_player, event_anim->anim);
//Start animation
- efl_animation_object_start(event_anim->anim_obj);
+ efl_player_start(obj->anim_player);
}
}
}
@@ -1362,6 +1259,18 @@ _efl_canvas_object_efl_object_destructor(Eo *eo_obj, Evas_Object_Protected_Data
if (obj->cur->clipper) evas_object_clip_unset(eo_obj);
_efl_canvas_object_clip_prev_reset(obj, EINA_FALSE);
+ //Free event animations
+ while (obj->event_anims)
+ {
+ Event_Animation *event_anim =
+ EINA_INLIST_CONTAINER_GET(obj->event_anims, Event_Animation);
+
+ obj->event_anims =
+ eina_inlist_remove(obj->event_anims, obj->event_anims);
+
+ _event_anim_free(event_anim, obj);
+ }
+
evas_object_map_set(eo_obj, NULL);
if (obj->is_smart) evas_object_smart_del(eo_obj);
event_id = _evas_object_event_new();
@@ -1929,6 +1838,8 @@ evas_object_visible_get(const Evas_Object *obj)
static void
_show(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
{
+ if (obj->anim_player)
+ efl_player_stop(obj->anim_player);
if (obj->is_smart && obj->smart.smart && obj->smart.smart->smart_class->show)
{
obj->smart.smart->smart_class->show(eo_obj);
@@ -1965,19 +1876,11 @@ _show(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
Event_Animation *event_anim = _event_animation_find(obj, EFL_GFX_EVENT_SHOW);
if (event_anim)
{
- _all_animation_objects_cancel(obj);
-
//Create animation object to start animation
- event_anim->anim_obj =
- efl_animation_object_create(event_anim->anim);
-
- efl_event_callback_add(event_anim->anim_obj,
- EFL_ANIMATION_OBJECT_EVENT_ENDED,
- _animation_end_cb,
- event_anim);
+ efl_animation_player_animation_set(obj->anim_player, event_anim->anim);
//Start animation
- efl_animation_object_start(event_anim->anim_obj);
+ efl_player_start(obj->anim_player);
}
}
@@ -2098,7 +2001,6 @@ _efl_canvas_object_efl_gfx_visible_set(Eo *eo_obj, Evas_Object_Protected_Data *o
{
if (!obj->legacy.visible_set)
obj->legacy.visible_set = EINA_TRUE;
-
if (_evas_object_intercept_call_evas(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 1, vis))
return;
@@ -2760,6 +2662,12 @@ _efl_canvas_object_event_animation_set(Eo *eo_obj,
{
Event_Animation *event_anim = _event_animation_find(pd, desc);
+ if (!pd->anim_player)
+ {
+ pd->anim_player = efl_add(EFL_ANIMATION_PLAYER_CLASS, eo_obj,
+ efl_animation_player_target_set(efl_added, eo_obj));
+ }
+
if (event_anim)
{
if (event_anim->anim == animation)
@@ -2768,32 +2676,27 @@ _efl_canvas_object_event_animation_set(Eo *eo_obj,
pd->event_anims =
eina_inlist_remove(pd->event_anims, EINA_INLIST_GET(event_anim));
- _event_anim_free(event_anim);
+ _event_anim_free(event_anim, pd);
}
if (!animation) return;
event_anim = calloc(1, sizeof(Event_Animation));
- //Set target object for the given animation
- Efl_Canvas_Object *target = efl_animation_target_get(animation);
- if (!target)
- target = eo_obj;
- efl_animation_target_set(animation, target);
-
//Set callback for Hide event
if (desc == EFL_GFX_EVENT_HIDE)
{
- evas_object_intercept_hide_callback_add(target,
+ evas_object_intercept_hide_callback_add(eo_obj,
_animation_intercept_hide,
event_anim);
+ efl_event_callback_add(pd->anim_player,
+ EFL_ANIMATION_PLAYER_EVENT_ENDED,
+ _animation_end_cb,
+ event_anim);
}
event_anim->desc = desc;
event_anim->anim = animation;
- event_anim->anim_obj = NULL;
- event_anim->hide_anim_started = EINA_FALSE;
- event_anim->hide_anim_ended = EINA_FALSE;
pd->event_anims =
eina_inlist_append(pd->event_anims, EINA_INLIST_GET(event_anim));
@@ -2805,38 +2708,21 @@ _efl_canvas_object_event_animation_get(Eo *eo_obj EINA_UNUSED,
const Efl_Event_Description *desc)
{
Event_Animation *event_anim = _event_animation_find(pd, desc);
- if (event_anim && event_anim->anim)
- return event_anim->anim_obj;
+ if (event_anim)
+ return event_anim->anim;
return NULL;
}
-/* This function is to show object if show is called during hide animation.
- * If show is called during hide animation is running, then the running hide
- * animation is cancelled and show operation is proceeded. */
-Eina_Bool
-_efl_canvas_object_event_animation_is_running(Eo *eo_obj,
- const Efl_Event_Description *desc)
-{
- Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
-
- if (!obj) return EINA_FALSE;
-
- if (_event_animation_object_get(obj, desc))
- return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
void
_efl_canvas_object_event_animation_cancel(Eo *eo_obj)
{
Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
- if (obj) _all_animation_objects_cancel(obj);
+ if (obj)
+ efl_player_stop(obj->anim_player);
}
-
/* legacy */
EAPI const char *
diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h
index a9bd98196c..168a7569d6 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1130,6 +1130,8 @@ struct _Evas_Object_Protected_Data
// Pointer to the Evas_Object itself
Evas_Object *object;
+ Evas_Object *anim_player;
+
Evas_Size_Hints *size_hints;
int last_mouse_down_counter;
@@ -1877,10 +1879,6 @@ void _evas_touch_point_remove(Evas *e, int id);
void _evas_device_cleanup(Evas *e);
Evas_Device *_evas_device_top_get(const Evas *e);
-/* to show object if show is called during hide animation */
-Eina_Bool _efl_canvas_object_event_animation_is_running(Eo *eo_obj, const Efl_Event_Description *desc);
-void _efl_canvas_object_event_animation_cancel(Eo *eo_obj);
-
/* legacy/eo events */
void *efl_input_pointer_legacy_info_fill(Evas *eo_evas, Efl_Input_Key *eo_ev, Evas_Callback_Type type, Evas_Event_Flags **pflags);
void *efl_input_key_legacy_info_fill(Efl_Input_Key *evt, Evas_Event_Flags **pflags);