|
1 <HTML |
|
2 ><HEAD |
|
3 ><TITLE |
|
4 >Event Examples</TITLE |
|
5 ><META |
|
6 NAME="GENERATOR" |
|
7 CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ |
|
8 "><LINK |
|
9 REL="HOME" |
|
10 TITLE="SDL Library Documentation" |
|
11 HREF="index.html"><LINK |
|
12 REL="UP" |
|
13 TITLE="Examples" |
|
14 HREF="guideexamples.html"><LINK |
|
15 REL="PREVIOUS" |
|
16 TITLE="Examples" |
|
17 HREF="guideexamples.html"><LINK |
|
18 REL="NEXT" |
|
19 TITLE="Audio Examples" |
|
20 HREF="guideaudioexamples.html"></HEAD |
|
21 ><BODY |
|
22 CLASS="SECT1" |
|
23 BGCOLOR="#FFF8DC" |
|
24 TEXT="#000000" |
|
25 LINK="#0000ee" |
|
26 VLINK="#551a8b" |
|
27 ALINK="#ff0000" |
|
28 ><DIV |
|
29 CLASS="NAVHEADER" |
|
30 ><TABLE |
|
31 SUMMARY="Header navigation table" |
|
32 WIDTH="100%" |
|
33 BORDER="0" |
|
34 CELLPADDING="0" |
|
35 CELLSPACING="0" |
|
36 ><TR |
|
37 ><TH |
|
38 COLSPAN="3" |
|
39 ALIGN="center" |
|
40 >SDL Library Documentation</TH |
|
41 ></TR |
|
42 ><TR |
|
43 ><TD |
|
44 WIDTH="10%" |
|
45 ALIGN="left" |
|
46 VALIGN="bottom" |
|
47 ><A |
|
48 HREF="guideexamples.html" |
|
49 ACCESSKEY="P" |
|
50 >Prev</A |
|
51 ></TD |
|
52 ><TD |
|
53 WIDTH="80%" |
|
54 ALIGN="center" |
|
55 VALIGN="bottom" |
|
56 >Chapter 4. Examples</TD |
|
57 ><TD |
|
58 WIDTH="10%" |
|
59 ALIGN="right" |
|
60 VALIGN="bottom" |
|
61 ><A |
|
62 HREF="guideaudioexamples.html" |
|
63 ACCESSKEY="N" |
|
64 >Next</A |
|
65 ></TD |
|
66 ></TR |
|
67 ></TABLE |
|
68 ><HR |
|
69 ALIGN="LEFT" |
|
70 WIDTH="100%"></DIV |
|
71 ><DIV |
|
72 CLASS="SECT1" |
|
73 ><H1 |
|
74 CLASS="SECT1" |
|
75 ><A |
|
76 NAME="GUIDEEVENTEXAMPLES" |
|
77 ></A |
|
78 >Event Examples</H1 |
|
79 ><P |
|
80 ></P |
|
81 ><DIV |
|
82 CLASS="SECT2" |
|
83 ><H2 |
|
84 CLASS="SECT2" |
|
85 ><A |
|
86 NAME="AEN375" |
|
87 ></A |
|
88 >Filtering and Handling Events</H2 |
|
89 ><P |
|
90 ><PRE |
|
91 CLASS="PROGRAMLISTING" |
|
92 >#include <stdio.h> |
|
93 #include <stdlib.h> |
|
94 |
|
95 #include "SDL.h" |
|
96 |
|
97 /* This function may run in a separate event thread */ |
|
98 int FilterEvents(const SDL_Event *event) { |
|
99 static int boycott = 1; |
|
100 |
|
101 /* This quit event signals the closing of the window */ |
|
102 if ( (event->type == SDL_QUIT) && boycott ) { |
|
103 printf("Quit event filtered out -- try again.\n"); |
|
104 boycott = 0; |
|
105 return(0); |
|
106 } |
|
107 if ( event->type == SDL_MOUSEMOTION ) { |
|
108 printf("Mouse moved to (%d,%d)\n", |
|
109 event->motion.x, event->motion.y); |
|
110 return(0); /* Drop it, we've handled it */ |
|
111 } |
|
112 return(1); |
|
113 } |
|
114 |
|
115 int main(int argc, char *argv[]) |
|
116 { |
|
117 SDL_Event event; |
|
118 |
|
119 /* Initialize the SDL library (starts the event loop) */ |
|
120 if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { |
|
121 fprintf(stderr, |
|
122 "Couldn't initialize SDL: %s\n", SDL_GetError()); |
|
123 exit(1); |
|
124 } |
|
125 |
|
126 /* Clean up on exit, exit on window close and interrupt */ |
|
127 atexit(SDL_Quit); |
|
128 |
|
129 /* Ignore key events */ |
|
130 SDL_EventState(SDL_KEYDOWN, SDL_IGNORE); |
|
131 SDL_EventState(SDL_KEYUP, SDL_IGNORE); |
|
132 |
|
133 /* Filter quit and mouse motion events */ |
|
134 SDL_SetEventFilter(FilterEvents); |
|
135 |
|
136 /* The mouse isn't much use unless we have a display for reference */ |
|
137 if ( SDL_SetVideoMode(640, 480, 8, 0) == NULL ) { |
|
138 fprintf(stderr, "Couldn't set 640x480x8 video mode: %s\n", |
|
139 SDL_GetError()); |
|
140 exit(1); |
|
141 } |
|
142 |
|
143 /* Loop waiting for ESC+Mouse_Button */ |
|
144 while ( SDL_WaitEvent(&event) >= 0 ) { |
|
145 switch (event.type) { |
|
146 case SDL_ACTIVEEVENT: { |
|
147 if ( event.active.state & SDL_APPACTIVE ) { |
|
148 if ( event.active.gain ) { |
|
149 printf("App activated\n"); |
|
150 } else { |
|
151 printf("App iconified\n"); |
|
152 } |
|
153 } |
|
154 } |
|
155 break; |
|
156 |
|
157 case SDL_MOUSEBUTTONDOWN: { |
|
158 Uint8 *keys; |
|
159 |
|
160 keys = SDL_GetKeyState(NULL); |
|
161 if ( keys[SDLK_ESCAPE] == SDL_PRESSED ) { |
|
162 printf("Bye bye...\n"); |
|
163 exit(0); |
|
164 } |
|
165 printf("Mouse button pressed\n"); |
|
166 } |
|
167 break; |
|
168 |
|
169 case SDL_QUIT: { |
|
170 printf("Quit requested, quitting.\n"); |
|
171 exit(0); |
|
172 } |
|
173 break; |
|
174 } |
|
175 } |
|
176 /* This should never happen */ |
|
177 printf("SDL_WaitEvent error: %s\n", SDL_GetError()); |
|
178 exit(1); |
|
179 }</PRE |
|
180 ></P |
|
181 ></DIV |
|
182 ></DIV |
|
183 ><DIV |
|
184 CLASS="NAVFOOTER" |
|
185 ><HR |
|
186 ALIGN="LEFT" |
|
187 WIDTH="100%"><TABLE |
|
188 SUMMARY="Footer navigation table" |
|
189 WIDTH="100%" |
|
190 BORDER="0" |
|
191 CELLPADDING="0" |
|
192 CELLSPACING="0" |
|
193 ><TR |
|
194 ><TD |
|
195 WIDTH="33%" |
|
196 ALIGN="left" |
|
197 VALIGN="top" |
|
198 ><A |
|
199 HREF="guideexamples.html" |
|
200 ACCESSKEY="P" |
|
201 >Prev</A |
|
202 ></TD |
|
203 ><TD |
|
204 WIDTH="34%" |
|
205 ALIGN="center" |
|
206 VALIGN="top" |
|
207 ><A |
|
208 HREF="index.html" |
|
209 ACCESSKEY="H" |
|
210 >Home</A |
|
211 ></TD |
|
212 ><TD |
|
213 WIDTH="33%" |
|
214 ALIGN="right" |
|
215 VALIGN="top" |
|
216 ><A |
|
217 HREF="guideaudioexamples.html" |
|
218 ACCESSKEY="N" |
|
219 >Next</A |
|
220 ></TD |
|
221 ></TR |
|
222 ><TR |
|
223 ><TD |
|
224 WIDTH="33%" |
|
225 ALIGN="left" |
|
226 VALIGN="top" |
|
227 >Examples</TD |
|
228 ><TD |
|
229 WIDTH="34%" |
|
230 ALIGN="center" |
|
231 VALIGN="top" |
|
232 ><A |
|
233 HREF="guideexamples.html" |
|
234 ACCESSKEY="U" |
|
235 >Up</A |
|
236 ></TD |
|
237 ><TD |
|
238 WIDTH="33%" |
|
239 ALIGN="right" |
|
240 VALIGN="top" |
|
241 >Audio Examples</TD |
|
242 ></TR |
|
243 ></TABLE |
|
244 ></DIV |
|
245 ></BODY |
|
246 ></HTML |
|
247 > |