mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
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]
This commit is contained in:
14
windows.c
14
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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user