Dear All. Here is elm_transit patches.
001_elm_transit.txt Added elm_transit_pause, elm_transit_resume, elm_transit_progress_value_get 002_elm_transit.txt fixed customized transit sample error. Check it then apply it please. Thanks. Best Regards Hermet
Index: src/lib/elm_transit.c =================================================================== --- src/lib/elm_transit.c (revision 56024) +++ src/lib/elm_transit.c (working copy) @@ -66,6 +66,8 @@ void *arg; } del_data; struct { + double delayed; + double paused; double duration; double begin; double current; @@ -75,6 +77,7 @@ int current; Eina_Bool reverse; } repeat; + double progress; unsigned int effects_pending_del; int walking; Eina_Bool auto_reverse : 1; @@ -155,12 +158,13 @@ { Eina_List *elist, *elist_next; Elm_Transit_Effect *effect; - + + if(transit->animator) + ecore_animator_del(transit->animator); + if (transit->del_data.func) transit->del_data.func(transit->del_data.arg, transit); - - ecore_animator_del(transit->animator); - + EINA_LIST_FOREACH_SAFE(transit->effect_list, elist, elist_next, effect) _elm_transit_effect_del(transit, effect, elist); @@ -196,38 +200,39 @@ _animator_animate_cb(void *data) { Elm_Transit *transit = data; - double elapsed_time, progress; - + double elapsed_time, duration; + transit->time.current = ecore_loop_time_get(); elapsed_time = transit->time.current - transit->time.begin; - - if (elapsed_time > transit->time.duration) - elapsed_time = transit->time.duration; - - progress = elapsed_time / transit->time.duration; + duration = transit->time.duration + transit->time.delayed; + + if (elapsed_time > duration) + elapsed_time = duration; + + transit->progress = elapsed_time / duration; switch (transit->tween_mode) { case ELM_TRANSIT_TWEEN_MODE_ACCELERATE: - progress = 1.0 - sin((ELM_PI / 2.0) + (progress * ELM_PI / 2.0)); + transit->progress = 1.0 - sin((ELM_PI / 2.0) + (transit->progress * ELM_PI / 2.0)); break; case ELM_TRANSIT_TWEEN_MODE_DECELERATE: - progress = sin(progress * ELM_PI / 2.0); + transit->progress = sin(transit->progress * ELM_PI / 2.0); break; case ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL: - progress = (1.0 - cos(progress * ELM_PI)) / 2.0; + transit->progress = (1.0 - cos(transit->progress * ELM_PI)) / 2.0; break; default: break; } /* Reverse? */ - if (transit->repeat.reverse) progress = 1 - progress; + if (transit->repeat.reverse) transit->progress = 1 - transit->progress; - if (transit->time.duration > 0) _transit_animate_op(transit, progress); + if (transit->time.duration > 0) _transit_animate_op(transit, transit->progress); /* Not end. Keep going. */ - if (elapsed_time < transit->time.duration) return ECORE_CALLBACK_RENEW; - + if (elapsed_time < duration) return ECORE_CALLBACK_RENEW; + /* Repeat and reverse and time done! */ if ((transit->repeat.current == transit->repeat.count) && (!transit->auto_reverse || transit->repeat.reverse)) @@ -794,6 +799,74 @@ transit->animator = ecore_animator_add(_animator_animate_cb, transit); } +/** + * Pause the transition. + * If you call elm_transit_go again, this pause will affect no anymore. + * + * @note @p transit can not be NULL + * + * @see elm_transit_resume() + * + * @param transit The transit object. + * + * @ingroup Transit + */ +EAPI void +elm_transit_pause(Elm_Transit *transit) +{ + ELM_TRANSIT_CHECK_OR_RETURN(transit); + + if ((!transit->animator) || (transit->time.paused > 0)) + return; + + ecore_animator_freeze(transit->animator); + transit->time.paused = ecore_loop_time_get(); +} + +/** + * Resume the transition. + * + * @note @p transit can not be NULL + * + * @see elm_transit_pause() + * + * @param transit The transit object. + * + * @ingroup Transit + */ +EAPI void +elm_transit_resume(Elm_Transit *transit) +{ + ELM_TRANSIT_CHECK_OR_RETURN(transit); + + if ((!transit->animator) || (transit->time.paused == 0)) + return; + + ecore_animator_thaw(transit->animator); + transit->time.delayed += (ecore_loop_time_get() - transit->time.paused); + transit->time.paused = 0; +} + +/** + * Get the time progression of the animation (a double value between 0.0 and 1.0). + * If the transit is not running, it will return -1. + * + * @note @p transit can not be NULL + * + * @param transit The transit object. + * + * @return The time progression value. + * + * @ingroup Transit + */ +EAPI double +elm_transit_progress_value_get(Elm_Transit *transit) +{ + ELM_TRANSIT_CHECK_OR_RETURN(transit); + + return transit->progress; +} + /////////////////////////////////////////////////////////////////////////////// //Resizing FX /////////////////////////////////////////////////////////////////////////////// Index: src/lib/Elementary.h.in =================================================================== --- src/lib/Elementary.h.in (revision 56024) +++ src/lib/Elementary.h.in (working copy) @@ -2502,6 +2502,9 @@ 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_pause(Elm_Transit *transit) EINA_ARG_NONNULL(1); + EAPI void elm_transit_resume(Elm_Transit *transit) EINA_ARG_NONNULL(1); + EAPI double elm_transit_progress_value_get(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);
Index: src/bin/test_transit.c =================================================================== --- src/bin/test_transit.c (revision 56024) +++ src/bin/test_transit.c (working copy) @@ -505,7 +505,7 @@ evas_object_show(win); /* Adding Transit */ - trans = elm_transit_add(5.0); + trans = elm_transit_add(); elm_transit_auto_reverse_set(trans, EINA_TRUE); elm_transit_tween_mode_set(trans, ELM_TRANSIT_TWEEN_MODE_DECELERATE); elm_transit_repeat_times_set(trans, -1); @@ -514,6 +514,8 @@ elm_transit_effect_add(trans, _custom_op, effect_context, _custom_context_free); + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); } #endif
------------------------------------------------------------------------------ Gaining the trust of online customers is vital for the success of any company that requires sensitive data to be transmitted over the Web. Learn how to best implement a security strategy that keeps consumers' information secure and instills the confidence they need to proceed with transactions. http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel