From f4bf91f7c79d119a6aed947cc70981971322552a Mon Sep 17 00:00:00 2001 From: Jee-Yong Um Date: Tue, 17 Feb 2015 08:34:46 +0900 Subject: [PATCH] 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 --- legacy/elementary/src/lib/elm_transit.c | 25 +++++++++++++++++++++++++ legacy/elementary/src/lib/elm_transit.h | 13 +++++++++++++ 2 files changed, 38 insertions(+) diff --git a/legacy/elementary/src/lib/elm_transit.c b/legacy/elementary/src/lib/elm_transit.c index eb2ab532f8..c2332b5f7a 100644 --- a/legacy/elementary/src/lib/elm_transit.c +++ b/legacy/elementary/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; @@ -746,6 +762,15 @@ elm_transit_go(Elm_Transit *transit) _transit_animate_cb(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) { diff --git a/legacy/elementary/src/lib/elm_transit.h b/legacy/elementary/src/lib/elm_transit.h index a99bc872d4..cce70d7793 100644 --- a/legacy/elementary/src/lib/elm_transit.h +++ b/legacy/elementary/src/lib/elm_transit.h @@ -578,6 +578,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. *