comparison src/timer/win32/SDL_systimer.c @ 1497:420b3f47806d

Fixes from Dmitry Yakimov: fixed bugs 159 and 160: + added threaded timers support ! fixed restoring sdl window focus (AV in windows message handler) ! disabled forgotten cdrom and joystick in config file. * disabled minimizing sdl window while loosing focus. PocketPC does not have a task bar, so it is an inconvenient and unusual behaviour for PPC users. + added WIN_Paint handler for GAPI ! fixed loosing focus while using GAPI videi driver + added TestTimer project * removed unnecessary macros (ENABLE_WINDIB ...) from projects
author Sam Lantinga <slouken@libsdl.org>
date Sat, 11 Mar 2006 23:46:45 +0000
parents 0a2bd6507477
children 92947e3a18db
comparison
equal deleted inserted replaced
1496:405e20dc004c 1497:420b3f47806d
28 #include "SDL_timer.h" 28 #include "SDL_timer.h"
29 #include "../SDL_timer_c.h" 29 #include "../SDL_timer_c.h"
30 30
31 #ifdef _WIN32_WCE 31 #ifdef _WIN32_WCE
32 #error This is WinCE. Please use src/timer/wince/SDL_systimer.c instead. 32 #error This is WinCE. Please use src/timer/wince/SDL_systimer.c instead.
33
34 /* but if you really want to use this file, use these #defines... */
35 #define USE_GETTICKCOUNT
36 #define USE_SETTIMER
37 #endif 33 #endif
38 34
39 #define TIME_WRAP_VALUE (~(DWORD)0) 35 #define TIME_WRAP_VALUE (~(DWORD)0)
40 36
41 /* The first (low-resolution) ticks value of the application */ 37 /* The first (low-resolution) ticks value of the application */
109 void SDL_Delay(Uint32 ms) 105 void SDL_Delay(Uint32 ms)
110 { 106 {
111 Sleep(ms); 107 Sleep(ms);
112 } 108 }
113 109
114 #ifdef USE_SETTIMER
115
116 static UINT WIN_timer;
117
118 int SDL_SYS_TimerInit(void)
119 {
120 return(0);
121 }
122
123 void SDL_SYS_TimerQuit(void)
124 {
125 return;
126 }
127
128 /* Forward declaration because this is called by the timer callback */
129 int SDL_SYS_StartTimer(void);
130
131 static VOID CALLBACK TimerCallbackProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
132 {
133 Uint32 ms;
134
135 ms = SDL_alarm_callback(SDL_alarm_interval);
136 if ( ms != SDL_alarm_interval ) {
137 KillTimer(NULL, idEvent);
138 if ( ms ) {
139 SDL_alarm_interval = ROUND_RESOLUTION(ms);
140 SDL_SYS_StartTimer();
141 } else {
142 SDL_alarm_interval = 0;
143 }
144 }
145 }
146
147 int SDL_SYS_StartTimer(void)
148 {
149 int retval;
150
151 WIN_timer = SetTimer(NULL, 0, SDL_alarm_interval, TimerCallbackProc);
152 if ( WIN_timer ) {
153 retval = 0;
154 } else {
155 retval = -1;
156 }
157 return retval;
158 }
159
160 void SDL_SYS_StopTimer(void)
161 {
162 if ( WIN_timer ) {
163 KillTimer(NULL, WIN_timer);
164 WIN_timer = 0;
165 }
166 }
167
168 #else /* !USE_SETTIMER */
169
170 /* Data to handle a single periodic alarm */ 110 /* Data to handle a single periodic alarm */
171 static UINT timerID = 0; 111 static UINT timerID = 0;
172 112
173 static void CALLBACK HandleAlarm(UINT uID, UINT uMsg, DWORD_PTR dwUser, 113 static void CALLBACK HandleAlarm(UINT uID, UINT uMsg, DWORD_PTR dwUser,
174 DWORD_PTR dw1, DWORD_PTR dw2) 114 DWORD_PTR dw1, DWORD_PTR dw2)
213 void SDL_SYS_StopTimer(void) 153 void SDL_SYS_StopTimer(void)
214 { 154 {
215 return; 155 return;
216 } 156 }
217 157
218 #endif /* USE_SETTIMER */