include/SDL_events.h
author Sam Lantinga <slouken@libsdl.org>
Wed, 10 Jun 2009 14:00:21 +0000
changeset 3191 91b335df6fc8
parent 3167 0c85abc61e47
child 3280 00cace2d9080
permissions -rw-r--r--
Fixed bug #750
Since many different event structures include windowID it should be placed near
the beginning of the structure (preferably right after type) so it's position
is the same between different events.

This is to avoid code like this:
if (event.type == SDL_WINDOWEVENT)
win = event.window.windowID;
else if ((SDL_EVENTMASK(event.type) & SDL_KEYEVENTMASK) != 0)
win = event.key.windowID;
else if (event.type == SDL_TEXTINPUT)
win = event.text.windowID;
else if (event.type == SDL_MOUSEMOTION)
win = event.motion.windowID;
else if ((SDL_EVENTMASK(event.type) & (SDL_MOUBUTTONDOWNMASK |
SDL_MOUBUTTONUPMASK)) != 0)
win = event.button.windowID;
else if (event.type == SDL_MOUSEWHEEL)
win = event.wheel.windowID;
...

in favor of:
win = event.window.windowID;
slouken@0
     1
/*
slouken@0
     2
    SDL - Simple DirectMedia Layer
slouken@2859
     3
    Copyright (C) 1997-2009 Sam Lantinga
slouken@0
     4
slouken@0
     5
    This library is free software; you can redistribute it and/or
slouken@1312
     6
    modify it under the terms of the GNU Lesser General Public
slouken@0
     7
    License as published by the Free Software Foundation; either
slouken@1312
     8
    version 2.1 of the License, or (at your option) any later version.
slouken@0
     9
slouken@0
    10
    This library is distributed in the hope that it will be useful,
slouken@0
    11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
slouken@0
    12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
slouken@1312
    13
    Lesser General Public License for more details.
slouken@0
    14
slouken@1312
    15
    You should have received a copy of the GNU Lesser General Public
slouken@1312
    16
    License along with this library; if not, write to the Free Software
slouken@1312
    17
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
slouken@0
    18
slouken@0
    19
    Sam Lantinga
slouken@251
    20
    slouken@libsdl.org
slouken@0
    21
*/
slouken@0
    22
slouken@1895
    23
/**
slouken@1895
    24
 * \file SDL_events.h
slouken@1895
    25
 *
slouken@1895
    26
 * Include file for SDL event handling
slouken@1895
    27
 */
slouken@0
    28
slouken@0
    29
#ifndef _SDL_events_h
slouken@0
    30
#define _SDL_events_h
slouken@0
    31
slouken@1356
    32
#include "SDL_stdinc.h"
slouken@1358
    33
#include "SDL_error.h"
slouken@1895
    34
#include "SDL_video.h"
slouken@0
    35
#include "SDL_keyboard.h"
slouken@0
    36
#include "SDL_mouse.h"
slouken@0
    37
#include "SDL_joystick.h"
slouken@0
    38
#include "SDL_quit.h"
slouken@0
    39
slouken@0
    40
#include "begin_code.h"
slouken@0
    41
/* Set up for C function definitions, even when using C++ */
slouken@0
    42
#ifdef __cplusplus
slouken@1895
    43
/* *INDENT-OFF* */
slouken@0
    44
