From 1b752a89502ec430f3fc08effd7eb7bfd83f0981 Mon Sep 17 00:00:00 2001 From: Jee-Yong Um Date: Tue, 17 Feb 2015 13:26:46 +0900 Subject: [PATCH] [2.4][Transit] Backport elm_transit_go_in() API (delayed start) Author: Jee-Yong Um 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 Change-Id: Ie6e9fc764f4685ae35ca6400dcc7b03f70feba29 Signed-off-by: Jee-Yong Um --- 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..2801553 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; 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..6a48cef 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 -- 2.7.4