Mercurial > sdl-ios-xcode
annotate test/testwm.c @ 4564:5002d6aeb85c SDL-1.2
Use proper GEM API to handle mouse button events
author | Patrice Mandin <patmandin@gmail.com> |
---|---|
date | Fri, 09 Jul 2010 17:19:18 +0200 |
parents | 14195cfdb66e |
children |
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 | |
4257
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
171 static void print_modifiers(void) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
172 { |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
173 int mod; |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
174 printf(" modifiers:"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
175 mod = SDL_GetModState(); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
176 if(!mod) { |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
177 printf(" (none)"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
178 return; |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
179 } |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
180 if(mod & KMOD_LSHIFT) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
181 printf(" LSHIFT"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
182 if(mod & KMOD_RSHIFT) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
183 printf(" RSHIFT"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
184 if(mod & KMOD_LCTRL) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
185 printf(" LCTRL"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
186 if(mod & KMOD_RCTRL) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
187 printf(" RCTRL"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
188 if(mod & KMOD_LALT) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
189 printf(" LALT"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
190 if(mod & KMOD_RALT) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
191 printf(" RALT"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
192 if(mod & KMOD_LMETA) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
193 printf(" LMETA"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
194 if(mod & KMOD_RMETA) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
195 printf(" RMETA"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
196 if(mod & KMOD_NUM) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
197 printf(" NUM"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
198 if(mod & KMOD_CAPS) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
199 printf(" CAPS"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
200 if(mod & KMOD_MODE) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
201 printf(" MODE"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
202 } |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
203 |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
204 static void PrintKey(const SDL_keysym *sym, int pressed) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
205 { |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
206 /* Print the keycode, name and state */ |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
207 if ( sym->sym ) { |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
208 printf("Key %s: %d-%s ", pressed ? "pressed" : "released", |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
209 sym->sym, SDL_GetKeyName(sym->sym)); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
210 } else { |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
211 printf("Unknown Key (scancode = %d) %s ", sym->scancode, |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
212 pressed ? "pressed" : "released"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
213 } |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
214 |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
215 /* Print the translated character, if one exists */ |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
216 if ( sym->unicode ) { |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
217 /* Is it a control-character? */ |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
218 if ( sym->unicode < ' ' ) { |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
219 printf(" (^%c)", sym->unicode+'@'); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
220 } else { |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
221 #ifdef UNICODE |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
222 printf(" (%c)", sym->unicode); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
223 #else |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
224 /* This is a Latin-1 program, so only show 8-bits */ |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
225 if ( !(sym->unicode & 0xFF00) ) |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
226 printf(" (%c)", sym->unicode); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
227 else |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
228 printf(" (0x%X)", sym->unicode); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
229 #endif |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
230 } |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
231 } |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
232 print_modifiers(); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
233 printf("\n"); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
234 } |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
235 |
1769 | 236 int SDLCALL FilterEvents(const SDL_Event *event) |
0 | 237 { |
238 static int reallyquit = 0; | |
239 | |
240 switch (event->type) { | |
241 | |
242 case SDL_ACTIVEEVENT: | |
243 /* See what happened */ | |
244 printf("App %s ", | |
245 event->active.gain ? "gained" : "lost"); | |
246 if ( event->active.state & SDL_APPACTIVE ) | |
247 printf("active "); | |
1779
67fc81efcfc3
Made it easier to test some things on the framebuffer console
Sam Lantinga <slouken@libsdl.org>
parents:
1769
diff
changeset
|
248 if ( event->active.state & SDL_APPINPUTFOCUS ) |
67fc81efcfc3
Made it easier to test some things on the framebuffer console
Sam Lantinga <slouken@libsdl.org>
parents:
1769
diff
changeset
|
249 printf("input "); |
0 | 250 if ( event->active.state & SDL_APPMOUSEFOCUS ) |
251 printf("mouse "); | |
252 printf("focus\n"); | |
253 | |
254 /* See if we are iconified or restored */ | |
255 if ( event->active.state & SDL_APPACTIVE ) { | |
256 printf("App has been %s\n", | |
257 event->active.gain ? | |
258 "restored" : "iconified"); | |
259 } | |
260 return(0); | |
261 | |
262 /* We want to toggle visibility on buttonpress */ | |
263 case SDL_MOUSEBUTTONDOWN: | |
264 case SDL_MOUSEBUTTONUP: | |
265 if ( event->button.state == SDL_PRESSED ) { | |
266 visible = !visible; | |
267 SDL_ShowCursor(visible); | |
268 } | |
269 printf("Mouse button %d has been %s\n", | |
270 event->button.button, | |
271 (event->button.state == SDL_PRESSED) ? | |
272 "pressed" : "released"); | |
273 return(0); | |
274 | |
275 /* Show relative mouse motion */ | |
276 case SDL_MOUSEMOTION: | |
277 #if 0 | |
1284
08e3393e9ffb
Report both absolute and relative motion
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
278 printf("Mouse motion: {%d,%d} (%d,%d)\n", |
08e3393e9ffb
Report both absolute and relative motion
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
279 event->motion.x, event->motion.y, |
0 | 280 event->motion.xrel, event->motion.yrel); |
281 #endif | |
282 return(0); | |
283 | |
284 case SDL_KEYDOWN: | |
4257
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
285 PrintKey(&event->key.keysym, 1); |
0 | 286 if ( event->key.keysym.sym == SDLK_ESCAPE ) { |
287 HotKey_Quit(); | |
288 } | |
289 if ( (event->key.keysym.sym == SDLK_g) && | |
290 (event->key.keysym.mod & KMOD_CTRL) ) { | |
291 HotKey_ToggleGrab(); | |
292 } | |
293 if ( (event->key.keysym.sym == SDLK_z) && | |
294 (event->key.keysym.mod & KMOD_CTRL) ) { | |
295 HotKey_Iconify(); | |
296 } | |
297 if ( (event->key.keysym.sym == SDLK_RETURN) && | |
298 (event->key.keysym.mod & KMOD_ALT) ) { | |
299 HotKey_ToggleFullScreen(); | |
300 } | |
301 return(0); | |
302 | |
4257
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
303 case SDL_KEYUP: |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
304 PrintKey(&event->key.keysym, 0); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
305 return(0); |
14195cfdb66e
Added keyboard output for debugging bug #659
Sam Lantinga <slouken@libsdl.org>
parents:
1779
diff
changeset
|
306 |
0 | 307 /* Pass the video resize event through .. */ |
308 case SDL_VIDEORESIZE: | |
309 return(1); | |
310 | |
311 /* This is important! Queue it if we want to quit. */ | |
312 case SDL_QUIT: | |
313 if ( ! reallyquit ) { | |
314 reallyquit = 1; | |
315 printf("Quit requested\n"); | |
316 return(0); | |
317 } | |
318 printf("Quit demanded\n"); | |
319 return(1); | |
320 | |
321 /* This will never happen because events queued directly | |
322 to the event queue are not filtered. | |
323 */ | |
324 case SDL_USEREVENT: | |
325 return(1); | |
326 | |
327 /* Drop all other events */ | |
328 default: | |
329 return(0); | |
330 } | |
331 } | |
332 | |
333 int main(int argc, char *argv[]) | |
334 { | |
335 SDL_Event event; | |
336 char *title; | |
337 SDL_Surface *icon; | |
338 Uint8 *icon_mask; | |
339 int parsed; | |
87
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
340 int w, h; |
0 | 341 |
342 if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { | |
343 fprintf(stderr, | |
344 "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
|
345 return(1); |
0 | 346 } |
347 | |
348 /* Check command line arguments */ | |
87
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
349 w = 640; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
350 h = 480; |
0 | 351 video_bpp = 8; |
352 video_flags = SDL_SWSURFACE; | |
353 parsed = 1; | |
354 while ( parsed ) { | |
355 if ( (argc >= 2) && (strcmp(argv[1], "-fullscreen") == 0) ) { | |
356 video_flags |= SDL_FULLSCREEN; | |
357 argc -= 1; | |
358 argv += 1; | |
359 } else | |
360 if ( (argc >= 2) && (strcmp(argv[1], "-resize") == 0) ) { | |
361 video_flags |= SDL_RESIZABLE; | |
362 argc -= 1; | |
363 argv += 1; | |
364 } else | |
365 if ( (argc >= 2) && (strcmp(argv[1], "-noframe") == 0) ) { | |
366 video_flags |= SDL_NOFRAME; | |
367 argc -= 1; | |
368 argv += 1; | |
369 } else | |
87
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
370 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
|
371 w = atoi(argv[2]); |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
372 argc -= 2; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
373 argv += 2; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
374 } else |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
375 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
|
376 h = atoi(argv[2]); |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
377 argc -= 2; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
378 argv += 2; |
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
379 } else |
0 | 380 if ( (argc >= 3) && (strcmp(argv[1], "-bpp") == 0) ) { |
381 video_bpp = atoi(argv[2]); | |
382 argc -= 2; | |
383 argv += 2; | |
384 } else { | |
385 parsed = 0; | |
386 } | |
387 } | |
388 | |
389 /* Set the icon -- this must be done before the first mode set */ | |
390 icon = LoadIconSurface("icon.bmp", &icon_mask); | |
391 if ( icon != NULL ) { | |
392 SDL_WM_SetIcon(icon, icon_mask); | |
393 } | |
394 if ( icon_mask != NULL ) | |
395 free(icon_mask); | |
396 | |
397 /* Set the title bar */ | |
398 if ( argv[1] == NULL ) | |
399 title = "Testing 1.. 2.. 3..."; | |
400 else | |
401 title = argv[1]; | |
402 SDL_WM_SetCaption(title, "testwm"); | |
403 | |
404 /* See if it's really set */ | |
405 SDL_WM_GetCaption(&title, NULL); | |
406 if ( title ) | |
407 printf("Title was set to: %s\n", title); | |
408 else | |
409 printf("No window title was set!\n"); | |
410 | |
411 /* Initialize the display */ | |
87
3ef4bc90c388
Added -width and -height command line options
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
412 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
|
413 quit(1); |
0 | 414 } |
415 | |
416 /* Set an event filter that discards everything but QUIT */ | |
417 SDL_SetEventFilter(FilterEvents); | |
418 | |
419 /* Loop, waiting for QUIT */ | |
420 while ( SDL_WaitEvent(&event) ) { | |
421 switch (event.type) { | |
422 case SDL_VIDEORESIZE: | |
423 printf("Got a resize event: %dx%d\n", | |
424 event.resize.w, event.resize.h); | |
425 SetVideoMode(event.resize.w, event.resize.h); | |
426 break; | |
427 case SDL_USEREVENT: | |
428 printf("Handling internal quit request\n"); | |
429 /* Fall through to the quit handler */ | |
430 case SDL_QUIT: | |
431 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
|
432 quit(0); |
0 | 433 default: |
434 /* This should never happen */ | |
435 printf("Warning: Event %d wasn't filtered\n", | |
436 event.type); | |
437 break; | |
438 } | |
439 } | |
440 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
|
441 SDL_Quit(); |
0 | 442 return(255); |
443 } |