extern "C" {
slouken@1895
    45
/* *INDENT-ON* */
slouken@0
    46
#endif
slouken@0
    47
slouken@1330
    48
/* General keyboard/mouse state definitions */
slouken@1330
    49
#define SDL_RELEASED	0
slouken@1330
    50
#define SDL_PRESSED	1
slouken@1330
    51
slouken@1895
    52
/**
slouken@1895
    53
 * \enum SDL_EventType
slouken@1895
    54
 *
slouken@1895
    55
 * \brief The types of events that can be delivered
slouken@1895
    56
 */
slouken@1895
    57
typedef enum
slouken@1895
    58
{
slouken@1895
    59
    SDL_NOEVENT = 0,            /**< Unused (do not remove) */
slouken@1895
    60
    SDL_WINDOWEVENT,            /**< Window state change */
slouken@1895
    61
    SDL_KEYDOWN,                /**< Keys pressed */
slouken@1895
    62
    SDL_KEYUP,                  /**< Keys released */
slouken@1957
    63
    SDL_TEXTINPUT,              /**< Keyboard text input */
slouken@1895
    64
    SDL_MOUSEMOTION,            /**< Mouse moved */
slouken@1895
    65
    SDL_MOUSEBUTTONDOWN,        /**< Mouse button pressed */
slouken@1895
    66
    SDL_MOUSEBUTTONUP,          /**< Mouse button released */
slouken@1957
    67
    SDL_MOUSEWHEEL,             /**< Mouse wheel motion */
slouken@1895
    68
    SDL_JOYAXISMOTION,          /**< Joystick axis motion */
slouken@1895
    69
    SDL_JOYBALLMOTION,          /**< Joystick trackball motion */
slouken@1895
    70
    SDL_JOYHATMOTION,           /**< Joystick hat position change */
slouken@1895
    71
    SDL_JOYBUTTONDOWN,          /**< Joystick button pressed */
slouken@1895
    72
    SDL_JOYBUTTONUP,            /**< Joystick button released */
slouken@1895
    73
    SDL_QUIT,                   /**< User-requested quit */
slouken@1895
    74
    SDL_SYSWMEVENT,             /**< System specific event */
slouken@2710
    75
    SDL_PROXIMITYIN,            /**< Proximity In event */
slouken@2710
    76
    SDL_PROXIMITYOUT,           /**< Proximity Out event */
slouken@1895
    77
    SDL_EVENT_RESERVED1,        /**< Reserved for future use... */
slouken@2710
    78
    SDL_EVENT_RESERVED2,
slouken@2710
    79
    SDL_EVENT_RESERVED3,
slouken@1895
    80
    /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
slouken@1895
    81
    SDL_USEREVENT = 24,
slouken@1895
    82
    /* This last event is only for bounding internal arrays
slouken@1895
    83
       It is the number of bits in the event mask datatype -- Uint32
slouken@1895
    84
     */
slouken@1895
    85
    SDL_NUMEVENTS = 32
slouken@1294
    86
} SDL_EventType;
slouken@0
    87
slouken@1895
    88
/**
slouken@1895
    89
 * \enum SDL_EventMask
slouken@1895
    90
 *
slouken@1895
    91
 * \brief Predefined event masks
slouken@1895
    92
 */
slouken@0
    93
#define SDL_EVENTMASK(X)	(1<<(X))
slouken@1895
    94
typedef enum
slouken@1895
    95
{
slouken@1895
    96
    SDL_WINDOWEVENTMASK = SDL_EVENTMASK(SDL_WINDOWEVENT),
slouken@1895
    97
    SDL_KEYDOWNMASK = SDL_EVENTMASK(SDL_KEYDOWN),
slouken@1895
    98
    SDL_KEYUPMASK = SDL_EVENTMASK(SDL_KEYUP),
slouken@1895
    99
    SDL_KEYEVENTMASK = SDL_EVENTMASK(SDL_KEYDOWN) | SDL_EVENTMASK(SDL_KEYUP),
slouken@1895
   100
    SDL_TEXTINPUTMASK = SDL_EVENTMASK(SDL_TEXTINPUT),
slouken@1895
   101
    SDL_MOUSEMOTIONMASK = SDL_EVENTMASK(SDL_MOUSEMOTION),
slouken@1895
   102
    SDL_MOUSEBUTTONDOWNMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN),
slouken@1895
   103
    SDL_MOUSEBUTTONUPMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
slouken@1895
   104
    SDL_MOUSEWHEELMASK = SDL_EVENTMASK(SDL_MOUSEWHEEL),
slouken@1895
   105
    SDL_MOUSEEVENTMASK = SDL_EVENTMASK(SDL_MOUSEMOTION) |
slouken@1895
   106
        SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN) | SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
