seoz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=01349714a894bfea06f0b4796fa5e34501180bac
commit 01349714a894bfea06f0b4796fa5e34501180bac Author: Jee-Yong Um <jc9...@samsung.com> Date: Tue Feb 17 08:34:46 2015 +0900 elm_transit: Add elm_transit_go_in() API Summary: elm_transit_go() is executed immediately after it is called. elm_transit_go_in() starts transit in given seconds. @feature Reviewers: Hermet, seoz Reviewed By: seoz Subscribers: seoz, Hermet Differential Revision: https://phab.enlightenment.org/D1954 --- src/lib/elm_transit.c | 25 +++++++++++++++++++++++++ src/lib/elm_transit.h | 13 +++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/lib/elm_transit.c b/src/lib/elm_transit.c index eb2ab53..c2332b5 100644 --- a/src/lib/elm_transit.c +++ b/src/lib/elm_transit.c @@ -30,6 +30,7 @@ struct _Elm_Transit EINA_MAGIC; Ecore_Animator *animator; + Ecore_Timer *timer; /**< Timer used by elm_transit_go_in() */ Eina_Inlist *effect_list; Eina_List *objs; Elm_Transit *prev_chain_transit; @@ -266,6 +267,8 @@ _transit_del(Elm_Transit *transit) if (transit->del_data.func) transit->del_data.func(transit->del_data.arg, transit); + ecore_timer_del(transit->timer); + //cut off the chain transit relationship EINA_LIST_FOREACH_SAFE(transit->next_chain_transits, elist, elist_next, chain_transit) chain_transit->prev_chain_transit = NULL; @@ -460,6 +463,17 @@ _recover_image_uv(Evas_Object *obj, Evas_Map *map, Eina_Bool revert, Eina_Bool b return EINA_TRUE; } +static Eina_Bool +_transit_go_in_cb(void *data) +{ + Elm_Transit *transit = data; + + transit->timer = NULL; + elm_transit_go(transit); + + return ECORE_CALLBACK_CANCEL; +} + EAPI Elm_Transit * elm_transit_add(void) { @@ -724,6 +738,8 @@ elm_transit_go(Elm_Transit *transit) { ELM_TRANSIT_CHECK_OR_RETURN(transit); + ELM_SAFE_FREE(transit->timer, ecore_timer_del); + Eina_List *elist; Evas_Object *obj; @@ -747,6 +763,15 @@ elm_transit_go(Elm_Transit *transit) } EAPI void +elm_transit_go_in(Elm_Transit *transit, double in) +{ + ELM_TRANSIT_CHECK_OR_RETURN(transit); + + if (transit->timer) ecore_timer_del(transit->timer); + transit->timer = ecore_timer_add(in, _transit_go_in_cb, transit); +} + +EAPI void elm_transit_paused_set(Elm_Transit *transit, Eina_Bool paused) { ELM_TRANSIT_CHECK_OR_RETURN(transit); diff --git a/src/lib/elm_transit.h b/src/lib/elm_transit.h index a99bc87..cce70d7 100644 --- a/src/lib/elm_transit.h +++ b/src/lib/elm_transit.h @@ -579,6 +579,19 @@ EAPI double elm_transit_duration_get(const Elm_Transit *transit) EAPI void elm_transit_go(Elm_Transit *transit); /** + * Starts the transition in given seconds. + * + * @note @p transit can not be NULL + * + * @param transit The transit object. + * @param in The interval value in seconds + * + * @since 1.14 + * @ingroup Transit + */ +EAPI void elm_transit_go_in(Elm_Transit *transit, double in); + +/** * Pause/Resume the transition. * * If you call elm_transit_go again, the transit will be started from the --