2
SDL - Simple DirectMedia Layer
3
Copyright (C) 1997-2006 Sam Lantinga
5
This library is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Lesser General Public
7
License as published by the Free Software Foundation; either
8
version 2.1 of the License, or (at your option) any later version.
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
13
Lesser General Public License for more details.
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
23
/* Include file for SDL event handling */
28
#include "SDL_stdinc.h"
29
#include "SDL_error.h"
30
#include "SDL_active.h"
31
#include "SDL_keyboard.h"
32
#include "SDL_mouse.h"
33
#include "SDL_joystick.h"
36
#include "begin_code.h"
37
/* Set up for C function definitions, even when using C++ */
42
/* General keyboard/mouse state definitions */
43
#define SDL_RELEASED 0
46
/* Event enumerations */
48
SDL_NOEVENT = 0, /* Unused (do not remove) */
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 */
74
/* This last event is only for bounding internal arrays
75
It is the number of bits in the event mask datatype -- Uint32
80
/* Predefined event masks */
81
#define SDL_EVENTMASK(X) (1<<(X))
83
SDL_ACTIVEEVENTMASK = SDL_EVENTMASK(SDL_ACTIVEEVENT),
84
SDL_KEYDOWNMASK = SDL_EVENTMASK(SDL_KEYDOWN),
85
SDL_KEYUPMASK = SDL_EVENTMASK(SDL_KEYUP),
86
SDL_KEYEVENTMASK = SDL_EVENTMASK(SDL_KEYDOWN)|
87
SDL_EVENTMASK(SDL_KEYUP),
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)
109
#define SDL_ALLEVENTS 0xFFFFFFFF
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 */
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 */
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;
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;
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) */
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 */
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.
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;
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.
187
typedef struct SDL_ResizeEvent {
188
Uint8 type; /* SDL_VIDEORESIZE */
189
int w; /* New width */
190
int h; /* New height */
193
/* The "screen redraw" event */
194
typedef struct SDL_ExposeEvent {
195
Uint8 type; /* SDL_VIDEOEXPOSE */
198
/* The "quit requested" event */
199
typedef struct SDL_QuitEvent {
200
Uint8 type; /* SDL_QUIT */
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 */
211
/* If you want to use this event, you should include SDL_syswm.h */
213
typedef struct SDL_SysWMmsg SDL_SysWMmsg;
214
typedef struct SDL_SysWMEvent {
219
/* General event structure */
220
typedef union SDL_Event {
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;
234
SDL_SysWMEvent syswm;
238
/* Function prototypes */
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.
244
extern DECLSPEC void SDLCALL SDL_PumpEvents(void);
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.
264
extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event *events, int numevents,
265
SDL_eventaction action, Uint32 mask);
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.
271
extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event *event);
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.
277
extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event *event);
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.
283
extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event *event);
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.
289
The filter is protypted as:
291
typedef int (SDLCALL *SDL_EventFilter)(const SDL_Event *event);
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.
298
WARNING: Be very careful of what you do in the event filter function, as
299
it may run in a different thread!
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.
308
extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter);
311
Return the current event filter - can be used to "chain" filters.
312
If there is no event filter set, this function returns NULL.
314
extern DECLSPEC SDL_EventFilter SDLCALL SDL_GetEventFilter(void);
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.
326
#define SDL_DISABLE 0
328
extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state);
331
/* Ends C function definitions when using C++ */
335
#include "close_code.h"
337
#endif /* _SDL_events_h */