slouken@1895
   107
    SDL_JOYAXISMOTIONMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION),
slouken@1895
   108
    SDL_JOYBALLMOTIONMASK = SDL_EVENTMASK(SDL_JOYBALLMOTION),
slouken@1895
   109
    SDL_JOYHATMOTIONMASK = SDL_EVENTMASK(SDL_JOYHATMOTION),
slouken@1895
   110
    SDL_JOYBUTTONDOWNMASK = SDL_EVENTMASK(SDL_JOYBUTTONDOWN),
slouken@1895
   111
    SDL_JOYBUTTONUPMASK = SDL_EVENTMASK(SDL_JOYBUTTONUP),
slouken@1895
   112
    SDL_JOYEVENTMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION) |
slouken@1895
   113
        SDL_EVENTMASK(SDL_JOYBALLMOTION) |
slouken@1895
   114
        SDL_EVENTMASK(SDL_JOYHATMOTION) |
slouken@1895
   115
        SDL_EVENTMASK(SDL_JOYBUTTONDOWN) | SDL_EVENTMASK(SDL_JOYBUTTONUP),
slouken@1895
   116
    SDL_QUITMASK = SDL_EVENTMASK(SDL_QUIT),
slouken@2710
   117
    SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT),
slouken@2710
   118
    SDL_PROXIMITYINMASK = SDL_EVENTMASK(SDL_PROXIMITYIN),
slouken@2710
   119
    SDL_PROXIMITYOUTMASK = SDL_EVENTMASK(SDL_PROXIMITYOUT)
slouken@1895
   120
} SDL_EventMask;
slouken@0
   121
#define SDL_ALLEVENTS		0xFFFFFFFF
slouken@0
   122
slouken@1895
   123
/**
slouken@1895
   124
 * \struct SDL_WindowEvent
slouken@1895
   125
 *
slouken@1914
   126
 * \brief Window state change event data (event.window.*)
slouken@1895
   127
 */
slouken@1895
   128
typedef struct SDL_WindowEvent
slouken@1895
   129
{
slouken@1895
   130
    Uint8 type;             /**< SDL_WINDOWEVENT */
slouken@3191
   131
    SDL_WindowID windowID;  /**< The associated window */
slouken@1895
   132
    Uint8 event;            /**< SDL_WindowEventID */
slouken@1895
   133
    int data1;              /**< event dependent data */
slouken@1895
   134
    int data2;              /**< event dependent data */
slouken@1895
   135
} SDL_WindowEvent;
slouken@0
   136
slouken@1895
   137
/**
slouken@1895
   138
 * \struct SDL_KeyboardEvent
slouken@1895
   139
 *
slouken@1914
   140
 * \brief Keyboard button event structure (event.key.*)
slouken@1895
   141
 */
slouken@1895
   142
typedef struct SDL_KeyboardEvent
slouken@1895
   143
{
slouken@1895
   144
    Uint8 type;             /**< SDL_KEYDOWN or SDL_KEYUP */
slouken@3191
   145
    SDL_WindowID windowID;  /**< The window with keyboard focus, if any */
slouken@1895
   146
    Uint8 which;            /**< The keyboard device index */
slouken@1895
   147
    Uint8 state;            /**< SDL_PRESSED or SDL_RELEASED */
slouken@1895
   148
    SDL_keysym keysym;      /**< The key that was pressed or released */
slouken@0
   149
} SDL_KeyboardEvent;
slouken@0
   150
slouken@1895
   151
/**
slouken@1895
   152
 * \struct SDL_TextInputEvent
slouken@1895
   153
 *
slouken@1914
   154
 * \brief Keyboard text input event structure (event.text.*)
slouken@1895
   155
 */
bob@2300
   156
#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32)
slouken@1895
   157
