2015-01-26 22:00:29 +01:00
/*
Simple DirectMedia Layer
Copyright ( C ) 1997 - 2014 Sam Lantinga < slouken @ libsdl . org >
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
*
* 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"
# include "SDL_gamecontroller.h"
# 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 */
# define SDL_RELEASED 0
# define SDL_PRESSED 1
/**
* \ 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 */
/* These application events have special meaning on iOS, see README-ios.md for details */
SDL_APP_TERMINATING , /**< The application is being terminated by the OS
Called on iOS in applicationWillTerminate ( )
Called on Android in onDestroy ( )
*/
SDL_APP_LOWMEMORY , /**< The application is low on memory, free memory if possible.
Called on iOS in applicationDidReceiveMemoryWarning ( )
Called on Android in onLowMemory ( )
*/
SDL_APP_WILLENTERBACKGROUND , /**< The application is about to enter the background
Called on iOS in applicationWillResignActive ( )
Called on Android in onPause ( )
*/
SDL_APP_DIDENTERBACKGROUND , /**< The application did enter the background and may not get CPU for some time
Called on iOS in applicationDidEnterBackground ( )
Called on Android in onPause ( )
*/
SDL_APP_WILLENTERFOREGROUND , /**< The application is about to enter the foreground
Called on iOS in applicationWillEnterForeground ( )
Called on Android in onResume ( )
*/
SDL_APP_DIDENTERFOREGROUND , /**< The application is now interactive
Called on iOS in applicationDidBecomeActive ( )
Called on Android in onResume ( )
*/
/* 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 */
SDL_JOYDEVICEADDED , /**< A new joystick has been inserted into the system */
SDL_JOYDEVICEREMOVED , /**< An opened joystick has been removed */
/* 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 */
/* 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 */
2015-03-21 08:01:43 +01:00
/* Audio hotplug events */
SDL_AUDIODEVICEADDED = 0x1100 , /**< A new audio device is available */
SDL_AUDIODEVICEREMOVED , /**< An audio device has been removed. */
2015-01-26 22:00:29 +01:00
/* Render events */
SDL_RENDER_TARGETS_RESET = 0x2000 , /**< The render targets have been reset and their contents need to be updated */
SDL_RENDER_DEVICE_RESET , /**< The device has been reset and all textures need to be recreated */
/** 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 ;
/**
* \ brief Fields shared by every event
*/
typedef struct SDL_CommonEvent
{
Uint32 type ;
Uint32 timestamp ;
} SDL_CommonEvent ;
/**
* \ 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 ;
Sint32 data1 ; /**< event dependent data */
Sint32 data2 ; /**< event dependent data */
} 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 */
Sint32 start ; /**< The start cursor of selected editing text */
Sint32 length ; /**< The length of selected editing text */
} 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 */
Uint32 which ; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
Uint32 state ; /**< The current button state */
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 */
} 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 */
Uint32 which ; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
Uint8 button ; /**< The mouse button index */
Uint8 state ; /**< ::SDL_PRESSED or ::SDL_RELEASED */
Uint8 clicks ; /**< 1 for single-click, 2 for double-click, etc. */
Uint8 padding1 ;
Sint32 x ; /**< X coordinate, relative to window */
Sint32 y ; /**< Y coordinate, relative to window */
} 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 */
Uint32 which ; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
Sint32 x ; /**< The amount scrolled horizontally, positive to the right and negative to the left */
Sint32 y ; /**< The amount scrolled vertically, positive away from the user and negative toward the user */
Uint32 direction ; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */
} SDL_MouseWheelEvent ;
/**
* \ brief Joystick axis motion event structure ( event . jaxis . * )
*/
typedef struct SDL_JoyAxisEvent
{
Uint32 type ; /**< ::SDL_JOYAXISMOTION */
Uint32 timestamp ;
SDL_JoystickID which ; /**< The joystick instance id */
Uint8 axis ; /**< The joystick axis index */
Uint8 padding1 ;
Uint8 padding2 ;
Uint8 padding3 ;
Sint16 value ; /**< The axis value (range: -32768 to 32767) */
Uint16 padding4 ;
} SDL_JoyAxisEvent ;
/**
* \ brief Joystick trackball motion event structure ( event . jball . * )
*/
typedef struct SDL_JoyBallEvent
{
Uint32 type ; /**< ::SDL_JOYBALLMOTION */
Uint32 timestamp ;
SDL_JoystickID which ; /**< The joystick instance id */
Uint8 ball ; /**< The joystick trackball index */
Uint8 padding1 ;
Uint8 padding2 ;
Uint8 padding3 ;
Sint16 xrel ; /**< The relative motion in the X direction */
Sint16 yrel ; /**< The relative motion in the Y direction */
} SDL_JoyBallEvent ;
/**
* \ brief Joystick hat position change event structure ( event . jhat . * )
*/
typedef struct SDL_JoyHatEvent
{
Uint32 type ; /**< ::SDL_JOYHATMOTION */
Uint32 timestamp ;
SDL_JoystickID which ; /**< The joystick instance id */
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
*
* Note that zero means the POV is centered .
*/
Uint8 padding1 ;
Uint8 padding2 ;
} SDL_JoyHatEvent ;
/**
* \ brief Joystick button event structure ( event . jbutton . * )
*/
typedef struct SDL_JoyButtonEvent
{
Uint32 type ; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */
Uint32 timestamp ;
SDL_JoystickID which ; /**< The joystick instance id */
Uint8 button ; /**< The joystick button index */
Uint8 state ; /**< ::SDL_PRESSED or ::SDL_RELEASED */
Uint8 padding1 ;
Uint8 padding2 ;
} SDL_JoyButtonEvent ;
/**
* \ brief Joystick device event structure ( event . jdevice . * )
*/
typedef struct SDL_JoyDeviceEvent
{
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 */
} SDL_JoyDeviceEvent ;
/**
* \ brief Game controller axis motion event structure ( event . caxis . * )
*/
typedef struct SDL_ControllerAxisEvent
{
Uint32 type ; /**< ::SDL_CONTROLLERAXISMOTION */
Uint32 timestamp ;
SDL_JoystickID which ; /**< The joystick instance id */
Uint8 axis ; /**< The controller axis (SDL_GameControllerAxis) */
Uint8 padding1 ;
Uint8 padding2 ;
Uint8 padding3 ;
Sint16 value ; /**< The axis value (range: -32768 to 32767) */
Uint16 padding4 ;
} SDL_ControllerAxisEvent ;
/**
* \ brief Game controller button event structure ( event . cbutton . * )
*/
typedef struct SDL_ControllerButtonEvent
{
Uint32 type ; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */
Uint32 timestamp ;
SDL_JoystickID which ; /**< The joystick instance id */
Uint8 button ; /**< The controller button (SDL_GameControllerButton) */
Uint8 state ; /**< ::SDL_PRESSED or ::SDL_RELEASED */
Uint8 padding1 ;
Uint8 padding2 ;
} SDL_ControllerButtonEvent ;
/**
* \ brief Controller device event structure ( event . cdevice . * )
*/
typedef struct SDL_ControllerDeviceEvent
{
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 */
} SDL_ControllerDeviceEvent ;
2015-03-16 07:11:39 +01:00
/**
* \ brief Audio device event structure ( event . adevice . * )
*/
typedef struct SDL_AudioDeviceEvent
{
Uint32 type ; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */
Uint32 timestamp ;
Uint32 which ; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */
Uint8 iscapture ; /**< zero if an output device, non-zero if a capture device. */
Uint8 padding1 ;
Uint8 padding2 ;
Uint8 padding3 ;
} SDL_AudioDeviceEvent ;
2015-01-26 22:00:29 +01:00
/**
* \ brief Touch finger event structure ( event . tfinger . * )
*/
typedef struct SDL_TouchFingerEvent
{
Uint32 type ; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */
Uint32 timestamp ;
SDL_TouchID touchId ; /**< The touch device id */
SDL_FingerID fingerId ;
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 */
} SDL_TouchFingerEvent ;
/**
* \ brief Multiple Finger Gesture Event ( event . mgesture . * )
*/
typedef struct SDL_MultiGestureEvent
{
Uint32 type ; /**< ::SDL_MULTIGESTURE */
Uint32 timestamp ;
SDL_TouchID touchId ; /**< The touch device index */
float dTheta ;
float dDist ;
float x ;
float y ;
Uint16 numFingers ;
Uint16 padding ;
} SDL_MultiGestureEvent ;
/**
* \ brief Dollar Gesture Event ( event . dgesture . * )
*/
typedef struct SDL_DollarGestureEvent
{
2015-03-21 22:42:53 +01:00
Uint32 type ; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */
2015-01-26 22:00:29 +01:00
Uint32 timestamp ;
SDL_TouchID touchId ; /**< The touch device id */
SDL_GestureID gestureId ;
Uint32 numFingers ;
float error ;
float x ; /**< Normalized center of gesture */
float y ; /**< Normalized center of gesture */
} 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 ;
/**
* \ brief OS Specific event
*/
typedef struct SDL_OSEvent
{
Uint32 type ; /**< ::SDL_QUIT */
Uint32 timestamp ;
} SDL_OSEvent ;
/**
* \ brief A user - defined event type ( event . user . * )
*/
typedef struct SDL_UserEvent
{
Uint32 type ; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */
Uint32 timestamp ;
Uint32 windowID ; /**< The associated window if any */
Sint32 code ; /**< User defined event code */
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 */
SDL_CommonEvent common ; /**< Common event data */
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 */
SDL_JoyDeviceEvent jdevice ; /**< Joystick device change event data */
SDL_ControllerAxisEvent caxis ; /**< Game Controller axis event data */
SDL_ControllerButtonEvent cbutton ; /**< Game Controller button event data */
SDL_ControllerDeviceEvent cdevice ; /**< Game Controller device event data */
2015-03-16 07:11:39 +01:00
SDL_AudioDeviceEvent adevice ; /**< Audio device event data */
2015-01-26 22:00:29 +01:00
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 */
SDL_MultiGestureEvent mgesture ; /**< Gesture event data */
SDL_DollarGestureEvent dgesture ; /**< Gesture event data */
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 .
*
* This function updates the event queue and internal input device state .
*
* 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 .
*
* If \ c action is : : SDL_ADDEVENT , up to \ c numevents events will be added to
* the back of the event queue .
*
* 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 .
*
* If \ c action is : : SDL_GETEVENT , up to \ c numevents events at the front
* of the event queue , within the specified minimum and maximum type ,
* will be returned and will be removed from the queue .
*
* \ return The number of events actually stored , or - 1 if there was an error .
*
* 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
* This function only affects currently queued events . If you want to make
* sure that all pending OS events are flushed , you can call SDL_PumpEvents ( )
* on the main thread immediately before the flush call .
*/
extern DECLSPEC void SDLCALL SDL_FlushEvent ( Uint32 type ) ;
extern DECLSPEC void SDLCALL SDL_FlushEvents ( Uint32 minType , Uint32 maxType ) ;
/**
* \ brief Polls for currently pending events .
*
* \ return 1 if there are any pending events , or 0 if there are none available .
*
* \ param event If not NULL , the next event is removed from the queue and
* stored in that area .
*/
extern DECLSPEC int SDLCALL SDL_PollEvent ( SDL_Event * event ) ;
/**
* \ brief Waits indefinitely for the next available event .
*
* \ return 1 , or 0 if there was an error while waiting for events .
*
* \ param event If not NULL , the next event is removed from the queue and
* stored in that area .
*/
extern DECLSPEC int SDLCALL SDL_WaitEvent ( SDL_Event * event ) ;
/**
* \ brief Waits until the specified timeout ( in milliseconds ) for the next
* available event .
*
* \ return 1 , or 0 if there was an error while waiting for events .
*
* \ param event If not NULL , the next event is removed from the queue and
* stored in that area .
* \ param timeout The timeout ( in milliseconds ) to wait for next event .
*/
extern DECLSPEC int SDLCALL SDL_WaitEventTimeout ( SDL_Event * event ,
int timeout ) ;
/**
* \ brief Add an event to the event queue .
*
* \ return 1 on success , 0 if the event was filtered , or - 1 if the event queue
* 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 .
*
* The filter is prototyped as :
* \ 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 .
* If it returns 0 , then the event will be dropped from the queue , but the
* internal state will still be updated . This allows selective filtering of
* dynamically arriving events .
*
* \ warning Be very careful of what you do in the event filter function , as
* it may run in a different thread !
*
* There is one caveat when dealing with the : : SDL_QuitEvent event type . The
* 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 ) ;
/* @{ */
# define SDL_QUERY -1
# define SDL_IGNORE 0
# define SDL_DISABLE 0
# define SDL_ENABLE 1
/**
* This function allows you to set the state of processing certain events .
* - If \ c state is set to : : SDL_IGNORE , that event will be automatically
* dropped from the event queue and will not event be filtered .
* - If \ c state is set to : : SDL_ENABLE , that event will be processed
* normally .
* - If \ c state is set to : : SDL_QUERY , SDL_EventState ( ) will return the
* 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: */