include/SDL_events.h
changeset 1895 c121d94672cb
parent 1358 c71e05b4dc2e
child 1914 051df511279c
equal deleted inserted replaced
1894:c69cee13dd76 1895:c121d94672cb
    18 
    18 
    19     Sam Lantinga
    19     Sam Lantinga
    20     slouken@libsdl.org
    20     slouken@libsdl.org
    21 */
    21 */
    22 
    22 
    23 /* Include file for SDL event handling */
    23 /**
       
    24  * \file SDL_events.h
       
    25  *
       
    26  * Include file for SDL event handling
       
    27  */
    24 
    28 
    25 #ifndef _SDL_events_h
    29 #ifndef _SDL_events_h
    26 #define _SDL_events_h
    30 #define _SDL_events_h
    27 
    31 
    28 #include "SDL_stdinc.h"
    32 #include "SDL_stdinc.h"
    29 #include "SDL_error.h"
    33 #include "SDL_error.h"
    30 #include "SDL_active.h"
    34 #include "SDL_video.h"
    31 #include "SDL_keyboard.h"
    35 #include "SDL_keyboard.h"
    32 #include "SDL_mouse.h"
    36 #include "SDL_mouse.h"
    33 #include "SDL_joystick.h"
    37 #include "SDL_joystick.h"
    34 #include "SDL_quit.h"
    38 #include "SDL_quit.h"
    35 
    39 
    36 #include "begin_code.h"
    40 #include "begin_code.h"
    37 /* Set up for C function definitions, even when using C++ */
    41 /* Set up for C function definitions, even when using C++ */
    38 #ifdef __cplusplus
    42 #ifdef __cplusplus
       
    43 /* *INDENT-OFF* */
    39 extern "C" {
    44 extern "C" {
       
    45 /* *INDENT-ON* */
    40 #endif
    46 #endif
    41 
    47 
    42 /* General keyboard/mouse state definitions */
    48 /* General keyboard/mouse state definitions */
    43 #define SDL_RELEASED	0
    49 #define SDL_RELEASED	0
    44 #define SDL_PRESSED	1
    50 #define SDL_PRESSED	1
    45 
    51 
    46 /* Event enumerations */
    52 /**
    47 typedef enum {
    53  * \enum SDL_EventType
    48        SDL_NOEVENT = 0,			/* Unused (do not remove) */
    54  *
    49        SDL_ACTIVEEVENT,			/* Application loses/gains visibility */
    55  * \brief The types of events that can be delivered
    50        SDL_KEYDOWN,			/* Keys pressed */
    56  */
    51        SDL_KEYUP,			/* Keys released */
    57 typedef enum
    52        SDL_MOUSEMOTION,			/* Mouse moved */
    58 {
    53        SDL_MOUSEBUTTONDOWN,		/* Mouse button pressed */
    59     SDL_NOEVENT = 0,            /**< Unused (do not remove) */
    54        SDL_MOUSEBUTTONUP,		/* Mouse button released */
    60     SDL_WINDOWEVENT,            /**< Window state change */
    55        SDL_JOYAXISMOTION,		/* Joystick axis motion */
    61     SDL_KEYDOWN,                /**< Keys pressed */
    56        SDL_JOYBALLMOTION,		/* Joystick trackball motion */
    62     SDL_KEYUP,                  /**< Keys released */
    57        SDL_JOYHATMOTION,		/* Joystick hat position change */
    63     SDL_TEXTINPUT,                              /**< Keyboard text input */
    58        SDL_JOYBUTTONDOWN,		/* Joystick button pressed */
    64     SDL_MOUSEMOTION,            /**< Mouse moved */
    59        SDL_JOYBUTTONUP,			/* Joystick button released */
    65     SDL_MOUSEBUTTONDOWN,        /**< Mouse button pressed */
    60        SDL_QUIT,			/* User-requested quit */
    66     SDL_MOUSEBUTTONUP,          /**< Mouse button released */
    61        SDL_SYSWMEVENT,			/* System specific event */
    67     SDL_MOUSEWHEEL,                             /**< Mouse wheel motion */
    62        SDL_EVENT_RESERVEDA,		/* Reserved for future use.. */
    68     SDL_JOYAXISMOTION,          /**< Joystick axis motion */
    63        SDL_EVENT_RESERVEDB,		/* Reserved for future use.. */
    69     SDL_JOYBALLMOTION,          /**< Joystick trackball motion */
    64        SDL_VIDEORESIZE,			/* User resized video mode */
    70     SDL_JOYHATMOTION,           /**< Joystick hat position change */
    65        SDL_VIDEOEXPOSE,			/* Screen needs to be redrawn */
    71     SDL_JOYBUTTONDOWN,          /**< Joystick button pressed */
    66        SDL_EVENT_RESERVED2,		/* Reserved for future use.. */
    72     SDL_JOYBUTTONUP,            /**< Joystick button released */
    67        SDL_EVENT_RESERVED3,		/* Reserved for future use.. */
    73     SDL_QUIT,                   /**< User-requested quit */
    68        SDL_EVENT_RESERVED4,		/* Reserved for future use.. */
    74     SDL_SYSWMEVENT,             /**< System specific event */
    69        SDL_EVENT_RESERVED5,		/* Reserved for future use.. */
    75     SDL_EVENT_RESERVED1,        /**< Reserved for future use... */
    70        SDL_EVENT_RESERVED6,		/* Reserved for future use.. */
    76     SDL_EVENT_RESERVED2,        /**< Reserved for future use... */
    71        SDL_EVENT_RESERVED7,		/* Reserved for future use.. */
    77     SDL_EVENT_RESERVED3,        /**< Reserved for future use... */
    72        /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
    78     /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
    73        SDL_USEREVENT = 24,
    79     SDL_USEREVENT = 24,
    74        /* This last event is only for bounding internal arrays
    80     /* This last event is only for bounding internal arrays
    75 	  It is the number of bits in the event mask datatype -- Uint32
    81        It is the number of bits in the event mask datatype -- Uint32
    76         */
    82      */
    77        SDL_NUMEVENTS = 32
    83     SDL_NUMEVENTS = 32
    78 } SDL_EventType;
    84 } SDL_EventType;
    79 
    85 
    80 /* Predefined event masks */
    86 /**
       
    87  * \enum SDL_EventMask
       
    88  *
       
    89  * \brief Predefined event masks
       
    90  */
    81 #define SDL_EVENTMASK(X)	(1<<(X))
    91 #define SDL_EVENTMASK(X)	(1<<(X))
    82 typedef enum {
    92 typedef enum
    83 	SDL_ACTIVEEVENTMASK	= SDL_EVENTMASK(SDL_ACTIVEEVENT),
    93 {
    84 	SDL_KEYDOWNMASK		= SDL_EVENTMASK(SDL_KEYDOWN),
    94     SDL_WINDOWEVENTMASK = SDL_EVENTMASK(SDL_WINDOWEVENT),
    85 	SDL_KEYUPMASK		= SDL_EVENTMASK(SDL_KEYUP),
    95     SDL_KEYDOWNMASK = SDL_EVENTMASK(SDL_KEYDOWN),
    86 	SDL_KEYEVENTMASK	= SDL_EVENTMASK(SDL_KEYDOWN)|
    96     SDL_KEYUPMASK = SDL_EVENTMASK(SDL_KEYUP),
    87 	                          SDL_EVENTMASK(SDL_KEYUP),
    97     SDL_KEYEVENTMASK = SDL_EVENTMASK(SDL_KEYDOWN) | SDL_EVENTMASK(SDL_KEYUP),
    88 	SDL_MOUSEMOTIONMASK	= SDL_EVENTMASK(SDL_MOUSEMOTION),
    98     SDL_TEXTINPUTMASK = SDL_EVENTMASK(SDL_TEXTINPUT),
    89 	SDL_MOUSEBUTTONDOWNMASK	= SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN),
    99     SDL_MOUSEMOTIONMASK = SDL_EVENTMASK(SDL_MOUSEMOTION),
    90 	SDL_MOUSEBUTTONUPMASK	= SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
   100     SDL_MOUSEBUTTONDOWNMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN),
    91 	SDL_MOUSEEVENTMASK	= SDL_EVENTMASK(SDL_MOUSEMOTION)|
   101     SDL_MOUSEBUTTONUPMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
    92 	                          SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN)|
   102     SDL_MOUSEWHEELMASK = SDL_EVENTMASK(SDL_MOUSEWHEEL),
    93 	                          SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
   103     SDL_MOUSEEVENTMASK = SDL_EVENTMASK(SDL_MOUSEMOTION) |
    94 	SDL_JOYAXISMOTIONMASK	= SDL_EVENTMASK(SDL_JOYAXISMOTION),
   104         SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN) | SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
    95 	SDL_JOYBALLMOTIONMASK	= SDL_EVENTMASK(SDL_JOYBALLMOTION),
   105     SDL_JOYAXISMOTIONMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION),
    96 	SDL_JOYHATMOTIONMASK	= SDL_EVENTMASK(SDL_JOYHATMOTION),
   106     SDL_JOYBALLMOTIONMASK = SDL_EVENTMASK(SDL_JOYBALLMOTION),
    97 	SDL_JOYBUTTONDOWNMASK	= SDL_EVENTMASK(SDL_JOYBUTTONDOWN),
   107     SDL_JOYHATMOTIONMASK = SDL_EVENTMASK(SDL_JOYHATMOTION),
    98 	SDL_JOYBUTTONUPMASK	= SDL_EVENTMASK(SDL_JOYBUTTONUP),
   108     SDL_JOYBUTTONDOWNMASK = SDL_EVENTMASK(SDL_JOYBUTTONDOWN),
    99 	SDL_JOYEVENTMASK	= SDL_EVENTMASK(SDL_JOYAXISMOTION)|
   109     SDL_JOYBUTTONUPMASK = SDL_EVENTMASK(SDL_JOYBUTTONUP),
   100 	                          SDL_EVENTMASK(SDL_JOYBALLMOTION)|
   110     SDL_JOYEVENTMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION) |
   101 	                          SDL_EVENTMASK(SDL_JOYHATMOTION)|
   111         SDL_EVENTMASK(SDL_JOYBALLMOTION) |
   102 	                          SDL_EVENTMASK(SDL_JOYBUTTONDOWN)|
   112         SDL_EVENTMASK(SDL_JOYHATMOTION) |
   103 	                          SDL_EVENTMASK(SDL_JOYBUTTONUP),
   113         SDL_EVENTMASK(SDL_JOYBUTTONDOWN) | SDL_EVENTMASK(SDL_JOYBUTTONUP),
   104 	SDL_VIDEORESIZEMASK	= SDL_EVENTMASK(SDL_VIDEORESIZE),
   114     SDL_QUITMASK = SDL_EVENTMASK(SDL_QUIT),
   105 	SDL_VIDEOEXPOSEMASK	= SDL_EVENTMASK(SDL_VIDEOEXPOSE),
   115     SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT)
   106 	SDL_QUITMASK		= SDL_EVENTMASK(SDL_QUIT),
   116 } SDL_EventMask;
   107 	SDL_SYSWMEVENTMASK	= SDL_EVENTMASK(SDL_SYSWMEVENT)
       
   108 } SDL_EventMask ;
       
   109 #define SDL_ALLEVENTS		0xFFFFFFFF
   117 #define SDL_ALLEVENTS		0xFFFFFFFF
   110 
   118 
   111 /* Application visibility event structure */
   119 /**
   112 typedef struct SDL_ActiveEvent {
   120  * \struct SDL_WindowEvent
   113 	Uint8 type;	/* SDL_ACTIVEEVENT */
   121  *
   114 	Uint8 gain;	/* Whether given states were gained or lost (1/0) */
   122  * \brief Window state change event data
   115 	Uint8 state;	/* A mask of the focus states */
   123  */
   116 } SDL_ActiveEvent;
   124 typedef struct SDL_WindowEvent
   117 
   125 {
   118 /* Keyboard event structure */
   126     Uint8 type;             /**< SDL_WINDOWEVENT */
   119 typedef struct SDL_KeyboardEvent {
   127     Uint8 event;            /**< SDL_WindowEventID */
   120 	Uint8 type;	/* SDL_KEYDOWN or SDL_KEYUP */
   128     int data1;              /**< event dependent data */
   121 	Uint8 which;	/* The keyboard device index */
   129     int data2;              /**< event dependent data */
   122 	Uint8 state;	/* SDL_PRESSED or SDL_RELEASED */
   130     SDL_WindowID windowID;  /**< The associated window */
   123 	SDL_keysym keysym;
   131 } SDL_WindowEvent;
       
   132 
       
   133 /**
       
   134  * \struct SDL_KeyboardEvent
       
   135  *
       
   136  * \brief Keyboard button event structure
       
   137  */
       
   138 typedef struct SDL_KeyboardEvent
       
   139 {
       
   140     Uint8 type;             /**< SDL_KEYDOWN or SDL_KEYUP */
       
   141     Uint8 which;            /**< The keyboard device index */
       
   142     Uint8 state;            /**< SDL_PRESSED or SDL_RELEASED */
       
   143     SDL_keysym keysym;      /**< The key that was pressed or released */
       
   144     SDL_WindowID windowID;  /**< The window with keyboard focus, if any */
   124 } SDL_KeyboardEvent;
   145 } SDL_KeyboardEvent;
   125 
   146 
   126 /* Mouse motion event structure */
   147 /**
   127 typedef struct SDL_MouseMotionEvent {
   148  * \struct SDL_TextInputEvent
   128 	Uint8 type;	/* SDL_MOUSEMOTION */
   149  *
   129 	Uint8 which;	/* The mouse device index */
   150  * \brief Keyboard text input event structure
   130 	Uint8 state;	/* The current button state */
   151  */
   131 	Uint16 x, y;	/* The X/Y coordinates of the mouse */
   152 typedef struct SDL_TextInputEvent
   132 	Sint16 xrel;	/* The relative motion in the X direction */
   153 {
   133 	Sint16 yrel;	/* The relative motion in the Y direction */
   154     Uint8 type;             /**< SDL_TEXTINPUT */
       
   155     Uint8 which;            /**< The keyboard device index */
       
   156     char text[32];          /**< The input text */
       
   157     SDL_WindowID windowID;  /**< The window with keyboard focus, if any */
       
   158 } SDL_TextInputEvent;
       
   159 
       
   160 /**
       
   161  * \struct SDL_MouseMotionEvent
       
   162  *
       
   163  * \brief Mouse motion event structure
       
   164  */
       
   165 typedef struct SDL_MouseMotionEvent
       
   166 {
       
   167     Uint8 type;             /**< SDL_MOUSEMOTION */
       
   168     Uint8 which;            /**< The mouse device index */
       
   169     Uint8 state;            /**< The current button state */
       
   170     int x;                  /**< X coordinate, relative to window */
       
   171     int y;                  /**< Y coordinate, relative to window */
       
   172     int xrel;               /**< The relative motion in the X direction */
       
   173     int yrel;               /**< The relative motion in the Y direction */
       
   174     SDL_WindowID windowID;  /**< The window with mouse focus, if any */
   134 } SDL_MouseMotionEvent;
   175 } SDL_MouseMotionEvent;
   135 
   176 
   136 /* Mouse button event structure */
   177 /**
   137 typedef struct SDL_MouseButtonEvent {
   178  * \struct SDL_MouseButtonEvent
   138 	Uint8 type;	/* SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */
   179  *
   139 	Uint8 which;	/* The mouse device index */
   180  * \brief Mouse button event structure
   140 	Uint8 button;	/* The mouse button index */
   181  */
   141 	Uint8 state;	/* SDL_PRESSED or SDL_RELEASED */
   182 typedef struct SDL_MouseButtonEvent
   142 	Uint16 x, y;	/* The X/Y coordinates of the mouse at press time */
   183 {
       
   184     Uint8 type;             /**< SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */
       
   185     Uint8 which;            /**< The mouse device index */
       
   186     Uint8 button;           /**< The mouse button index */
       
   187     Uint8 state;            /**< SDL_PRESSED or SDL_RELEASED */
       
   188     int x;                  /**< X coordinate, relative to window */
       
   189     int y;                  /**< Y coordinate, relative to window */
       
   190     SDL_WindowID windowID;  /**< The window with mouse focus, if any */
   143 } SDL_MouseButtonEvent;
   191 } SDL_MouseButtonEvent;
   144 
   192 
   145 /* Joystick axis motion event structure */
   193 /**
   146 typedef struct SDL_JoyAxisEvent {
   194  * \struct SDL_MouseWheelEvent
   147 	Uint8 type;	/* SDL_JOYAXISMOTION */
   195  *
   148 	Uint8 which;	/* The joystick device index */
   196  * \brief Mouse wheel event structure
   149 	Uint8 axis;	/* The joystick axis index */
   197  */
   150 	Sint16 value;	/* The axis value (range: -32768 to 32767) */
   198 typedef struct SDL_MouseWheelEvent
       
   199 {
       
   200     Uint8 type;             /**< SDL_MOUSEWHEEL */
       
   201     Uint8 which;            /**< The mouse device index */
       
   202     int motion;                                 /**< The direction and distance scrolled */
       
   203     SDL_WindowID windowID;  /**< The window with mouse focus, if any */
       
   204 } SDL_MouseWheelEvent;
       
   205 
       
   206 /**
       
   207  * \struct SDL_JoyAxisEvent
       
   208  *
       
   209  * \brief Joystick axis motion event structure
       
   210  */
       
   211 typedef struct SDL_JoyAxisEvent
       
   212 {
       
   213     Uint8 type;         /**< SDL_JOYAXISMOTION */
       
   214     Uint8 which;        /**< The joystick device index */
       
   215     Uint8 axis;         /**< The joystick axis index */
       
   216     int value;          /**< The axis value (range: -32768 to 32767) */
   151 } SDL_JoyAxisEvent;
   217 } SDL_JoyAxisEvent;
   152 
   218 
   153 /* Joystick trackball motion event structure */
   219 /**
   154 typedef struct SDL_JoyBallEvent {
   220  * \struct SDL_JoyBallEvent
   155 	Uint8 type;	/* SDL_JOYBALLMOTION */
   221  *
   156 	Uint8 which;	/* The joystick device index */
   222  * \brief Joystick trackball motion event structure
   157 	Uint8 ball;	/* The joystick trackball index */
   223  */
   158 	Sint16 xrel;	/* The relative motion in the X direction */
   224 typedef struct SDL_JoyBallEvent
   159 	Sint16 yrel;	/* The relative motion in the Y direction */
   225 {
       
   226     Uint8 type;         /**< SDL_JOYBALLMOTION */
       
   227     Uint8 which;        /**< The joystick device index */
       
   228     Uint8 ball;         /**< The joystick trackball index */
       
   229     int xrel;           /**< The relative motion in the X direction */
       
   230     int yrel;           /**< The relative motion in the Y direction */
   160 } SDL_JoyBallEvent;
   231 } SDL_JoyBallEvent;
   161 
   232 
   162 /* Joystick hat position change event structure */
   233 /**
   163 typedef struct SDL_JoyHatEvent {
   234  * \struct SDL_JoyHatEvent
   164 	Uint8 type;	/* SDL_JOYHATMOTION */
   235  *
   165 	Uint8 which;	/* The joystick device index */
   236  * \brief Joystick hat position change event structure
   166 	Uint8 hat;	/* The joystick hat index */
   237  */
   167 	Uint8 value;	/* The hat position value:
   238 typedef struct SDL_JoyHatEvent
   168 			    SDL_HAT_LEFTUP   SDL_HAT_UP       SDL_HAT_RIGHTUP
   239 {
   169 			    SDL_HAT_LEFT     SDL_HAT_CENTERED SDL_HAT_RIGHT
   240     Uint8 type;         /**< SDL_JOYHATMOTION */
   170 			    SDL_HAT_LEFTDOWN SDL_HAT_DOWN     SDL_HAT_RIGHTDOWN
   241     Uint8 which;        /**< The joystick device index */
   171 			   Note that zero means the POV is centered.
   242     Uint8 hat;          /**< The joystick hat index */
   172 			*/
   243     Uint8 value;        /**< The hat position value:
       
   244                              SDL_HAT_LEFTUP   SDL_HAT_UP       SDL_HAT_RIGHTUP
       
   245                              SDL_HAT_LEFT     SDL_HAT_CENTERED SDL_HAT_RIGHT
       
   246                              SDL_HAT_LEFTDOWN SDL_HAT_DOWN     SDL_HAT_RIGHTDOWN
       
   247                              Note that zero means the POV is centered.
       
   248                          */
   173 } SDL_JoyHatEvent;
   249 } SDL_JoyHatEvent;
   174 
   250 
   175 /* Joystick button event structure */
   251 /**
   176 typedef struct SDL_JoyButtonEvent {
   252  * \struct SDL_JoyButtonEvent
   177 	Uint8 type;	/* SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */
   253  *
   178 	Uint8 which;	/* The joystick device index */
   254  * \brief Joystick button event structure
   179 	Uint8 button;	/* The joystick button index */
   255  */
   180 	Uint8 state;	/* SDL_PRESSED or SDL_RELEASED */
   256 typedef struct SDL_JoyButtonEvent
       
   257 {
       
   258     Uint8 type;         /**< SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */
       
   259     Uint8 which;        /**< The joystick device index */
       
   260     Uint8 button;       /**< The joystick button index */
       
   261     Uint8 state;        /**< SDL_PRESSED or SDL_RELEASED */
   181 } SDL_JoyButtonEvent;
   262 } SDL_JoyButtonEvent;
   182 
   263 
   183 /* The "window resized" event
   264 /**
   184    When you get this event, you are responsible for setting a new video
   265  * \struct SDL_QuitEvent
   185    mode with the new width and height.
   266  *
   186  */
   267  * \brief The "quit requested" event
   187 typedef struct SDL_ResizeEvent {
   268  */
   188 	Uint8 type;	/* SDL_VIDEORESIZE */
   269 typedef struct SDL_QuitEvent
   189 	int w;		/* New width */
   270 {
   190 	int h;		/* New height */
   271     Uint8 type;         /**< SDL_QUIT */
   191 } SDL_ResizeEvent;
       
   192 
       
   193 /* The "screen redraw" event */
       
   194 typedef struct SDL_ExposeEvent {
       
   195 	Uint8 type;	/* SDL_VIDEOEXPOSE */
       
   196 } SDL_ExposeEvent;
       
   197 
       
   198 /* The "quit requested" event */
       
   199 typedef struct SDL_QuitEvent {
       
   200 	Uint8 type;	/* SDL_QUIT */
       
   201 } SDL_QuitEvent;
   272 } SDL_QuitEvent;
   202 
   273 
   203 /* A user-defined event type */
   274 /**
   204 typedef struct SDL_UserEvent {
   275  * \struct SDL_UserEvent
   205 	Uint8 type;	/* SDL_USEREVENT through SDL_NUMEVENTS-1 */
   276  *
   206 	int code;	/* User defined event code */
   277  * \brief A user-defined event type
   207 	void *data1;	/* User defined data pointer */
   278  */
   208 	void *data2;	/* User defined data pointer */
   279 typedef struct SDL_UserEvent
       
   280 {
       
   281     Uint8 type;         /**< SDL_USEREVENT through SDL_NUMEVENTS-1 */
       
   282     int code;           /**< User defined event code */
       
   283     void *data1;        /**< User defined data pointer */
       
   284     void *data2;        /**< User defined data pointer */
   209 } SDL_UserEvent;
   285 } SDL_UserEvent;
   210 
   286 
   211 /* If you want to use this event, you should include SDL_syswm.h */
   287 /**
       
   288  * \struct SDL_SysWMEvent
       
   289  *
       
   290  * \brief A video driver dependent system event
       
   291  *
       
   292  * \note If you want to use this event, you should include SDL_syswm.h
       
   293  */
   212 struct SDL_SysWMmsg;
   294 struct SDL_SysWMmsg;
   213 typedef struct SDL_SysWMmsg SDL_SysWMmsg;
   295 typedef struct SDL_SysWMmsg SDL_SysWMmsg;
   214 typedef struct SDL_SysWMEvent {
   296 typedef struct SDL_SysWMEvent
   215 	Uint8 type;
   297 {
   216 	SDL_SysWMmsg *msg;
   298     Uint8 type;         /**< SDL_SYSWMEVENT */
       
   299     SDL_SysWMmsg *msg;  /**< driver dependent data, defined in SDL_syswm.h */
   217 } SDL_SysWMEvent;
   300 } SDL_SysWMEvent;
   218 
   301 
   219 /* General event structure */
   302 /* Typedefs for backwards compatibility */
   220 typedef union SDL_Event {
   303 typedef struct SDL_ActiveEvent
   221 	Uint8 type;
   304 {
   222 	SDL_ActiveEvent active;
   305     Uint8 type;
   223 	SDL_KeyboardEvent key;
   306     Uint8 gain;
   224 	SDL_MouseMotionEvent motion;
   307     Uint8 state;
   225 	SDL_MouseButtonEvent button;
   308 } SDL_ActiveEvent;
   226 	SDL_JoyAxisEvent jaxis;
   309 typedef struct SDL_ResizeEvent
   227 	SDL_JoyBallEvent jball;
   310 {
   228 	SDL_JoyHatEvent jhat;
   311     Uint8 type;
   229 	SDL_JoyButtonEvent jbutton;
   312     int w;
   230 	SDL_ResizeEvent resize;
   313     int h;
   231 	SDL_ExposeEvent expose;
   314 } SDL_ResizeEvent;
   232 	SDL_QuitEvent quit;
   315 
   233 	SDL_UserEvent user;
   316 /**
   234 	SDL_SysWMEvent syswm;
   317  * \union SDL_Event
       
   318  *
       
   319  * \brief General event structure
       
   320  */
       
   321 typedef union SDL_Event
       
   322 {
       
   323     Uint8 type;                     /**< Event type, shared with all events */
       
   324     SDL_WindowEvent window;         /**< Window event data */
       
   325     SDL_KeyboardEvent key;          /**< Keyboard event data */
       
   326     SDL_TextInputEvent text;                    /**< Text input event data */
       
   327     SDL_MouseMotionEvent motion;    /**< Mouse motion event data */
       
   328     SDL_MouseButtonEvent button;    /**< Mouse button event data */
       
   329     SDL_MouseWheelEvent wheel;                  /**< Mouse wheel event data */
       
   330     SDL_JoyAxisEvent jaxis;         /**< Joystick axis event data */
       
   331     SDL_JoyBallEvent jball;         /**< Joystick ball event data */
       
   332     SDL_JoyHatEvent jhat;           /**< Joystick hat event data */
       
   333     SDL_JoyButtonEvent jbutton;     /**< Joystick button event data */
       
   334     SDL_QuitEvent quit;             /**< Quit request event data */
       
   335     SDL_UserEvent user;             /**< Custom event data */
       
   336     SDL_SysWMEvent syswm;           /**< System dependent window event data */
       
   337 
       
   338     /* Temporarily here for backwards compatibility */
       
   339     SDL_ActiveEvent active;
       
   340     SDL_ResizeEvent resize;
   235 } SDL_Event;
   341 } SDL_Event;
   236 
   342 
   237 
   343 
   238 /* Function prototypes */
   344 /* Function prototypes */
   239 
   345 
   253    of the event queue, matching 'mask', will be returned and will be
   359    of the event queue, matching 'mask', will be returned and will be
   254    removed from the queue.
   360    removed from the queue.
   255    This function returns the number of events actually stored, or -1
   361    This function returns the number of events actually stored, or -1
   256    if there was an error.  This function is thread-safe.
   362    if there was an error.  This function is thread-safe.
   257 */
   363 */
   258 typedef enum {
   364 typedef enum
   259 	SDL_ADDEVENT,
   365 {
   260 	SDL_PEEKEVENT,
   366     SDL_ADDEVENT,
   261 	SDL_GETEVENT
   367     SDL_PEEKEVENT,
       
   368     SDL_GETEVENT
   262 } SDL_eventaction;
   369 } SDL_eventaction;
   263 /* */
   370 /* */
   264 extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event *events, int numevents,
   371 extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents,
   265 				SDL_eventaction action, Uint32 mask);
   372                                            SDL_eventaction action,
       
   373                                            Uint32 mask);
       
   374 
       
   375 /* Checks to see if certain event types are in the event queue.
       
   376  */
       
   377 extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 mask);
   266 
   378 
   267 /* Polls for currently pending events, and returns 1 if there are any pending
   379 /* 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
   380    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.
   381    event is removed from the queue and stored in that area.
   270  */
   382  */
   271 extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event *event);
   383 extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event);
   272 
   384 
   273 /* Waits indefinitely for the next available event, returning 1, or 0 if there
   385 /* 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
   386    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.
   387    event is removed from the queue and stored in that area.
   276  */
   388  */
   277 extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event *event);
   389 extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event);
   278 
   390 
   279 /* Add an event to the event queue.
   391 /* Add an event to the event queue.
   280    This function returns 0 on success, or -1 if the event queue was full
   392    This function returns 1 on success, 0 if the event was filtered,
   281    or there was some other error.
   393    or -1 if the event queue was full or there was some other error.
   282  */
   394  */
   283 extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event *event);
   395 extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event);
   284 
   396 
   285 /*
   397 /*
   286   This function sets up a filter to process all events before they
   398   This function sets up a filter to process all events before they
   287   change internal state and are posted to the internal event queue.
   399   change internal state and are posted to the internal event queue.
   288 
   400 
   289   The filter is protypted as:
   401   The filter is protypted as:
   290 */
   402 */
   291 typedef int (SDLCALL *SDL_EventFilter)(const SDL_Event *event);
   403 typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event);
   292 /*
   404 /*
   293   If the filter returns 1, then the event will be added to the internal queue.
   405   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 
   406   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
   407   internal state will still be updated.  This allows selective filtering of
   296   dynamically arriving events.
   408   dynamically arriving events.
   303   application window.  If the event filter returns 1, then the window will
   415   application window.  If the event filter returns 1, then the window will
   304   be closed, otherwise the window will remain open if possible.
   416   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
   417   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.
   418   internal queue and be delivered to the application at the next event poll.
   307 */
   419 */
   308 extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter);
   420 extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter,
       
   421                                                 void *userdata);
   309 
   422 
   310 /*
   423 /*
   311   Return the current event filter - can be used to "chain" filters.
   424   Return the current event filter - can be used to "chain" filters.
   312   If there is no event filter set, this function returns NULL.
   425   If there is no event filter set, this function returns SDL_FALSE.
   313 */
   426 */
   314 extern DECLSPEC SDL_EventFilter SDLCALL SDL_GetEventFilter(void);
   427 extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter,
       
   428                                                     void **userdata);
       
   429 
       
   430 /*
       
   431   Run the filter function on the current event queue, removing any
       
   432   events for which the filter returns 0.
       
   433 */
       
   434 extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter,
       
   435                                               void *userdata);
   315 
   436 
   316 /*
   437 /*
   317   This function allows you to set the state of processing certain events.
   438   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
   439   If 'state' is set to SDL_IGNORE, that event will be automatically dropped
   319   from the event queue and will not event be filtered.
   440   from the event queue and will not event be filtered.
   328 extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state);
   449 extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state);
   329 
   450 
   330 
   451 
   331 /* Ends C function definitions when using C++ */
   452 /* Ends C function definitions when using C++ */
   332 #ifdef __cplusplus
   453 #ifdef __cplusplus
       
   454 /* *INDENT-OFF* */
   333 }
   455 }
       
   456 /* *INDENT-ON* */
   334 #endif
   457 #endif
   335 #include "close_code.h"
   458 #include "close_code.h"
   336 
   459 
   337 #endif /* _SDL_events_h */
   460 #endif /* _SDL_events_h */
       
   461 
       
   462 /* vi: set ts=4 sw=4 expandtab: */