typedef struct SDL_TextInputEvent
slouken@1895
   158
{
bob@2300
   159
    Uint8 type;                               /**< SDL_TEXTINPUT */
slouken@3191
   160
    SDL_WindowID windowID;                    /**< The window with keyboard focus, if any */
bob@2300
   161
    Uint8 which;                              /**< The keyboard device index */
bob@2300
   162
    char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];  /**< The input text */
slouken@1895
   163
} SDL_TextInputEvent;
slouken@1895
   164
slouken@1895
   165
/**
slouken@1895
   166
 * \struct SDL_MouseMotionEvent
slouken@1895
   167
 *
slouken@1914
   168
 * \brief Mouse motion event structure (event.motion.*)
slouken@1895
   169
 */
slouken@1895
   170
typedef struct SDL_MouseMotionEvent
slouken@1895
   171
{
slouken@1895
   172
    Uint8 type;             /**< SDL_MOUSEMOTION */
slouken@3191
   173
    SDL_WindowID windowID;  /**< The window with mouse focus, if any */
slouken@1895
   174
    Uint8 which;            /**< The mouse device index */
slouken@1895
   175
    Uint8 state;            /**< The current button state */
slouken@1895
   176
    int x;                  /**< X coordinate, relative to window */
slouken@1895
   177
    int y;                  /**< Y coordinate, relative to window */
slouken@2710
   178
    int z;                  /**< Z coordinate, for future use */
slouken@2710
   179
    int pressure;           /**< Pressure reported by tablets */
slouken@2710
   180
    int pressure_max;       /**< Maximum value of the pressure reported by the device */
slouken@2710
   181
    int pressure_min;       /**< Minimum value of the pressure reported by the device */
slouken@2710
   182
    int rotation;           /**< For future use */
slouken@2710
   183
    int tilt;               /**< For future use */
slouken@2710
   184
    int cursor;             /**< The cursor being used in the event */
slouken@1895
   185
    int xrel;               /**< The relative motion in the X direction */
slouken@1895
   186
    int yrel;               /**< The relative motion in the Y direction */
slouken@0
   187
} SDL_MouseMotionEvent;
slouken@0
   188
slouken@1895
   189
/**
slouken@1895
   190
 * \struct SDL_MouseButtonEvent
slouken@1895
   191
 *
slouken@1914
   192
 * \brief Mouse button event structure (event.button.*)
slouken@1895
   193
 */
slouken@1895
   194
typedef struct SDL_MouseButtonEvent
slouken@1895
   195
{
slouken@1895
   196
    Uint8 type;             /**< SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */
slouken@3191
   197
    SDL_WindowID windowID;  /**< The window with mouse focus, if any */
slouken@1895
   198
    Uint8 which;            /**< The mouse device index */
slouken@1895
   199
    Uint8 button;           /**< The mouse button index */
slouken@1895
   200
    Uint8 state;            /**< SDL_PRESSED or SDL_RELEASED */
slouken@1895
   201
    int x;                  /**< X coordinate, relative to window */
slouken@1895
   202
    int y;                  /**< Y coordinate, relative to window */
slouken@0
   203
} SDL_MouseButtonEvent;
slouken@0
   204
slouken@1895
   205
/**
slouken@1895
   206
 * \struct SDL_MouseWheelEvent
slouken@1895
   207
 *
slouken@1914
   208
 * \brief Mouse wheel event structure (event.wheel.*)
slouken@1895
   209
 */
slouken@1895
   210
typedef struct SDL_MouseWheelEvent
slouken@1895
   211
{
slouken@1895
   212
    Uint8 type;             /**< SDL_MOUSEWHEEL */
slouken@3191
   213
    SDL_WindowID windowID;  /**< The window with mouse focus, if any */
slouken@1895
   214
    Uint8 which;            /**< The mouse device index */
slouken@2152
   215
    int x;                  /**< The amount scrolled horizontally */
slouken@2152
   216
    int y;                  /**< The amount scrolled vertically */
slouken@1895
   217
} SDL_MouseWheelEvent;
slouken@1895
   218
slouken@1895
   219
