Mercurial > sdl-ios-xcode
annotate test/testwm.c @ 1298:e1b8e1b97b67
This library is now available under the LGPL 2.1, the major change of which
is allowing linking with a shared object to be considered sufficient for
complying with section 6 of the LGPL.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 30 Jan 2006 14:27:56 +0000 |
parents | 08e3393e9ffb |
children | 14717b52abc0 290b5baf2fca |
rev | line source |
---|---|
0 | 1 |
2 /* Test out the window manager interaction functions */ | |
3 | |
4 #include <stdio.h> | |
5 #include <stdlib.h> | |
6 #include <string.h> | |
7 | |
8 #include "SDL.h" | |
9 | |
10 /* Is the cursor visible? */ | |
11 static int visible = 1; | |
12 | |
826
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
13 static Uint8 video_bpp; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
14 static Uint32 video_flags; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
15 |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
16 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
17 static void quit(int rc) |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
18 { |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
19 SDL_Quit(); |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
20 exit(rc); |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
21 } |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
22 |
826
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
23 int SetVideoMode(int w, int h) |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
24 { |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
25 SDL_Surface *screen; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
26 int i; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
27 Uint8 *buffer; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
28 SDL_Color palette[256]; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
29 |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
30 screen = SDL_SetVideoMode(w, h, video_bpp, video_flags); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
31 if ( screen == NULL ) { |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
32 fprintf(stderr, "Couldn't set %dx%dx%d video mode: %s\n", |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
33 w, h, video_bpp, SDL_GetError()); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
34 return(-1); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
35 } |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
36 printf("Running in %s mode\n", screen->flags & SDL_FULLSCREEN ? |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
37 "fullscreen" : "windowed"); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
38 |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
39 /* Set the surface pixels and refresh! */ |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
40 for ( i=0; i<256; ++i ) { |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
41 palette[i].r = 255-i; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
42 palette[i].g = 255-i; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
43 palette[i].b = 255-i; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
44 } |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
45 SDL_SetColors(screen, palette, 0, 256); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
46 if ( SDL_LockSurface(screen) < 0 ) { |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
47 fprintf(stderr, "Couldn't lock display surface: %s\n", |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
48 SDL_GetError()); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
49 return(-1); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
50 } |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
51 buffer = (Uint8 *)screen->pixels; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
52 for ( i=0; i<screen->h; ++i ) { |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
53 memset(buffer,(i*255)/screen->h, |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
54 screen->w*screen->format->BytesPerPixel); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
55 buffer += screen->pitch; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
56 } |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
57 SDL_UnlockSurface(screen); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
58 SDL_UpdateRect(screen, 0, 0, 0, 0); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
59 |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
60 return(0); |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
61 } |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
62 |
0 | 63 SDL_Surface *LoadIconSurface(char *file, Uint8 **maskp) |
64 { | |
65 SDL_Surface *icon; | |
66 Uint8 *pixels; | |
67 Uint8 *mask; | |
591 | 68 int mlen, i, j; |
0 | 69 |
70 *maskp = NULL; | |
71 | |
72 /* Load the icon surface */ | |
73 icon = SDL_LoadBMP(file); | |
74 if ( icon == NULL ) { | |
75 fprintf(stderr, "Couldn't load %s: %s\n", file, SDL_GetError()); | |
76 return(NULL); | |
77 } | |
78 | |
591 | 79 /* Check width and height |
0 | 80 if ( (icon->w%8) != 0 ) { |
81 fprintf(stderr, "Icon width must be a multiple of 8!\n"); | |
82 SDL_FreeSurface(icon); | |
83 return(NULL); | |
84 } | |
591 | 85 */ |
86 | |
87 | |
0 | 88 if ( icon->format->palette == NULL ) { |
89 fprintf(stderr, "Icon must have a palette!\n"); | |
90 SDL_FreeSurface(icon); | |
91 return(NULL); | |
92 } | |
93 | |
94 /* Set the colorkey */ | |
95 SDL_SetColorKey(icon, SDL_SRCCOLORKEY, *((Uint8 *)icon->pixels)); | |
96 | |
97 /* Create the mask */ | |
98 pixels = (Uint8 *)icon->pixels; | |
99 printf("Transparent pixel: (%d,%d,%d)\n", | |
100 icon->format->palette->colors[*pixels].r, | |
101 icon->format->palette->colors[*pixels].g, | |
102 icon->format->palette->colors[*pixels].b); | |
591 | 103 mlen = (icon->w*icon->h + 7) / 8; |
104 mask = (Uint8 *)malloc(mlen); | |
0 | 105 if ( mask == NULL ) { |
106 fprintf(stderr, "Out of memory!\n"); | |
107 SDL_FreeSurface(icon); | |
108 return(NULL); | |
109 } | |
591 | 110 memset(mask, 0, mlen); |
111 for ( i=0; i < icon->h; i++) | |
112 for (j=0; j < icon->w; j++) { | |
113 int pindex = i * icon->pitch + j; | |
114 int mindex = i * icon->w + j; | |
115 if ( pixels[pindex] != *pixels ) | |
116 mask[mindex>>3] |= 1 << (7 - (mindex & 7)); | |
117 } | |
0 | 118 *maskp = mask; |
119 return(icon); | |
120 } | |
121 | |
122 void HotKey_ToggleFullScreen(void) | |
123 { | |
124 SDL_Surface *screen; | |
125 | |
126 screen = SDL_GetVideoSurface(); | |
127 if ( SDL_WM_ToggleFullScreen(screen) ) { | |
128 printf("Toggled fullscreen mode - now %s\n", | |
129 (screen->flags&SDL_FULLSCREEN) ? "fullscreen" : "windowed"); | |
130 } else { | |
131 printf("Unable to toggle fullscreen mode\n"); | |
826
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
132 video_flags ^= SDL_FULLSCREEN; |
3eddf51b649b
Showed how to toggle fullscreen mode if the API isn't supported
Sam Lantinga <slouken@libsdl.org>
parents:
609
diff
changeset
|
133 SetVideoMode(screen->w, screen->h); |
0 | 134 } |
135 } | |
136 | |
137 void HotKey_ToggleGrab(void) | |
138 { | |
139 SDL_GrabMode mode; | |
140 | |
141 printf("Ctrl-G: toggling input grab!\n"); | |
142 mode = SDL_WM_GrabInput(SDL_GRAB_QUERY); | |
143 if ( mode == SDL_GRAB_ON ) { | |
144 printf("Grab was on\n"); | |
145 } else { | |
146 printf("Grab was off\n"); | |
147 } | |
609
a30b17e09cc0
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
591
diff
changeset
|
148 mode = SDL_WM_GrabInput(mode ? SDL_GRAB_OFF : SDL_GRAB_ON); |
0 | 149 if ( mode == SDL_GRAB_ON ) { |
150 printf("Grab is now on\n"); | |
151 } else { | |
152 printf("Grab is now off\n"); | |
153 } | |
154 } | |
155 | |
156 void HotKey_Iconify(void) | |
157 { | |
158 printf("Ctrl-Z: iconifying window!\n"); | |
159 SDL_WM_IconifyWindow(); | |
160 } | |
161 | |
162 void HotKey_Quit(void) | |
163 { | |
164 SDL_Event event; | |
165 | |
166 printf("Posting internal quit request\n"); | |
167 event.type = SDL_USEREVENT; | |
168 SDL_PushEvent(&event); | |
169 } | |
170 | |
171 int FilterEvents(const SDL_Event *event) | |
172 { | |
173 static int reallyquit = 0; | |
174 | |
175 switch (event->type) { | |
176 | |
177 case SDL_ACTIVEEVENT: | |
178 /* See what happened */ | |
179 printf("App %s ", | |
180 event->active.gain ? "gained" : "lost"); | |
181 if ( event->active.state & SDL_APPACTIVE ) | |
182 printf("active "); | |
183 if ( event->active.state & SDL_APPMOUSEFOCUS ) | |
184 printf("mouse "); | |
185 if ( event->active.state & SDL_APPINPUTFOCUS ) | |
186 printf("input "); | |
187 printf("focus\n"); | |
188 | |
189 /* See if we are iconified or restored */ | |
190 if ( event->active.state & SDL_APPACTIVE ) { | |
191 printf("App has been %s\n", | |
192 event->active.gain ? | |
193 "restored" : "iconified"); | |
194 } | |
195 return(0); | |
196 | |
197 /* We want to toggle visibility on buttonpress */ | |
198 case SDL_MOUSEBUTTONDOWN: | |
199 case SDL_MOUSEBUTTONUP: | |
200 if ( event->button.state == SDL_PRESSED ) { | |
201 visible = !visible; | |
202 SDL_ShowCursor(visible); | |
203 } | |
204 printf("Mouse button %d has been %s\n", | |
205 event->button.button, | |
206 (event->button.state == SDL_PRESSED) ? | |
207 "pressed" : "released"); | |
208 return(0); | |
209 | |
210 /* Show relative mouse motion */ | |
211 case SDL_MOUSEMOTION: | |
212 #if 0 | |
1284
08e3393e9ffb
Report both absolute and relative motion
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
213 printf("Mouse motion: {%d,%d} (%d,%d)\n", |
08e3393e9ffb
Report both absolute and relative motion
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
214 event->motion.x, event->motion.y, |
0 | 215 event->motion.xrel, event->motion.yrel); |
216 #endif | |
217 return(0); | |
218 | |
219 case SDL_KEYDOWN: | |
220 if ( event->key.keysym.sym == SDLK_ESCAPE ) { | |
221 HotKey_Quit(); | |
222 } | |
223 if ( (event->key.keysym.sym == SDLK_g) && | |
224 (event->key.keysym.mod & KMOD_CTRL) ) { | |
225 HotKey_ToggleGrab(); | |
226 } | |
227 if ( (event->key.keysym.sym == SDLK_z) && | |
228 (event->key.keysym.mod & KMOD_CTRL) ) { | |
229 HotKey_Iconify(); | |
230 } | |
231 if ( (event->key.keysym.sym == SDLK_RETURN) && | |
232 (event->key.keysym.mod & KMOD_ALT) ) { | |
233 HotKey_ToggleFullScreen(); | |
234 } | |
235 return(0); | |
236 | |
237 /* Pass the video resize event through .. */ | |
238 case SDL_VIDEORESIZE: | |
239 return(1); | |
240 | |
241 /* This is important! Queue it if we want to quit. */ | |
242 case SDL_QUIT: | |
243 if ( ! reallyquit ) { | |
244 reallyquit = 1; | |
245 printf("Quit requested\n"); | |
246 return(0); | |
247 } | |
248 printf("Quit demanded\n"); | |
249 return(1); | |
250 | |
251 /* This will never happen because events queued directly | |
252 to the event queue are not filtered. | |
253 */ | |
254 case SDL_USEREVENT: | |
255 return(1); | |
256 | |
257 /* Drop all other events */ | |
258 default: | |
259 return(0); | |
260 } | |
261 } | |
262 | |
263 int main(int argc, char *argv[]) | |
264 { | |
265 SDL_Event event; | |
266 char *title; | |
267 SDL_Surface *icon; | |
268 Uint8 *icon_mask; | |
269 int parsed; | |
87
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
270 int w, h; |
0 | 271 |
272 if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { | |
273 fprintf(stderr, | |
274 "Couldn't initialize SDL: %s\n", SDL_GetError()); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
275 return(1); |
0 | 276 } |
277 | |
278 /* Check command line arguments */ | |
87
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
279 w = 640; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
280 h = 480; |
0 | 281 video_bpp = 8; |
282 video_flags = SDL_SWSURFACE; | |
283 parsed = 1; | |
284 while ( parsed ) { | |
285 if ( (argc >= 2) && (strcmp(argv[1], "-fullscreen") == 0) ) { | |
286 video_flags |= SDL_FULLSCREEN; | |
287 argc -= 1; | |
288 argv += 1; | |
289 } else | |
290 if ( (argc >= 2) && (strcmp(argv[1], "-resize") == 0) ) { | |
291 video_flags |= SDL_RESIZABLE; | |
292 argc -= 1; | |
293 argv += 1; | |
294 } else | |
295 if ( (argc >= 2) && (strcmp(argv[1], "-noframe") == 0) ) { | |
296 video_flags |= SDL_NOFRAME; | |
297 argc -= 1; | |
298 argv += 1; | |
299 } else | |
87
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
300 if ( (argc >= 3) && (strcmp(argv[1], "-width") == 0) ) { |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
301 w = atoi(argv[2]); |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
302 argc -= 2; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
303 argv += 2; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
304 } else |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
305 if ( (argc >= 3) && (strcmp(argv[1], "-height") == 0) ) { |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
306 h = atoi(argv[2]); |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
307 argc -= 2; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
308 argv += 2; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
309 } else |
0 | 310 if ( (argc >= 3) && (strcmp(argv[1], "-bpp") == 0) ) { |
311 video_bpp = atoi(argv[2]); | |
312 argc -= 2; | |
313 argv += 2; | |
314 } else { | |
315 parsed = 0; | |
316 } | |
317 } | |
318 | |
319 /* Set the icon -- this must be done before the first mode set */ | |
320 icon = LoadIconSurface("icon.bmp", &icon_mask); | |
321 if ( icon != NULL ) { | |
322 SDL_WM_SetIcon(icon, icon_mask); | |
323 } | |
324 if ( icon_mask != NULL ) | |
325 free(icon_mask); | |
326 | |
327 /* Set the title bar */ | |
328 if ( argv[1] == NULL ) | |
329 title = "Testing 1.. 2.. 3..."; | |
330 else | |
331 title = argv[1]; | |
332 SDL_WM_SetCaption(title, "testwm"); | |
333 | |
334 /* See if it's really set */ | |
335 SDL_WM_GetCaption(&title, NULL); | |
336 if ( title ) | |
337 printf("Title was set to: %s\n", title); | |
338 else | |
339 printf("No window title was set!\n"); | |
340 | |
341 /* Initialize the display */ | |
87
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
342 if ( SetVideoMode(w, h) < 0 ) { |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
343 quit(1); |
0 | 344 } |
345 | |
346 /* Set an event filter that discards everything but QUIT */ | |
347 SDL_SetEventFilter(FilterEvents); | |
348 | |
349 /* Ignore key up events, they don't even get filtered */ | |
350 SDL_EventState(SDL_KEYUP, SDL_IGNORE); | |
351 | |
352 /* Loop, waiting for QUIT */ | |
353 while ( SDL_WaitEvent(&event) ) { | |
354 switch (event.type) { | |
355 case SDL_VIDEORESIZE: | |
356 printf("Got a resize event: %dx%d\n", | |
357 event.resize.w, event.resize.h); | |
358 SetVideoMode(event.resize.w, event.resize.h); | |
359 break; | |
360 case SDL_USEREVENT: | |
361 printf("Handling internal quit request\n"); | |
362 /* Fall through to the quit handler */ | |
363 case SDL_QUIT: | |
364 printf("Bye bye..\n"); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
365 quit(0); |
0 | 366 default: |
367 /* This should never happen */ | |
368 printf("Warning: Event %d wasn't filtered\n", | |
369 event.type); | |
370 break; | |
371 } | |
372 } | |
373 printf("SDL_WaitEvent() error: %s\n", SDL_GetError()); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
826
diff
changeset
|
374 SDL_Quit(); |
0 | 375 return(255); |
376 } |