|
|
1.1 root 1: /*
2: SDL - Simple DirectMedia Layer
1.1.1.2 ! root 3: Copyright (C) 1997-2006 Sam Lantinga
1.1 root 4:
5: This library is free software; you can redistribute it and/or
1.1.1.2 ! root 6: modify it under the terms of the GNU Lesser General Public
1.1 root 7: License as published by the Free Software Foundation; either
1.1.1.2 ! root 8: version 2.1 of the License, or (at your option) any later version.
1.1 root 9:
10: This library is distributed in the hope that it will be useful,
11: but WITHOUT ANY WARRANTY; without even the implied warranty of
12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1.1.1.2 ! root 13: Lesser General Public License for more details.
1.1 root 14:
1.1.1.2 ! root 15: You should have received a copy of the GNU Lesser General Public
! 16: License along with this library; if not, write to the Free Software
! 17: Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1.1 root 18:
19: Sam Lantinga
20: [email protected]
21: */
22:
23: /* Include file for SDL event handling */
24:
25: #ifndef _SDL_events_h
26: #define _SDL_events_h
27:
1.1.1.2 ! root 28: #include "SDL_stdinc.h"
! 29: #include "SDL_error.h"
1.1 root 30: #include "SDL_active.h"
31: #include "SDL_keyboard.h"
32: #include "SDL_mouse.h"
33: #include "SDL_joystick.h"
34: #include "SDL_quit.h"
35:
36: #include "begin_code.h"
37: /* Set up for C function definitions, even when using C++ */
38: #ifdef __cplusplus
39: extern "C" {
40: #endif
41:
1.1.1.2 ! root 42: /* General keyboard/mouse state definitions */
! 43: #define SDL_RELEASED 0
! 44: #define SDL_PRESSED 1
! 45:
1.1 root 46: /* Event enumerations */
1.1.1.2 ! root 47: typedef enum {
! 48: SDL_NOEVENT = 0, /* Unused (do not remove) */
1.1 root 49: SDL_ACTIVEEVENT, /* Application loses/gains visibility */
50: SDL_KEYDOWN, /* Keys pressed */
51: SDL_KEYUP, /* Keys released */
52: SDL_MOUSEMOTION, /* Mouse moved */
53: SDL_MOUSEBUTTONDOWN, /* Mouse button pressed */
54: SDL_MOUSEBUTTONUP, /* Mouse button released */
55: SDL_JOYAXISMOTION, /* Joystick axis motion */
56: SDL_JOYBALLMOTION, /* Joystick trackball motion */
57: SDL_JOYHATMOTION, /* Joystick hat position change */
58: SDL_JOYBUTTONDOWN, /* Joystick button pressed */
59: SDL_JOYBUTTONUP, /* Joystick button released */
60: SDL_QUIT, /* User-requested quit */
61: SDL_SYSWMEVENT, /* System specific event */
62: SDL_EVENT_RESERVEDA, /* Reserved for future use.. */
63: SDL_EVENT_RESERVEDB, /* Reserved for future use.. */
64: SDL_VIDEORESIZE, /* User resized video mode */
65: SDL_VIDEOEXPOSE, /* Screen needs to be redrawn */
66: SDL_EVENT_RESERVED2, /* Reserved for future use.. */
67: SDL_EVENT_RESERVED3, /* Reserved for future use.. */
68: SDL_EVENT_RESERVED4, /* Reserved for future use.. */
69: SDL_EVENT_RESERVED5, /* Reserved for future use.. */
70: SDL_EVENT_RESERVED6, /* Reserved for future use.. */
71: SDL_EVENT_RESERVED7, /* Reserved for future use.. */
72: /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
73: SDL_USEREVENT = 24,
74: /* This last event is only for bounding internal arrays
75: It is the number of bits in the event mask datatype -- Uint32
76: */
77: SDL_NUMEVENTS = 32
1.1.1.2 ! root 78: } SDL_EventType;
1.1 root 79:
80: /* Predefined event masks */
81: #define SDL_EVENTMASK(X) (1<<(X))
1.1.1.2 ! root 82: typedef enum {
1.1 root 83: SDL_ACTIVEEVENTMASK = SDL_EVENTMASK(SDL_ACTIVEEVENT),
84: SDL_KEYDOWNMASK = SDL_EVENTMASK(SDL_KEYDOWN),
85: SDL_KEYUPMASK = SDL_EVENTMASK(SDL_KEYUP),
1.1.1.2 ! root 86: SDL_KEYEVENTMASK = SDL_EVENTMASK(SDL_KEYDOWN)|
! 87: SDL_EVENTMASK(SDL_KEYUP),
1.1 root 88: SDL_MOUSEMOTIONMASK = SDL_EVENTMASK(SDL_MOUSEMOTION),
89: SDL_MOUSEBUTTONDOWNMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN),
90: SDL_MOUSEBUTTONUPMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
91: SDL_MOUSEEVENTMASK = SDL_EVENTMASK(SDL_MOUSEMOTION)|
92: SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN)|
93: SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
94: SDL_JOYAXISMOTIONMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION),
95: SDL_JOYBALLMOTIONMASK = SDL_EVENTMASK(SDL_JOYBALLMOTION),
96: SDL_JOYHATMOTIONMASK = SDL_EVENTMASK(SDL_JOYHATMOTION),
97: SDL_JOYBUTTONDOWNMASK = SDL_EVENTMASK(SDL_JOYBUTTONDOWN),
98: SDL_JOYBUTTONUPMASK = SDL_EVENTMASK(SDL_JOYBUTTONUP),
99: SDL_JOYEVENTMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION)|
100: SDL_EVENTMASK(SDL_JOYBALLMOTION)|
101: SDL_EVENTMASK(SDL_JOYHATMOTION)|
102: SDL_EVENTMASK(SDL_JOYBUTTONDOWN)|
103: SDL_EVENTMASK(SDL_JOYBUTTONUP),
104: SDL_VIDEORESIZEMASK = SDL_EVENTMASK(SDL_VIDEORESIZE),
105: SDL_VIDEOEXPOSEMASK = SDL_EVENTMASK(SDL_VIDEOEXPOSE),
106: SDL_QUITMASK = SDL_EVENTMASK(SDL_QUIT),
107: SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT)
1.1.1.2 ! root 108: } SDL_EventMask ;
1.1 root 109: #define SDL_ALLEVENTS 0xFFFFFFFF
110:
111: /* Application visibility event structure */
112: typedef struct SDL_ActiveEvent {
113: Uint8 type; /* SDL_ACTIVEEVENT */
114: Uint8 gain; /* Whether given states were gained or lost (1/0) */
115: Uint8 state; /* A mask of the focus states */
116: } SDL_ActiveEvent;
117:
118: /* Keyboard event structure */
119: typedef struct SDL_KeyboardEvent {
120: Uint8 type; /* SDL_KEYDOWN or SDL_KEYUP */
121: Uint8 which; /* The keyboard device index */
122: Uint8 state; /* SDL_PRESSED or SDL_RELEASED */
123: SDL_keysym keysym;
124: } SDL_KeyboardEvent;
125:
126: /* Mouse motion event structure */
127: typedef struct SDL_MouseMotionEvent {
128: Uint8 type; /* SDL_MOUSEMOTION */
129: Uint8 which; /* The mouse device index */
130: Uint8 state; /* The current button state */
131: Uint16 x, y; /* The X/Y coordinates of the mouse */
132: Sint16 xrel; /* The relative motion in the X direction */
133: Sint16 yrel; /* The relative motion in the Y direction */
134: } SDL_MouseMotionEvent;
135:
136: /* Mouse button event structure */
137: typedef struct SDL_MouseButtonEvent {
138: Uint8 type; /* SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */
139: Uint8 which; /* The mouse device index */
140: Uint8 button; /* The mouse button index */
141: Uint8 state; /* SDL_PRESSED or SDL_RELEASED */
142: Uint16 x, y; /* The X/Y coordinates of the mouse at press time */
143: } SDL_MouseButtonEvent;
144:
145: /* Joystick axis motion event structure */
146: typedef struct SDL_JoyAxisEvent {
147: Uint8 type; /* SDL_JOYAXISMOTION */
148: Uint8 which; /* The joystick device index */
149: Uint8 axis; /* The joystick axis index */
150: Sint16 value; /* The axis value (range: -32768 to 32767) */
151: } SDL_JoyAxisEvent;
152:
153: /* Joystick trackball motion event structure */
154: typedef struct SDL_JoyBallEvent {
155: Uint8 type; /* SDL_JOYBALLMOTION */
156: Uint8 which; /* The joystick device index */
157: Uint8 ball; /* The joystick trackball index */
158: Sint16 xrel; /* The relative motion in the X direction */
159: Sint16 yrel; /* The relative motion in the Y direction */
160: } SDL_JoyBallEvent;
161:
162: /* Joystick hat position change event structure */
163: typedef struct SDL_JoyHatEvent {
164: Uint8 type; /* SDL_JOYHATMOTION */
165: Uint8 which; /* The joystick device index */
166: Uint8 hat; /* The joystick hat index */
167: Uint8 value; /* The hat position value:
168: SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP
169: SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT
170: SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN
171: Note that zero means the POV is centered.
172: */
173: } SDL_JoyHatEvent;
174:
175: /* Joystick button event structure */
176: typedef struct SDL_JoyButtonEvent {
177: Uint8 type; /* SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */
178: Uint8 which; /* The joystick device index */
179: Uint8 button; /* The joystick button index */
180: Uint8 state; /* SDL_PRESSED or SDL_RELEASED */
181: } SDL_JoyButtonEvent;
182:
183: /* The "window resized" event
184: When you get this event, you are responsible for setting a new video
185: mode with the new width and height.
186: */
187: typedef struct SDL_ResizeEvent {
188: Uint8 type; /* SDL_VIDEORESIZE */
189: int w; /* New width */
190: int h; /* New height */
191: } SDL_ResizeEvent;
192:
193: /* The "screen redraw" event */
194: typedef struct SDL_ExposeEvent {
195: Uint8 type; /* SDL_VIDEOEXPOSE */
196: } SDL_ExposeEvent;
197:
198: /* The "quit requested" event */
199: typedef struct SDL_QuitEvent {
200: Uint8 type; /* SDL_QUIT */
201: } SDL_QuitEvent;
202:
203: /* A user-defined event type */
204: typedef struct SDL_UserEvent {
205: Uint8 type; /* SDL_USEREVENT through SDL_NUMEVENTS-1 */
206: int code; /* User defined event code */
207: void *data1; /* User defined data pointer */
208: void *data2; /* User defined data pointer */
209: } SDL_UserEvent;
210:
211: /* If you want to use this event, you should include SDL_syswm.h */
212: struct SDL_SysWMmsg;
213: typedef struct SDL_SysWMmsg SDL_SysWMmsg;
214: typedef struct SDL_SysWMEvent {
215: Uint8 type;
216: SDL_SysWMmsg *msg;
217: } SDL_SysWMEvent;
218:
219: /* General event structure */
1.1.1.2 ! root 220: typedef union SDL_Event {
1.1 root 221: Uint8 type;
222: SDL_ActiveEvent active;
223: SDL_KeyboardEvent key;
224: SDL_MouseMotionEvent motion;
225: SDL_MouseButtonEvent button;
226: SDL_JoyAxisEvent jaxis;
227: SDL_JoyBallEvent jball;
228: SDL_JoyHatEvent jhat;
229: SDL_JoyButtonEvent jbutton;
230: SDL_ResizeEvent resize;
231: SDL_ExposeEvent expose;
232: SDL_QuitEvent quit;
233: SDL_UserEvent user;
234: SDL_SysWMEvent syswm;
235: } SDL_Event;
236:
237:
238: /* Function prototypes */
239:
240: /* Pumps the event loop, gathering events from the input devices.
241: This function updates the event queue and internal input device state.
242: This should only be run in the thread that sets the video mode.
243: */
244: extern DECLSPEC void SDLCALL SDL_PumpEvents(void);
245:
246: /* Checks the event queue for messages and optionally returns them.
247: If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to
248: the back of the event queue.
249: If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front
250: of the event queue, matching 'mask', will be returned and will not
251: be removed from the queue.
252: If 'action' is SDL_GETEVENT, up to 'numevents' events at the front
253: of the event queue, matching 'mask', will be returned and will be
254: removed from the queue.
255: This function returns the number of events actually stored, or -1
256: if there was an error. This function is thread-safe.
257: */
258: typedef enum {
259: SDL_ADDEVENT,
260: SDL_PEEKEVENT,
261: SDL_GETEVENT
262: } SDL_eventaction;
263: /* */
264: extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event *events, int numevents,
265: SDL_eventaction action, Uint32 mask);
266:
267: /* Polls for currently pending events, and returns 1 if there are any pending
268: events, or 0 if there are none available. If 'event' is not NULL, the next
269: event is removed from the queue and stored in that area.
270: */
271: extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event *event);
272:
273: /* Waits indefinitely for the next available event, returning 1, or 0 if there
274: was an error while waiting for events. If 'event' is not NULL, the next
275: event is removed from the queue and stored in that area.
276: */
277: extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event *event);
278:
279: /* Add an event to the event queue.
280: This function returns 0 on success, or -1 if the event queue was full
281: or there was some other error.
282: */
283: extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event *event);
284:
285: /*
286: This function sets up a filter to process all events before they
287: change internal state and are posted to the internal event queue.
288:
289: The filter is protypted as:
290: */
291: typedef int (SDLCALL *SDL_EventFilter)(const SDL_Event *event);
292: /*
293: If the filter returns 1, then the event will be added to the internal queue.
294: If it returns 0, then the event will be dropped from the queue, but the
295: internal state will still be updated. This allows selective filtering of
296: dynamically arriving events.
297:
298: WARNING: Be very careful of what you do in the event filter function, as
299: it may run in a different thread!
300:
301: There is one caveat when dealing with the SDL_QUITEVENT event type. The
302: event filter is only called when the window manager desires to close the
303: application window. If the event filter returns 1, then the window will
304: be closed, otherwise the window will remain open if possible.
305: If the quit event is generated by an interrupt signal, it will bypass the
306: internal queue and be delivered to the application at the next event poll.
307: */
308: extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter);
309:
310: /*
311: Return the current event filter - can be used to "chain" filters.
312: If there is no event filter set, this function returns NULL.
313: */
314: extern DECLSPEC SDL_EventFilter SDLCALL SDL_GetEventFilter(void);
315:
316: /*
317: This function allows you to set the state of processing certain events.
318: If 'state' is set to SDL_IGNORE, that event will be automatically dropped
319: from the event queue and will not event be filtered.
320: If 'state' is set to SDL_ENABLE, that event will be processed normally.
321: If 'state' is set to SDL_QUERY, SDL_EventState() will return the
322: current processing state of the specified event.
323: */
324: #define SDL_QUERY -1
325: #define SDL_IGNORE 0
326: #define SDL_DISABLE 0
327: #define SDL_ENABLE 1
328: extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state);
329:
330:
331: /* Ends C function definitions when using C++ */
332: #ifdef __cplusplus
333: }
334: #endif
335: #include "close_code.h"
336:
337: #endif /* _SDL_events_h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.