/**
slouken@1895
   220
 * \struct SDL_JoyAxisEvent
slouken@1895
   221
 *
slouken@1914
   222
 * \brief Joystick axis motion event structure (event.jaxis.*)
slouken@1895
   223
 */
slouken@1895
   224
typedef struct SDL_JoyAxisEvent
slouken@1895
   225
{
slouken@1895
   226
    Uint8 type;         /**< SDL_JOYAXISMOTION */
slouken@1895
   227
    Uint8 which;        /**< The joystick device index */
slouken@1895
   228
    Uint8 axis;         /**< The joystick axis index */
slouken@1895
   229
    int value;          /**< The axis value (range: -32768 to 32767) */
slouken@0
   230
} SDL_JoyAxisEvent;
slouken@0
   231
slouken@1895
   232
/**
slouken@1895
   233
 * \struct SDL_JoyBallEvent
slouken@1895
   234
 *
slouken@1914
   235
 * \brief Joystick trackball motion event structure (event.jball.*)
slouken@1895
   236
 */
slouken@1895
   237
typedef struct SDL_JoyBallEvent
slouken@1895
   238
{
slouken@1895
   239
    Uint8 type;         /**< SDL_JOYBALLMOTION */
slouken@1895
   240
    Uint8 which;        /**< The joystick device index */
slouken@1895
   241
    Uint8 ball;         /**< The joystick trackball index */
slouken@1895
   242
    int xrel;           /**< The relative motion in the X direction */
slouken@1895
   243
    int yrel;           /**< The relative motion in the Y direction */
slouken@0
   244
} SDL_JoyBallEvent;
slouken@0
   245
slouken@1895
   246
/**
slouken@1895
   247
 * \struct SDL_JoyHatEvent
slouken@1895
   248
 *
slouken@1914
   249
 * \brief Joystick hat position change event structure (event.jhat.*)
slouken@1895
   250
 */
slouken@1895
   251
typedef struct SDL_JoyHatEvent
slouken@1895
   252
{
slouken@1895
   253
    Uint8 type;         /**< SDL_JOYHATMOTION */
slouken@1895
   254
    Uint8 which;        /**< The joystick device index */
slouken@1895
   255
    Uint8 hat;          /**< The joystick hat index */
slouken@1895
   256
    Uint8 value;        /**< The hat position value:
slouken@1895
   257
                             SDL_HAT_LEFTUP   SDL_HAT_UP       SDL_HAT_RIGHTUP
slouken@1895
   258
                             SDL_HAT_LEFT     SDL_HAT_CENTERED SDL_HAT_RIGHT
slouken@1895
   259
                             SDL_HAT_LEFTDOWN SDL_HAT_DOWN     SDL_HAT_RIGHTDOWN
slouken@1895
   260
                             Note that zero means the POV is centered.
slouken@1895
   261
                         */
slouken@0
   262
} SDL_JoyHatEvent;
slouken@0
   263
slouken@1895
   264
/**
slouken@1895
   265
 * \struct SDL_JoyButtonEvent
slouken@1895
   266
 *
slouken@1914
   267
 * \brief Joystick button event structure (event.jbutton.*)
slouken@1895
   268
 */
slouken@1895
   269
typedef struct SDL_JoyButtonEvent
slouken@1895
   270
{
slouken@1895
   271
    Uint8 type;         /**< SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */
slouken@1895
   272
    Uint8 which;        /**< The joystick device index */
slouken@1895
   273
    Uint8 button;       /**< The joystick button index */
slouken@1895
   274
    Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
slouken@0
   275
} SDL_JoyButtonEvent;
slouken@0
   276
slouken@1895
   277
/**
slouken@1895
   278
 * \struct SDL_QuitEvent
slouken@1895
   279
 *
slouken@1895
   280
 * \brief The "quit requested" event
slouken@0
   281
 */
slouken@1895
   282
typedef struct SDL_QuitEvent
slouken@1895
   283
{
slouken@1895
   284
    Uint8 type;         /**< SDL_QUIT */
slouken@1895
   285
} SDL_QuitEvent;
slouken@1895
   286
