From 80bf934e2193cc0b7a6219c040dbdda9b11c849f Mon Sep 17 00:00:00 2001 From: ChunEon Park Date: Fri, 7 Jan 2011 06:23:20 +0000 Subject: [PATCH] From: ChunEon Park Even it looks somewhat alien elm, I hope EFL supports basic effect by using c and edc. In some cases, it is useful for app developers. They want to use effects easily and quickly as Other F/W does providing. Here is patch again. Added two lines for elm_transit_duration_set exception handling. I guess there are possibilities still to add/modify some functions to the transit. So, currently the exception cases does not defined yet. But I will try patches soon as perfect things. Please consider about transit. And.. if this transit is acceptable, How about deprecate elm_animator as soon as possible? SVN revision: 55966 --- src/bin/test_transit.c | 59 +++++++++++++++++++++++++-------- src/lib/Elementary.h.in | 5 ++- src/lib/elm_transit.c | 73 +++++++++++++++++++++++++++++++++++------ 3 files changed, 113 insertions(+), 24 deletions(-) diff --git a/src/bin/test_transit.c b/src/bin/test_transit.c index 902113530..a3d8999f1 100644 --- a/src/bin/test_transit.c +++ b/src/bin/test_transit.c @@ -34,11 +34,11 @@ _custom_op(void *data, Elm_Transit *transit, double progress) { h = custom_effect->from.h + custom_effect->to.h; w = custom_effect->from.w + \ - (custom_effect->to.w * (progress - 0.5) * 2); + (custom_effect->to.w * (progress - 0.5) * 2); } EINA_LIST_FOREACH(objs, elist, obj) - evas_object_resize(obj, w, h); + evas_object_resize(obj, w, h); } @@ -69,7 +69,7 @@ _transit_rotation_translation_color(void *data __UNUSED__, Evas_Object *obj, voi { Elm_Transit *trans; - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_object_add(trans, obj); elm_transit_auto_reverse_set(trans, EINA_TRUE); elm_transit_repeat_times_set(trans, 2); @@ -82,6 +82,9 @@ _transit_rotation_translation_color(void *data __UNUSED__, Evas_Object *obj, voi /* Rotation Effect */ elm_transit_effect_rotation_add(trans, 0.0, 135.0, EINA_FALSE); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } static void @@ -89,13 +92,16 @@ _transit_wipe(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED { Elm_Transit *trans; - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_object_add(trans, obj); elm_transit_auto_reverse_set(trans, EINA_TRUE); elm_transit_effect_wipe_add(trans, ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE, ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } static void @@ -118,10 +124,13 @@ _transit_image_animation(void *data, Evas_Object *obj __UNUSED__, void *event_in snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); images = eina_list_append(images, eina_stringshare_add(buf)); - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_object_add(trans, ic); - + elm_transit_effect_image_animation_add(trans, images); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } static void @@ -129,9 +138,13 @@ _transit_resizing(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *even { Elm_Transit *trans; - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_object_add(trans, obj); + elm_transit_effect_resizing_add(trans, 100, 50, 300, 150); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } static void @@ -140,10 +153,14 @@ _transit_flip(void *data, Evas_Object *obj, void *event_info __UNUSED__) Elm_Transit *trans; Evas_Object *obj2 = data; - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_object_add(trans, obj); elm_transit_object_add(trans, obj2); + elm_transit_effect_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_X, EINA_TRUE); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } static void @@ -151,9 +168,13 @@ _transit_zoom(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in { Elm_Transit *trans; - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_object_add(trans, obj); + elm_transit_effect_zoom_add(trans, 1.0, 3.0); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } static void @@ -162,10 +183,14 @@ _transit_blend(void *data, Evas_Object *obj, void *event_info __UNUSED__) Elm_Transit *trans; Evas_Object *obj2 = data; - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_object_add(trans, obj); elm_transit_object_add(trans, obj2); + elm_transit_effect_blend_add(trans); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } static void @@ -174,10 +199,14 @@ _transit_fade(void *data, Evas_Object *obj, void *event_info __UNUSED__) Elm_Transit *trans; Evas_Object *obj2 = data; - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_object_add(trans, obj); elm_transit_object_add(trans, obj2); + elm_transit_effect_fade_add(trans); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } static void @@ -186,10 +215,14 @@ _transit_resizable_flip(void *data, Evas_Object *obj, void *event_info __UNUSED_ Elm_Transit *trans; Evas_Object *obj2 = data; - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_object_add(trans, obj); elm_transit_object_add(trans, obj2); + elm_transit_effect_resizable_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } /* Translation, Rotation, Color, Wipe, ImagemAnimation Effect */ @@ -433,7 +466,7 @@ test_transit7(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in evas_object_show(bt); evas_object_move(bt, 50, 100); evas_object_resize(bt, 200, 30); - + bt2 = elm_button_add(win); elm_button_label_set(bt2, "Back Button - Resizable Flip Effect"); evas_object_move(bt2, 50, 100); diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index 0cb25743d..691e12a8a 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -2470,7 +2470,7 @@ extern "C" { typedef struct _Elm_Transit Elm_Transit; - EAPI Elm_Transit *elm_transit_add(double duration); + EAPI Elm_Transit *elm_transit_add(); EAPI void elm_transit_del(Elm_Transit *transit) EINA_ARG_NONNULL(1); EAPI void elm_transit_effect_add(Elm_Transit *transit, void (*cb)(void *data, Elm_Transit *transit, double progress), void *data, void (*data_free_cb)(void *data, Elm_Transit *transit)) EINA_ARG_NONNULL(1, 2); EAPI void elm_transit_effect_del(Elm_Transit *transit, void (*cb)(void *data, Elm_Transit *transit, double progress), void *data) EINA_ARG_NONNULL(1, 2); @@ -2488,6 +2488,9 @@ extern "C" { EAPI int elm_transit_repeat_times_get(Elm_Transit *transit) EINA_ARG_NONNULL(1); EAPI void elm_transit_tween_mode_set(Elm_Transit *transit, Elm_Transit_Tween_Mode tween_mode) EINA_ARG_NONNULL(1); EAPI Elm_Transit_Tween_Mode elm_transit_tween_mode_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1) EINA_ARG_NONNULL(1); + EAPI void elm_transit_duration_set(Elm_Transit *transit, double duration) EINA_ARG_NONNULL(1); + EAPI double elm_transit_duration_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1); + EAPI void elm_transit_go(Elm_Transit *transit) EINA_ARG_NONNULL(1); EAPI void *elm_transit_effect_resizing_add(Elm_Transit* transit, Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord to_h); EAPI void *elm_transit_effect_translation_add(Elm_Transit* transit, Evas_Coord from_dx, Evas_Coord dy, Evas_Coord to_dx, Evas_Coord to_dy); diff --git a/src/lib/elm_transit.c b/src/lib/elm_transit.c index 543a47fe8..a3884d974 100644 --- a/src/lib/elm_transit.c +++ b/src/lib/elm_transit.c @@ -30,13 +30,14 @@ * * Example: * @code - * Elm_Transit *trans = elm_transit_add(5.0); + * Elm_Transit *trans = elm_transit_add(); * elm_transit_object_add(trans, obj); * void *effect_context = elm_transit_effect_translation_context_new(0.0, 0.0, * 280.0, 280.0); * elm_transit_effect_add(transit, * elm_transit_effect_translation_op, effect_context, * elm_transit_effect_translation_context_free); + * elm_transit_duration_set(transit, 5); * elm_transit_auto_reverse_set(transit, EINA_TRUE); * elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE); * elm_transit_repeat_times_set(transit, -1); @@ -263,23 +264,17 @@ _animator_animate_cb(void *data) * @ingroup Transit */ EAPI Elm_Transit * -elm_transit_add(double duration) +elm_transit_add() { Elm_Transit *transit = ELM_NEW(Elm_Transit); - if (!transit) return NULL; EINA_MAGIC_SET(transit, ELM_TRANSIT_MAGIC); elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_LINEAR); - transit->time.duration = duration; - transit->time.begin = ecore_loop_time_get(); - transit->animator = ecore_animator_add(_animator_animate_cb, transit); - return transit; } - /** * Stops the animation and delete the @p transit object. * @@ -316,7 +311,7 @@ elm_transit_del(Elm_Transit *transit) * * Exemple: * @code - * Elm_Transit *transit = elm_transit_add(5.0); + * Elm_Transit *transit = elm_transit_add(); * elm_transit_effect_add(transit, * elm_transit_effect_blend_op, * elm_transit_effect_blend_context_new(), @@ -741,6 +736,64 @@ elm_transit_tween_mode_get(const Elm_Transit *transit) return transit->tween_mode; } +/** + * Set the transit animation time + * + * @note @p transit can not be NULL + * + * @param transit The transit object. + * @param duration The animation time. + * + * @ingroup Transit + */ +EAPI void +elm_transit_duration_set(Elm_Transit *transit, double duration) +{ + ELM_TRANSIT_CHECK_OR_RETURN(transit); + if (transit->animator) return; + transit->time.duration = duration; +} + +/** + * Get the transit animation time + * + * @note @p transit can not be NULL + * + * @param transit The transit object. + * + * @return The transit animation time. + * + * @ingroup Transit + */ +EAPI double +elm_transit_duration_get(const Elm_Transit *transit) +{ + ELM_TRANSIT_CHECK_OR_RETURN(transit); + return transit->time.duration; +} + +/** + * Starts the transition. + * Once this API is called, the transit begins to measure the time. + * + * @note @p transit can not be NULL + * + * @param transit The transit object. + * + * @ingroup Transit + */ +EAPI void +elm_transit_go(Elm_Transit *transit) +{ + ELM_TRANSIT_CHECK_OR_RETURN(transit); + + if (transit->animator) + ecore_animator_del(transit->animator); + + transit->time.begin = ecore_loop_time_get(); + transit->animator = ecore_animator_add(_animator_animate_cb, transit); +} + /////////////////////////////////////////////////////////////////////////////// //Resizing FX /////////////////////////////////////////////////////////////////////////////// @@ -2496,7 +2549,7 @@ _transit_effect_image_animation_context_new(Eina_List *images) * @code * char buf[PATH_MAX]; * Eina_List *images = NULL; - * Elm_Transit *transi = elm_transit_add(4.0); + * Elm_Transit *transi = elm_transit_add(); * * snprintf(buf, sizeof(buf), "%s/images/icon_11.png", PACKAGE_DATA_DIR); * images = eina_list_append(images, eina_stringshare_add(buf)); -- 2.34.1