From ccbf3ca6f1950fb1e39df40b2d44fe99ab9de0d1 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Mon, 3 May 2004 09:43:08 +0000 Subject: GTK and Windows appear to handle timers very differently: specifically, the elapsed time between calls varies much more with GTK than it does under Windows. Therefore, I now take my own time readings on every timer call, and this appears to have made the animations run at closer to the same speed between platforms. Having done that, I decided some of them were at the _wrong_ speed, and fiddled with each game's timings as well. [originally from svn r4189] --- windows.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'windows.c') diff --git a/windows.c b/windows.c index 87f4284..90d96d2 100644 --- a/windows.c +++ b/windows.c @@ -88,6 +88,7 @@ struct frontend { HPEN *pens; HRGN clip; UINT timer; + DWORD timer_last_tickcount; int npresets; game_params **presets; struct font *fonts; @@ -302,7 +303,10 @@ void deactivate_timer(frontend *fe) void activate_timer(frontend *fe) { - fe->timer = SetTimer(fe->hwnd, fe->timer, 20, NULL); + if (!fe->timer) { + fe->timer = SetTimer(fe->hwnd, fe->timer, 20, NULL); + fe->timer_last_tickcount = GetTickCount(); + } } static frontend *new_window(HINSTANCE inst) @@ -942,8 +946,12 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, PostQuitMessage(0); return 0; case WM_TIMER: - if (fe->timer) - midend_timer(fe->me, (float)0.02); + if (fe->timer) { + DWORD now = GetTickCount(); + float elapsed = (float) (now - fe->timer_last_tickcount) * 0.001F; + midend_timer(fe->me, elapsed); + fe->timer_last_tickcount = now; + } return 0; } -- cgit v1.1