slouken@1895
   287
/**
slouken@1895
   288
 * \struct SDL_UserEvent
slouken@1895
   289
 *
slouken@1914
   290
 * \brief A user-defined event type (event.user.*)
slouken@1895
   291
 */
slouken@1895
   292
typedef struct SDL_UserEvent
slouken@1895
   293
{
bob@2131
   294
    Uint8 type;             /**< SDL_USEREVENT through SDL_NUMEVENTS-1 */
slouken@3191
   295
    SDL_WindowID windowID;  /**< The associated window if any*/
bob@2131
   296
    int code;               /**< User defined event code */
bob@2131
   297
    void *data1;            /**< User defined data pointer */
bob@2131
   298
    void *data2;            /**< User defined data pointer */
slouken@1895
   299
} SDL_UserEvent;
slouken@1895
   300
slouken@1895
   301
/**
slouken@1895
   302
 * \struct SDL_SysWMEvent
slouken@1895
   303
 *
slouken@1914
   304
 * \brief A video driver dependent system event (event.syswm.*)
slouken@1895
   305
 *
slouken@1895
   306
 * \note If you want to use this event, you should include SDL_syswm.h
slouken@1895
   307
 */
slouken@1895
   308
struct SDL_SysWMmsg;
slouken@1895
   309
typedef struct SDL_SysWMmsg SDL_SysWMmsg;
slouken@1895
   310
typedef struct SDL_SysWMEvent
slouken@1895
   311
{
slouken@1895
   312
    Uint8 type;         /**< SDL_SYSWMEVENT */
slouken@1895
   313
    SDL_SysWMmsg *msg;  /**< driver dependent data, defined in SDL_syswm.h */
slouken@1895
   314
} SDL_SysWMEvent;
slouken@1895
   315
slouken@2710
   316
typedef struct SDL_ProximityEvent
slouken@2710
   317
{
slouken@2710
   318
    Uint8 type;
slouken@3191
   319
    SDL_WindowID windowID;  /**< The associated window */
slouken@2710
   320
    Uint8 which;
slouken@2710
   321
    int cursor;
slouken@2710
   322
    int x;
slouken@2710
   323
    int y;
slouken@2710
   324
} SDL_ProximityEvent;
slouken@2710
   325
bob@3167
   326
/* Typedefs for backwards compatibility */
bob@3167
   327
#ifndef SDL_NO_COMPAT
bob@3167
   328
typedef struct SDL_ActiveEvent
bob@3167
   329
{
bob@3167
   330
    Uint8 type;
bob@3167
   331
    Uint8 gain;
bob@3167
   332
    Uint8 state;
bob@3167
   333
} SDL_ActiveEvent;
bob@3167
   334
bob@3167
   335
typedef struct SDL_ResizeEvent
bob@3167
   336
{
bob@3167
   337
    Uint8 type;
bob@3167
   338
    int w;
bob@3167
   339
    int h;
bob@3167
   340
} SDL_ResizeEvent;
bob@3167
   341
#endif
bob@3167
   342
slouken@1895
   343
/**
slouken@1895
   344
 * \union SDL_Event
slouken@1895
   345
 *
slouken@1895
   346
 * \brief General event structure
slouken@1895
   347
 */
slouken@1895
   348
