Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
720 lines (637 loc) · 25.2 KB

SDL_events.h

File metadata and controls

720 lines (637 loc) · 25.2 KB
 
1
2
/*
Simple DirectMedia Layer
Feb 15, 2013
Feb 15, 2013
3
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
/**
* \file SDL_events.h
May 18, 2013
May 18, 2013
24
*
25
26
27
28
29
30
31
32
33
34
35
36
* Include file for SDL event handling.
*/
#ifndef _SDL_events_h
#define _SDL_events_h
#include "SDL_stdinc.h"
#include "SDL_error.h"
#include "SDL_video.h"
#include "SDL_keyboard.h"
#include "SDL_mouse.h"
#include "SDL_joystick.h"
Nov 27, 2012
Nov 27, 2012
37
#include "SDL_gamecontroller.h"
38
39
40
41
42
43
44
45
46
47
48
#include "SDL_quit.h"
#include "SDL_gesture.h"
#include "SDL_touch.h"
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif
/* General keyboard/mouse state definitions */
May 18, 2013
May 18, 2013
49
50
#define SDL_RELEASED 0
#define SDL_PRESSED 1
51
52
53
54
55
56
57
58
59
60
61
/**
* \brief The types of events that can be delivered.
*/
typedef enum
{
SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */
/* Application events */
SDL_QUIT = 0x100, /**< User-requested quit */
Jun 9, 2013
Jun 9, 2013
62
/* These application events have special meaning on iOS, see README-ios.txt for details */
May 18, 2013
May 18, 2013
63
SDL_APP_TERMINATING, /**< The application is being terminated by the OS
May 18, 2013
May 18, 2013
64
65
66
Called on iOS in applicationWillTerminate()
Called on Android in onDestroy()
*/
May 18, 2013
May 18, 2013
67
SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible.
May 18, 2013
May 18, 2013
68
69
70
Called on iOS in applicationDidReceiveMemoryWarning()
Called on Android in onLowMemory()
*/
May 18, 2013
May 18, 2013
71
SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background
May 18, 2013
May 18, 2013
72
73
74
Called on iOS in applicationWillResignActive()
Called on Android in onPause()
*/
May 18, 2013
May 18, 2013
75
SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time
May 18, 2013
May 18, 2013
76
77
78
Called on iOS in applicationDidEnterBackground()
Called on Android in onPause()
*/
May 18, 2013
May 18, 2013
79
SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground
May 18, 2013
May 18, 2013
80
81
82
Called on iOS in applicationWillEnterForeground()
Called on Android in onResume()
*/
May 18, 2013
May 18, 2013
83
SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive
May 18, 2013
May 18, 2013
84
85
86
87
Called on iOS in applicationDidBecomeActive()
Called on Android in onResume()
*/
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/* Window events */
SDL_WINDOWEVENT = 0x200, /**< Window state change */
SDL_SYSWMEVENT, /**< System specific event */
/* Keyboard events */
SDL_KEYDOWN = 0x300, /**< Key pressed */
SDL_KEYUP, /**< Key released */
SDL_TEXTEDITING, /**< Keyboard text editing (composition) */
SDL_TEXTINPUT, /**< Keyboard text input */
/* Mouse events */
SDL_MOUSEMOTION = 0x400, /**< Mouse moved */
SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */
SDL_MOUSEBUTTONUP, /**< Mouse button released */
SDL_MOUSEWHEEL, /**< Mouse wheel motion */
/* Joystick events */
SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */
SDL_JOYBALLMOTION, /**< Joystick trackball motion */
SDL_JOYHATMOTION, /**< Joystick hat position change */
SDL_JOYBUTTONDOWN, /**< Joystick button pressed */
SDL_JOYBUTTONUP, /**< Joystick button released */
Nov 27, 2012
Nov 27, 2012
110
111
112
SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */
SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */
May 18, 2013
May 18, 2013
113
114
115
116
117
118
119
/* Game controller events */
SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */
SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */
SDL_CONTROLLERBUTTONUP, /**< Game controller button released */
SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */
SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */
SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* Touch events */
SDL_FINGERDOWN = 0x700,
SDL_FINGERUP,
SDL_FINGERMOTION,
/* Gesture events */
SDL_DOLLARGESTURE = 0x800,
SDL_DOLLARRECORD,
SDL_MULTIGESTURE,
/* Clipboard events */
SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */
/* Drag and drop events */
SDL_DROPFILE = 0x1000, /**< The system requests a file open */
May 18, 2013
May 18, 2013
136
137
138
139
140
141
142
143
144
145
146
147
/** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use,
* and should be allocated with SDL_RegisterEvents()
*/
SDL_USEREVENT = 0x8000,
/**
* This last event is only for bounding internal arrays
*/
SDL_LASTEVENT = 0xFFFF
} SDL_EventType;
Mar 3, 2013
Mar 3, 2013
148
149
150
/**
* \brief Fields shared by every event
*/
Apr 21, 2013
Apr 21, 2013
151
typedef struct SDL_CommonEvent
Mar 3, 2013
Mar 3, 2013
152
153
154
{
Uint32 type;
Uint32 timestamp;
Apr 21, 2013
Apr 21, 2013
155
} SDL_CommonEvent;
May 18, 2013
May 18, 2013
156
157
158
159
160
161
162
163
164
165
166
167
168
/**
* \brief Window state change event data (event.window.*)
*/
typedef struct SDL_WindowEvent
{
Uint32 type; /**< ::SDL_WINDOWEVENT */
Uint32 timestamp;
Uint32 windowID; /**< The associated window */
Uint8 event; /**< ::SDL_WindowEventID */
Uint8 padding1;
Uint8 padding2;
Uint8 padding3;
Mar 3, 2013
Mar 3, 2013
169
170
Sint32 data1; /**< event dependent data */
Sint32 data2; /**< event dependent data */
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
} SDL_WindowEvent;
/**
* \brief Keyboard button event structure (event.key.*)
*/
typedef struct SDL_KeyboardEvent
{
Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */
Uint32 timestamp;
Uint32 windowID; /**< The window with keyboard focus, if any */
Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
Uint8 repeat; /**< Non-zero if this is a key repeat */
Uint8 padding2;
Uint8 padding3;
SDL_Keysym keysym; /**< The key that was pressed or released */
} SDL_KeyboardEvent;
#define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32)
/**
* \brief Keyboard text editing event structure (event.edit.*)
*/
typedef struct SDL_TextEditingEvent
{
Uint32 type; /**< ::SDL_TEXTEDITING */
Uint32 timestamp;
Uint32 windowID; /**< The window with keyboard focus, if any */
char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */
Mar 3, 2013
Mar 3, 2013
198
199
Sint32 start; /**< The start cursor of selected editing text */
Sint32 length; /**< The length of selected editing text */
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
} SDL_TextEditingEvent;
#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32)
/**
* \brief Keyboard text input event structure (event.text.*)
*/
typedef struct SDL_TextInputEvent
{
Uint32 type; /**< ::SDL_TEXTINPUT */
Uint32 timestamp;
Uint32 windowID; /**< The window with keyboard focus, if any */
char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */
} SDL_TextInputEvent;
/**
* \brief Mouse motion event structure (event.motion.*)
*/
typedef struct SDL_MouseMotionEvent
{
Uint32 type; /**< ::SDL_MOUSEMOTION */
Uint32 timestamp;
Uint32 windowID; /**< The window with mouse focus, if any */
Mar 3, 2013
Mar 3, 2013
223
Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
May 21, 2013
May 21, 2013
224
Uint32 state; /**< The current button state */
Mar 3, 2013
Mar 3, 2013
225
226
227
228
Sint32 x; /**< X coordinate, relative to window */
Sint32 y; /**< Y coordinate, relative to window */
Sint32 xrel; /**< The relative motion in the X direction */
Sint32 yrel; /**< The relative motion in the Y direction */
229
230
231
232
233
234
235
236
237
238
} SDL_MouseMotionEvent;
/**
* \brief Mouse button event structure (event.button.*)
*/
typedef struct SDL_MouseButtonEvent
{
Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */
Uint32 timestamp;
Uint32 windowID; /**< The window with mouse focus, if any */
Mar 3, 2013
Mar 3, 2013
239
Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
240
241
242
243
Uint8 button; /**< The mouse button index */
Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
Uint8 padding1;
Uint8 padding2;
Mar 3, 2013
Mar 3, 2013
244
245
Sint32 x; /**< X coordinate, relative to window */
Sint32 y; /**< Y coordinate, relative to window */
246
247
248
249
250
251
252
253
254
255
} SDL_MouseButtonEvent;
/**
* \brief Mouse wheel event structure (event.wheel.*)
*/
typedef struct SDL_MouseWheelEvent
{
Uint32 type; /**< ::SDL_MOUSEWHEEL */
Uint32 timestamp;
Uint32 windowID; /**< The window with mouse focus, if any */
Mar 3, 2013
Mar 3, 2013
256
257
258
Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
Sint32 x; /**< The amount scrolled horizontally */
Sint32 y; /**< The amount scrolled vertically */
259
260
261
262
263
264
265
266
267
} SDL_MouseWheelEvent;
/**
* \brief Joystick axis motion event structure (event.jaxis.*)
*/
typedef struct SDL_JoyAxisEvent
{
Uint32 type; /**< ::SDL_JOYAXISMOTION */
Uint32 timestamp;
Mar 6, 2013
Mar 6, 2013
268
SDL_JoystickID which; /**< The joystick instance id */
269
270
271
Uint8 axis; /**< The joystick axis index */
Uint8 padding1;
Uint8 padding2;
Mar 3, 2013
Mar 3, 2013
272
273
274
Uint8 padding3;
Sint16 value; /**< The axis value (range: -32768 to 32767) */
Uint16 padding4;
275
276
277
278
279
280
281
282
} SDL_JoyAxisEvent;
/**
* \brief Joystick trackball motion event structure (event.jball.*)
*/
typedef struct SDL_JoyBallEvent
{
Uint32 type; /**< ::SDL_JOYBALLMOTION */
May 18, 2013
May 18, 2013
283
Uint32 timestamp;
Mar 6, 2013
Mar 6, 2013
284
SDL_JoystickID which; /**< The joystick instance id */
285
286
287
Uint8 ball; /**< The joystick trackball index */
Uint8 padding1;
Uint8 padding2;
Mar 3, 2013
Mar 3, 2013
288
289
290
Uint8 padding3;
Sint16 xrel; /**< The relative motion in the X direction */
Sint16 yrel; /**< The relative motion in the Y direction */
291
292
293
294
295
296
297
298
} SDL_JoyBallEvent;
/**
* \brief Joystick hat position change event structure (event.jhat.*)
*/
typedef struct SDL_JoyHatEvent
{
Uint32 type; /**< ::SDL_JOYHATMOTION */
May 18, 2013
May 18, 2013
299
Uint32 timestamp;
Mar 6, 2013
Mar 6, 2013
300
SDL_JoystickID which; /**< The joystick instance id */
301
302
303
304
305
Uint8 hat; /**< The joystick hat index */
Uint8 value; /**< The hat position value.
* \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP
* \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT
* \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN
May 18, 2013
May 18, 2013
306
*
307
308
309
* Note that zero means the POV is centered.
*/
Uint8 padding1;
Mar 3, 2013
Mar 3, 2013
310
Uint8 padding2;
311
312
313
314
315
316
317
318
} SDL_JoyHatEvent;
/**
* \brief Joystick button event structure (event.jbutton.*)
*/
typedef struct SDL_JoyButtonEvent
{
Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */
May 18, 2013
May 18, 2013
319
Uint32 timestamp;
Mar 6, 2013
Mar 6, 2013
320
SDL_JoystickID which; /**< The joystick instance id */
321
322
323
Uint8 button; /**< The joystick button index */
Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
Uint8 padding1;
Mar 3, 2013
Mar 3, 2013
324
Uint8 padding2;
325
326
} SDL_JoyButtonEvent;
Nov 27, 2012
Nov 27, 2012
327
328
329
330
331
/**
* \brief Joystick device event structure (event.jdevice.*)
*/
typedef struct SDL_JoyDeviceEvent
{
May 18, 2013
May 18, 2013
332
333
334
Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */
Uint32 timestamp;
Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */
Nov 27, 2012
Nov 27, 2012
335
336
337
338
339
340
341
342
343
} SDL_JoyDeviceEvent;
/**
* \brief Game controller axis motion event structure (event.caxis.*)
*/
typedef struct SDL_ControllerAxisEvent
{
Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */
May 18, 2013
May 18, 2013
344
Uint32 timestamp;
Mar 6, 2013
Mar 6, 2013
345
SDL_JoystickID which; /**< The joystick instance id */
Mar 3, 2013
Mar 3, 2013
346
347
348
349
350
351
Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */
Uint8 padding1;
Uint8 padding2;
Uint8 padding3;
Sint16 value; /**< The axis value (range: -32768 to 32767) */
Uint16 padding4;
Nov 27, 2012
Nov 27, 2012
352
353
354
355
356
357
358
359
360
} SDL_ControllerAxisEvent;
/**
* \brief Game controller button event structure (event.cbutton.*)
*/
typedef struct SDL_ControllerButtonEvent
{
Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */
May 18, 2013
May 18, 2013
361
Uint32 timestamp;
Mar 6, 2013
Mar 6, 2013
362
SDL_JoystickID which; /**< The joystick instance id */
Mar 3, 2013
Mar 3, 2013
363
Uint8 button; /**< The controller button (SDL_GameControllerButton) */
Nov 27, 2012
Nov 27, 2012
364
Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
Mar 3, 2013
Mar 3, 2013
365
366
Uint8 padding1;
Uint8 padding2;
Nov 27, 2012
Nov 27, 2012
367
368
369
370
371
372
373
374
} SDL_ControllerButtonEvent;
/**
* \brief Controller device event structure (event.cdevice.*)
*/
typedef struct SDL_ControllerDeviceEvent
{
May 18, 2013
May 18, 2013
375
376
377
Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */
Uint32 timestamp;
Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */
Nov 27, 2012
Nov 27, 2012
378
379
} SDL_ControllerDeviceEvent;
Mar 3, 2013
Mar 3, 2013
382
* \brief Touch finger event structure (event.tfinger.*)
383
384
385
*/
typedef struct SDL_TouchFingerEvent
{
Mar 3, 2013
Mar 3, 2013
386
Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */
Mar 3, 2013
Mar 3, 2013
388
SDL_TouchID touchId; /**< The touch device id */
389
SDL_FingerID fingerId;
Mar 3, 2013
Mar 3, 2013
390
391
392
393
394
float x; /**< Normalized in the range 0...1 */
float y; /**< Normalized in the range 0...1 */
float dx; /**< Normalized in the range 0...1 */
float dy; /**< Normalized in the range 0...1 */
float pressure; /**< Normalized in the range 0...1 */
395
396
397
398
399
400
401
402
403
404
} SDL_TouchFingerEvent;
/**
* \brief Multiple Finger Gesture Event (event.mgesture.*)
*/
typedef struct SDL_MultiGestureEvent
{
Uint32 type; /**< ::SDL_MULTIGESTURE */
Uint32 timestamp;
Mar 3, 2013
Mar 3, 2013
405
SDL_TouchID touchId; /**< The touch device index */
406
407
float dTheta;
float dDist;
Mar 3, 2013
Mar 3, 2013
408
float x;
May 18, 2013
May 18, 2013
409
float y;
410
411
412
413
Uint16 numFingers;
Uint16 padding;
} SDL_MultiGestureEvent;
Mar 3, 2013
Mar 3, 2013
414
Jun 16, 2013
Jun 16, 2013
415
416
417
/**
* \brief Dollar Gesture Event (event.dgesture.*)
*/
418
419
420
421
typedef struct SDL_DollarGestureEvent
{
Uint32 type; /**< ::SDL_DOLLARGESTURE */
Uint32 timestamp;
Mar 3, 2013
Mar 3, 2013
422
SDL_TouchID touchId; /**< The touch device id */
423
424
425
SDL_GestureID gestureId;
Uint32 numFingers;
float error;
Mar 3, 2013
Mar 3, 2013
426
427
float x; /**< Normalized center of gesture */
float y; /**< Normalized center of gesture */
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
} SDL_DollarGestureEvent;
/**
* \brief An event used to request a file open by the system (event.drop.*)
* This event is disabled by default, you can enable it with SDL_EventState()
* \note If you enable this event, you must free the filename in the event.
*/
typedef struct SDL_DropEvent
{
Uint32 type; /**< ::SDL_DROPFILE */
Uint32 timestamp;
char *file; /**< The file name, which should be freed with SDL_free() */
} SDL_DropEvent;
/**
* \brief The "quit requested" event
*/
typedef struct SDL_QuitEvent
{
Uint32 type; /**< ::SDL_QUIT */
Uint32 timestamp;
} SDL_QuitEvent;
May 18, 2013
May 18, 2013
453
454
455
456
457
458
459
460
/**
* \brief OS Specific event
*/
typedef struct SDL_OSEvent
{
Uint32 type; /**< ::SDL_QUIT */
Uint32 timestamp;
} SDL_OSEvent;
461
462
463
464
465
466
/**
* \brief A user-defined event type (event.user.*)
*/
typedef struct SDL_UserEvent
{
Jun 5, 2013
Jun 5, 2013
467
Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */
468
469
Uint32 timestamp;
Uint32 windowID; /**< The associated window if any */
Mar 3, 2013
Mar 3, 2013
470
Sint32 code; /**< User defined event code */
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
void *data1; /**< User defined data pointer */
void *data2; /**< User defined data pointer */
} SDL_UserEvent;
struct SDL_SysWMmsg;
typedef struct SDL_SysWMmsg SDL_SysWMmsg;
/**
* \brief A video driver dependent system event (event.syswm.*)
* This event is disabled by default, you can enable it with SDL_EventState()
*
* \note If you want to use this event, you should include SDL_syswm.h.
*/
typedef struct SDL_SysWMEvent
{
Uint32 type; /**< ::SDL_SYSWMEVENT */
Uint32 timestamp;
SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */
} SDL_SysWMEvent;
/**
* \brief General event structure
*/
typedef union SDL_Event
{
Uint32 type; /**< Event type, shared with all events */
Apr 21, 2013
Apr 21, 2013
498
SDL_CommonEvent common; /**< Common event data */
499
500
501
502
503
504
505
506
507
508
509
SDL_WindowEvent window; /**< Window event data */
SDL_KeyboardEvent key; /**< Keyboard event data */
SDL_TextEditingEvent edit; /**< Text editing event data */
SDL_TextInputEvent text; /**< Text input event data */
SDL_MouseMotionEvent motion; /**< Mouse motion event data */
SDL_MouseButtonEvent button; /**< Mouse button event data */
SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */
SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */
SDL_JoyBallEvent jball; /**< Joystick ball event data */
SDL_JoyHatEvent jhat; /**< Joystick hat event data */
SDL_JoyButtonEvent jbutton; /**< Joystick button event data */
Nov 27, 2012
Nov 27, 2012
510
SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */
May 18, 2013
May 18, 2013
511
512
513
SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */
SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */
SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */
514
515
516
517
SDL_QuitEvent quit; /**< Quit request event data */
SDL_UserEvent user; /**< Custom event data */
SDL_SysWMEvent syswm; /**< System dependent window event data */
SDL_TouchFingerEvent tfinger; /**< Touch finger event data */
Mar 3, 2013
Mar 3, 2013
518
519
SDL_MultiGestureEvent mgesture; /**< Gesture event data */
SDL_DollarGestureEvent dgesture; /**< Gesture event data */
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
SDL_DropEvent drop; /**< Drag and drop event data */
/* This is necessary for ABI compatibility between Visual C++ and GCC
Visual C++ will respect the push pack pragma and use 52 bytes for
this structure, and GCC will use the alignment of the largest datatype
within the union, which is 8 bytes.
So... we'll add padding to force the size to be 56 bytes for both.
*/
Uint8 padding[56];
} SDL_Event;
/* Function prototypes */
/**
* Pumps the event loop, gathering events from the input devices.
May 18, 2013
May 18, 2013
537
*
538
* This function updates the event queue and internal input device state.
May 18, 2013
May 18, 2013
539
*
540
541
542
543
544
545
546
547
548
549
550
551
552
553
* This should only be run in the thread that sets the video mode.
*/
extern DECLSPEC void SDLCALL SDL_PumpEvents(void);
/*@{*/
typedef enum
{
SDL_ADDEVENT,
SDL_PEEKEVENT,
SDL_GETEVENT
} SDL_eventaction;
/**
* Checks the event queue for messages and optionally returns them.
May 18, 2013
May 18, 2013
554
*
555
556
* If \c action is ::SDL_ADDEVENT, up to \c numevents events will be added to
* the back of the event queue.
May 18, 2013
May 18, 2013
557
*
558
559
560
* If \c action is ::SDL_PEEKEVENT, up to \c numevents events at the front
* of the event queue, within the specified minimum and maximum type,
* will be returned and will not be removed from the queue.
May 18, 2013
May 18, 2013
561
562
*
* If \c action is ::SDL_GETEVENT, up to \c numevents events at the front
563
564
* of the event queue, within the specified minimum and maximum type,
* will be returned and will be removed from the queue.
May 18, 2013
May 18, 2013
565
*
566
* \return The number of events actually stored, or -1 if there was an error.
May 18, 2013
May 18, 2013
567
*
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
* This function is thread-safe.
*/
extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents,
SDL_eventaction action,
Uint32 minType, Uint32 maxType);
/*@}*/
/**
* Checks to see if certain event types are in the event queue.
*/
extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type);
extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType);
/**
* This function clears events from the event queue
*/
extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type);
extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType);
/**
* \brief Polls for currently pending events.
May 18, 2013
May 18, 2013
589
*
590
* \return 1 if there are any pending events, or 0 if there are none available.
May 18, 2013
May 18, 2013
591
592
*
* \param event If not NULL, the next event is removed from the queue and
593
594
595
596
597
598
* stored in that area.
*/
extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event);
/**
* \brief Waits indefinitely for the next available event.
May 18, 2013
May 18, 2013
599
*
600
* \return 1, or 0 if there was an error while waiting for events.
May 18, 2013
May 18, 2013
601
602
*
* \param event If not NULL, the next event is removed from the queue and
603
604
605
606
607
* stored in that area.
*/
extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event);
/**
May 18, 2013
May 18, 2013
608
* \brief Waits until the specified timeout (in milliseconds) for the next
May 18, 2013
May 18, 2013
610
*
611
* \return 1, or 0 if there was an error while waiting for events.
May 18, 2013
May 18, 2013
612
613
*
* \param event If not NULL, the next event is removed from the queue and
614
* stored in that area.
May 18, 2013
May 18, 2013
615
* \param timeout The timeout (in milliseconds) to wait for next event.
616
617
618
619
620
621
*/
extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event,
int timeout);
/**
* \brief Add an event to the event queue.
May 18, 2013
May 18, 2013
622
623
*
* \return 1 on success, 0 if the event was filtered, or -1 if the event queue
624
625
626
627
628
629
630
631
632
* was full or there was some other error.
*/
extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event);
typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event);
/**
* Sets up a filter to process all events before they change internal state and
* are posted to the internal event queue.
May 18, 2013
May 18, 2013
633
*
Apr 27, 2013
Apr 27, 2013
634
* The filter is prototyped as:
635
636
637
638
639
* \code
* int SDL_EventFilter(void *userdata, SDL_Event * event);
* \endcode
*
* If the filter returns 1, then the event will be added to the internal queue.
May 18, 2013
May 18, 2013
640
* If it returns 0, then the event will be dropped from the queue, but the
641
642
* internal state will still be updated. This allows selective filtering of
* dynamically arriving events.
May 18, 2013
May 18, 2013
643
644
*
* \warning Be very careful of what you do in the event filter function, as
645
* it may run in a different thread!
May 18, 2013
May 18, 2013
646
*
Jun 5, 2013
Jun 5, 2013
647
* There is one caveat when dealing with the ::SDL_QuitEvent event type. The
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
* event filter is only called when the window manager desires to close the
* application window. If the event filter returns 1, then the window will
* be closed, otherwise the window will remain open if possible.
*
* If the quit event is generated by an interrupt signal, it will bypass the
* internal queue and be delivered to the application at the next event poll.
*/
extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter,
void *userdata);
/**
* Return the current event filter - can be used to "chain" filters.
* If there is no event filter set, this function returns SDL_FALSE.
*/
extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter,
void **userdata);
/**
* Add a function which is called when an event is added to the queue.
*/
extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter,
void *userdata);
/**
* Remove an event watch function added with SDL_AddEventWatch()
*/
extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter,
void *userdata);
/**
* Run the filter function on the current event queue, removing any
* events for which the filter returns 0.
*/
extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter,
void *userdata);
/*@{*/
May 18, 2013
May 18, 2013
685
686
687
688
#define SDL_QUERY -1
#define SDL_IGNORE 0
#define SDL_DISABLE 0
#define SDL_ENABLE 1
689
690
691
/**
* This function allows you to set the state of processing certain events.
May 18, 2013
May 18, 2013
692
* - If \c state is set to ::SDL_IGNORE, that event will be automatically
693
* dropped from the event queue and will not event be filtered.
May 18, 2013
May 18, 2013
694
* - If \c state is set to ::SDL_ENABLE, that event will be processed
May 18, 2013
May 18, 2013
696
* - If \c state is set to ::SDL_QUERY, SDL_EventState() will return the
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
* current processing state of the specified event.
*/
extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state);
/*@}*/
#define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY)
/**
* This function allocates a set of user-defined events, and returns
* the beginning event number for that set of events.
*
* If there aren't enough user-defined events left, this function
* returns (Uint32)-1
*/
extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents);
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif
#include "close_code.h"
#endif /* _SDL_events_h */
/* vi: set ts=4 sw=4 expandtab: */