From 761c9b5c26ee132c25bd827bcb9053d0d7c266a1 Mon Sep 17 00:00:00 2001 From: discomfitor Date: Sun, 4 Dec 2011 23:12:06 +0000 Subject: [PATCH] +ecore_timer_reset git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@65876 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- ChangeLog | 3 +++ NEWS | 2 ++ src/lib/ecore/Ecore.h | 1 + src/lib/ecore/ecore_timer.c | 31 +++++++++++++++++++++++++++++++ 4 files changed, 37 insertions(+) diff --git a/ChangeLog b/ChangeLog index e28a4c2..019b5a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -377,3 +377,6 @@ * Fix the modifiers value (Windows XP) +2011-12-04 Mike Blumenkrantz + + * added ecore_timer_reset() diff --git a/NEWS b/NEWS index de064b7..df034e6 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,8 @@ Changes since Ecore 1.1.0: -------------------------- Additions: + * ecore + - ecore_timer_reset() * ecore_x: - ecore_x_randr_output_backlight_available() diff --git a/src/lib/ecore/Ecore.h b/src/lib/ecore/Ecore.h index 981c615..2f52aa1 100644 --- a/src/lib/ecore/Ecore.h +++ b/src/lib/ecore/Ecore.h @@ -1226,6 +1226,7 @@ EAPI double ecore_timer_interval_get(Ecore_Timer *timer); EAPI void ecore_timer_freeze(Ecore_Timer *timer); EAPI void ecore_timer_thaw(Ecore_Timer *timer); EAPI void ecore_timer_delay(Ecore_Timer *timer, double add); +EAPI void ecore_timer_reset(Ecore_Timer *timer); EAPI double ecore_timer_pending_get(Ecore_Timer *timer); EAPI double ecore_timer_precision_get(void); EAPI void ecore_timer_precision_set(double precision); diff --git a/src/lib/ecore/ecore_timer.c b/src/lib/ecore/ecore_timer.c index 2992d2d..8f2ed08 100644 --- a/src/lib/ecore/ecore_timer.c +++ b/src/lib/ecore/ecore_timer.c @@ -259,6 +259,37 @@ ecore_timer_delay(Ecore_Timer *timer, } /** + * Reset a timer to its full interval + * This doesn't affect the interval of a timer + * @param timer The timer + * @since 1.2 + * @note This is equivalent to (but faster than) + * @code + * ecore_timer_delay(timer, ecore_timer_interval_get(timer) - ecore_timer_pending_get(timer)); + * @endcode + */ +EAPI void +ecore_timer_reset(Ecore_Timer *timer) +{ + double now, add; + if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) + { + ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, + __func__); + return; + } + _ecore_lock(); + now = ecore_time_get(); + + if (timer->frozen) + add = timer->pending; + else + add = timer->at - now; + _ecore_timer_delay(timer, add); + _ecore_unlock(); +} + +/** * Get the pending time regarding a timer. * * @param timer The timer to learn from. -- 2.7.4