typedef union SDL_Event
slouken@1895
   349
{
slouken@1895
   350
    Uint8 type;                     /**< Event type, shared with all events */
slouken@1895
   351
    SDL_WindowEvent window;         /**< Window event data */
slouken@1895
   352
    SDL_KeyboardEvent key;          /**< Keyboard event data */
bob@2300
   353
    SDL_TextInputEvent text;        /**< Text input event data */
slouken@1895
   354
    SDL_MouseMotionEvent motion;    /**< Mouse motion event data */
slouken@1895
   355
    SDL_MouseButtonEvent button;    /**< Mouse button event data */
bob@2300
   356
    SDL_MouseWheelEvent wheel;      /**< Mouse wheel event data */
slouken@1895
   357
    SDL_JoyAxisEvent jaxis;         /**< Joystick axis event data */
slouken@1895
   358
    SDL_JoyBallEvent jball;         /**< Joystick ball event data */
slouken@1895
   359
    SDL_JoyHatEvent jhat;           /**< Joystick hat event data */
slouken@1895
   360
    SDL_JoyButtonEvent jbutton;     /**< Joystick button event data */
slouken@1895
   361
    SDL_QuitEvent quit;             /**< Quit request event data */
slouken@1895
   362
    SDL_UserEvent user;             /**< Custom event data */
slouken@1895
   363
    SDL_SysWMEvent syswm;           /**< System dependent window event data */
slouken@2710
   364
    SDL_ProximityEvent proximity;   /**< Proximity In or Out event */
slouken@0
   365
slouken@1895
   366
    /* Temporarily here for backwards compatibility */
bob@3167
   367
#ifndef SDL_NO_COMPAT
slouken@1895
   368
    SDL_ActiveEvent active;
slouken@1895
   369
    SDL_ResizeEvent resize;
bob@3167
   370
#endif
slouken@0
   371
} SDL_Event;
slouken@0
   372
slouken@0
   373
slouken@0
   374
/* Function prototypes */
slouken@0
   375
slouken@0
   376
/* Pumps the event loop, gathering events from the input devices.
slouken@0
   377
   This function updates the event queue and internal input device state.
slouken@0
   378
   This should only be run in the thread that sets the video mode.
slouken@0
   379
*/
slouken@337
   380
extern DECLSPEC void SDLCALL SDL_PumpEvents(void);
slouken@0
   381
slouken@0
   382
/* Checks the event queue for messages and optionally returns them.
slouken@0
   383
   If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to
slouken@0
   384
   the back of the event queue.
slouken@0
   385
   If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front
slouken@0
   386
   of the event queue, matching 'mask', will be returned and will not
slouken@0
   387
   be removed from the queue.
slouken@0
   388
   If 'action' is SDL_GETEVENT, up to 'numevents' events at the front 
slouken@0
   389
   of the event queue, matching 'mask', will be returned and will be
slouken@0
   390
   removed from the queue.
slouken@0
   391
   This function returns the number of events actually stored, or -1
slouken@0
   392
   if there was an error.  This function is thread-safe.
slouken@0
   393
*/
slouken@1895
   394
typedef enum
slouken@1895
   395
{
slouken@1895
   396
    SDL_ADDEVENT,
slouken@1895
   397
    SDL_PEEKEVENT,
slouken@1895
   398
    SDL_GETEVENT
slouken@0
   399
} SDL_eventaction;
slouken@0
   400
/* */
slouken@1895
   401
extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents,
slouken@1895
   402
                                           SDL_eventaction action,
slouken@1895
   403
                                           Uint32 mask);
slouken@1895
   404
slouken@1895
   405
/* Checks to see if certain event types are in the event queue.
slouken@1895
   406
 */
slouken@1895
   407
extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 mask);
slouken@0
   408
slouken@0
   409
/* Polls for currently pending events, and returns 1 if there are any pending
slouken@0
   410
   events, or 0 if there are none available.  If 'event' is not NULL, the next
slouken@0
   411
   event is removed from the queue and stored in that area.
slouken@0
   412
 */
slouken@1895
   413
extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event);
slouken@0
   414
slouken@0
   415
/* Waits indefinitely for the next available event, returning 1, or 0 if there
slouken@0
   416
   was an error while waiting for events.  If 'event' is not NULL, the next
slouken@0
   417
   event is removed from the queue and stored in that area.
slouken@0
   418
 */
slouken@1895
   419
extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event);
slouken@0
   420
slouken@3072
   421
/* Waits until the specified timeout (in milliseconds) for the next available
slouken@3072
   422
   event, returning 1, or 0 if there was an error while waiting for events. If
slouken@3072
   423
   'event' is not NULL, the next event is removed from the queue and stored in
slouken@3072
   424
   that area.
slouken@3072
   425
 */
