diff --git a/legacy/ecore/ChangeLog b/legacy/ecore/ChangeLog index e28a4c23ae..019b5a0c6c 100644 --- a/legacy/ecore/ChangeLog +++ b/legacy/ecore/ChangeLog @@ -377,3 +377,6 @@ * Fix the modifiers value (Windows XP) +2011-12-04 Mike Blumenkrantz + + * added ecore_timer_reset() diff --git a/legacy/ecore/NEWS b/legacy/ecore/NEWS index de064b7503..df034e6c33 100644 --- a/legacy/ecore/NEWS +++ b/legacy/ecore/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/legacy/ecore/src/lib/ecore/Ecore.h b/legacy/ecore/src/lib/ecore/Ecore.h index 981c615efd..2f52aa1d1d 100644 --- a/legacy/ecore/src/lib/ecore/Ecore.h +++ b/legacy/ecore/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/legacy/ecore/src/lib/ecore/ecore_timer.c b/legacy/ecore/src/lib/ecore/ecore_timer.c index 2992d2d863..8f2ed080b9 100644 --- a/legacy/ecore/src/lib/ecore/ecore_timer.c +++ b/legacy/ecore/src/lib/ecore/ecore_timer.c @@ -258,6 +258,37 @@ ecore_timer_delay(Ecore_Timer *timer, _ecore_unlock(); } +/** + * 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. *