slouken@3072
   426
extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event,
slouken@3072
   427
                                                 int timeout);
slouken@3072
   428
slouken@0
   429
/* Add an event to the event queue.
slouken@1895
   430
   This function returns 1 on success, 0 if the event was filtered,
slouken@1895
   431
   or -1 if the event queue was full or there was some other error.
slouken@0
   432
 */
slouken@1895
   433
extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event);
slouken@0
   434
slouken@0
   435
/*
slouken@0
   436
  This function sets up a filter to process all events before they
slouken@0
   437
  change internal state and are posted to the internal event queue.
slouken@0
   438
slouken@0
   439
  The filter is protypted as:
slouken@0
   440
*/
slouken@1895
   441
typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event);
slouken@0
   442
/*
slouken@0
   443
  If the filter returns 1, then the event will be added to the internal queue.
slouken@0
   444
  If it returns 0, then the event will be dropped from the queue, but the 
slouken@0
   445
  internal state will still be updated.  This allows selective filtering of
slouken@0
   446
  dynamically arriving events.
slouken@0
   447
slouken@0
   448
  WARNING:  Be very careful of what you do in the event filter function, as 
slouken@0
   449
            it may run in a different thread!
slouken@0
   450
slouken@0
   451
  There is one caveat when dealing with the SDL_QUITEVENT event type.  The
slouken@0
   452
  event filter is only called when the window manager desires to close the
slouken@0
   453
  application window.  If the event filter returns 1, then the window will
slouken@0
   454
  be closed, otherwise the window will remain open if possible.
slouken@0
   455
  If the quit event is generated by an interrupt signal, it will bypass the
slouken@0
   456
  internal queue and be delivered to the application at the next event poll.
slouken@0
   457
*/
slouken@1895
   458
extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter,
slouken@1895
   459
                                                void *userdata);
slouken@0
   460
slouken@0
   461
/*
slouken@0
   462
  Return the current event filter - can be used to "chain" filters.
slouken@1895
   463
  If there is no event filter set, this function returns SDL_FALSE.
slouken@0
   464
*/
slouken@1895
   465
extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter,
slouken@1895
   466
                                                    void **userdata);
slouken@1895
   467
slouken@1895
   468
/*
slouken@1895
   469
  Run the filter function on the current event queue, removing any
slouken@1895
   470
  events for which the filter returns 0.
slouken@1895
   471
*/
slouken@1895
   472
extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter,
slouken@1895
   473
                                              void *userdata);
slouken@0
   474
slouken@0
   475
/*
slouken@0
   476
  This function allows you to set the state of processing certain events.
slouken@0
   477
  If 'state' is set to SDL_IGNORE, that event will be automatically dropped
slouken@0
   478
  from the event queue and will not event be filtered.
slouken@0
   479
  If 'state' is set to SDL_ENABLE, that event will be processed normally.
slouken@0
   480
  If 'state' is set to SDL_QUERY, SDL_EventState() will return the 
slouken@0
   481
  current processing state of the specified event.
slouken@0
   482
*/
slouken@0
   483
#define SDL_QUERY	-1
slouken@0
   484
#define SDL_IGNORE	 0
slouken@0
   485
#define SDL_DISABLE	 0
slouken@0
   486
#define SDL_ENABLE	 1
slouken@337
   487
extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state);
slouken@0
   488
slouken@0
   489
slouken@0
   490
/* Ends C function definitions when using C++ */
slouken@0
   491
#ifdef __cplusplus
slouken@1895
   492
/* *INDENT-OFF* */
slouken@0
   493
}
slouken@1895
   494
/* *INDENT-ON* */
slouken@0
   495
#endif
slouken@0
   496
#include "close_code.h"
slouken@0
   497
slouken@0
   498
#endif /* _SDL_events_h */
slouken@1895
   499
slouken@1895
   500
/* vi: set ts=4 sw=4 expandtab: */