Pressure levels. Documentation http://wilku.ravenlord.ws/doku.php?id=documentation
2 SDL - Simple DirectMedia Layer
3 Copyright (C) 1997-2006 Sam Lantinga
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
26 * Include file for SDL event handling
32 #include "SDL_stdinc.h"
33 #include "SDL_error.h"
34 #include "SDL_video.h"
35 #include "SDL_keyboard.h"
36 #include "SDL_mouse.h"
37 #include "SDL_joystick.h"
40 #include "begin_code.h"
41 /* Set up for C function definitions, even when using C++ */
48 /* General keyboard/mouse state definitions */
49 #define SDL_RELEASED 0
55 * \brief The types of events that can be delivered
59 SDL_NOEVENT = 0, /**< Unused (do not remove) */
60 SDL_WINDOWEVENT, /**< Window state change */
61 SDL_KEYDOWN, /**< Keys pressed */
62 SDL_KEYUP, /**< Keys released */
63 SDL_TEXTINPUT, /**< Keyboard text input */
64 SDL_MOUSEMOTION, /**< Mouse moved */
65 SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */
66 SDL_MOUSEBUTTONUP, /**< Mouse button released */
67 SDL_MOUSEWHEEL, /**< Mouse wheel motion */
68 SDL_JOYAXISMOTION, /**< Joystick axis motion */
69 SDL_JOYBALLMOTION, /**< Joystick trackball motion */
70 SDL_JOYHATMOTION, /**< Joystick hat position change */
71 SDL_JOYBUTTONDOWN, /**< Joystick button pressed */
72 SDL_JOYBUTTONUP, /**< Joystick button released */
73 SDL_QUIT, /**< User-requested quit */
74 SDL_SYSWMEVENT, /**< System specific event */
75 SDL_PROXIMITYIN, /**< Proximity In event */
76 SDL_PROXIMITYOUT, /**< Proximity Out event */
77 SDL_EVENT_RESERVED1, /**< Reserved for future use... */
80 /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
82 /* This last event is only for bounding internal arrays
83 It is the number of bits in the event mask datatype -- Uint32
91 * \brief Predefined event masks
93 #define SDL_EVENTMASK(X) (1<<(X))
96 SDL_WINDOWEVENTMASK = SDL_EVENTMASK(SDL_WINDOWEVENT),
97 SDL_KEYDOWNMASK = SDL_EVENTMASK(SDL_KEYDOWN),
98 SDL_KEYUPMASK = SDL_EVENTMASK(SDL_KEYUP),
99 SDL_KEYEVENTMASK = SDL_EVENTMASK(SDL_KEYDOWN) | SDL_EVENTMASK(SDL_KEYUP),
100 SDL_TEXTINPUTMASK = SDL_EVENTMASK(SDL_TEXTINPUT),
101 SDL_MOUSEMOTIONMASK = SDL_EVENTMASK(SDL_MOUSEMOTION),
102 SDL_MOUSEBUTTONDOWNMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN),
103 SDL_MOUSEBUTTONUPMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
104 SDL_MOUSEWHEELMASK = SDL_EVENTMASK(SDL_MOUSEWHEEL),
105 SDL_MOUSEEVENTMASK = SDL_EVENTMASK(SDL_MOUSEMOTION) |
106 SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN) | SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
107 SDL_JOYAXISMOTIONMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION),
108 SDL_JOYBALLMOTIONMASK = SDL_EVENTMASK(SDL_JOYBALLMOTION),
109 SDL_JOYHATMOTIONMASK = SDL_EVENTMASK(SDL_JOYHATMOTION),
110 SDL_JOYBUTTONDOWNMASK = SDL_EVENTMASK(SDL_JOYBUTTONDOWN),
111 SDL_JOYBUTTONUPMASK = SDL_EVENTMASK(SDL_JOYBUTTONUP),
112 SDL_JOYEVENTMASK = SDL_EVENTMASK(SDL_JOYAXISMOTION) |
113 SDL_EVENTMASK(SDL_JOYBALLMOTION) |
114 SDL_EVENTMASK(SDL_JOYHATMOTION) |
115 SDL_EVENTMASK(SDL_JOYBUTTONDOWN) | SDL_EVENTMASK(SDL_JOYBUTTONUP),
116 SDL_QUITMASK = SDL_EVENTMASK(SDL_QUIT),
117 SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT),
118 SDL_PROXIMITYINMASK = SDL_EVENTMASK(SDL_PROXIMITYIN),
119 SDL_PROXIMITYOUTMASK = SDL_EVENTMASK(SDL_PROXIMITYOUT)
121 #define SDL_ALLEVENTS 0xFFFFFFFF
124 * \struct SDL_WindowEvent
126 * \brief Window state change event data (event.window.*)
128 typedef struct SDL_WindowEvent
130 Uint8 type; /**< SDL_WINDOWEVENT */
131 Uint8 event; /**< SDL_WindowEventID */
132 int data1; /**< event dependent data */
133 int data2; /**< event dependent data */
134 SDL_WindowID windowID; /**< The associated window */
138 * \struct SDL_KeyboardEvent
140 * \brief Keyboard button event structure (event.key.*)
142 typedef struct SDL_KeyboardEvent
144 Uint8 type; /**< SDL_KEYDOWN or SDL_KEYUP */
145 Uint8 which; /**< The keyboard device index */
146 Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */
147 SDL_keysym keysym; /**< The key that was pressed or released */
148 SDL_WindowID windowID; /**< The window with keyboard focus, if any */
152 * \struct SDL_TextInputEvent
154 * \brief Keyboard text input event structure (event.text.*)
156 #define SDL_TEXTINPUTEVENT_TEXT_SIZE (32)
157 typedef struct SDL_TextInputEvent
159 Uint8 type; /**< SDL_TEXTINPUT */
160 Uint8 which; /**< The keyboard device index */
161 char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */
162 SDL_WindowID windowID; /**< The window with keyboard focus, if any */
163 } SDL_TextInputEvent;
166 * \struct SDL_MouseMotionEvent
168 * \brief Mouse motion event structure (event.motion.*)
170 typedef struct SDL_MouseMotionEvent
172 Uint8 type; /**< SDL_MOUSEMOTION */
173 Uint8 which; /**< The mouse device index */
174 Uint8 state; /**< The current button state */
175 int x; /**< X coordinate, relative to window */
176 int y; /**< Y coordinate, relative to window */
177 int z; /**< Z coordinate, for future use*/
178 int pressure; /**< Pressure reported by tablets */
179 int pressure_max; /**< Maximum value of the pressure reported by the device*/
180 int pressure_min; /**< Minimum value of the pressure reported by the device*/
181 int rotation; /**<For future use */
182 int tilt; /**<For future use */
183 int xrel; /**< The relative motion in the X direction */
184 int yrel; /**< The relative motion in the Y direction */
185 SDL_WindowID windowID; /**< The window with mouse focus, if any */
186 } SDL_MouseMotionEvent;
189 * \struct SDL_MouseButtonEvent
191 * \brief Mouse button event structure (event.button.*)
193 typedef struct SDL_MouseButtonEvent
195 Uint8 type; /**< SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */
196 Uint8 which; /**< The mouse device index */
197 Uint8 button; /**< The mouse button index */
198 Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */
199 int x; /**< X coordinate, relative to window */
200 int y; /**< Y coordinate, relative to window */
201 SDL_WindowID windowID; /**< The window with mouse focus, if any */
202 } SDL_MouseButtonEvent;
205 * \struct SDL_MouseWheelEvent
207 * \brief Mouse wheel event structure (event.wheel.*)
209 typedef struct SDL_MouseWheelEvent
211 Uint8 type; /**< SDL_MOUSEWHEEL */
212 Uint8 which; /**< The mouse device index */
213 int x; /**< The amount scrolled horizontally */
214 int y; /**< The amount scrolled vertically */
215 SDL_WindowID windowID; /**< The window with mouse focus, if any */
216 } SDL_MouseWheelEvent;
219 * \struct SDL_JoyAxisEvent
221 * \brief Joystick axis motion event structure (event.jaxis.*)
223 typedef struct SDL_JoyAxisEvent
225 Uint8 type; /**< SDL_JOYAXISMOTION */
226 Uint8 which; /**< The joystick device index */
227 Uint8 axis; /**< The joystick axis index */
228 int value; /**< The axis value (range: -32768 to 32767) */
232 * \struct SDL_JoyBallEvent
234 * \brief Joystick trackball motion event structure (event.jball.*)
236 typedef struct SDL_JoyBallEvent
238 Uint8 type; /**< SDL_JOYBALLMOTION */
239 Uint8 which; /**< The joystick device index */
240 Uint8 ball; /**< The joystick trackball index */
241 int xrel; /**< The relative motion in the X direction */
242 int yrel; /**< The relative motion in the Y direction */
246 * \struct SDL_JoyHatEvent
248 * \brief Joystick hat position change event structure (event.jhat.*)
250 typedef struct SDL_JoyHatEvent
252 Uint8 type; /**< SDL_JOYHATMOTION */
253 Uint8 which; /**< The joystick device index */
254 Uint8 hat; /**< The joystick hat index */
255 Uint8 value; /**< The hat position value:
256 SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP
257 SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT
258 SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN
259 Note that zero means the POV is centered.
264 * \struct SDL_JoyButtonEvent
266 * \brief Joystick button event structure (event.jbutton.*)
268 typedef struct SDL_JoyButtonEvent
270 Uint8 type; /**< SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */
271 Uint8 which; /**< The joystick device index */
272 Uint8 button; /**< The joystick button index */
273 Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */
274 } SDL_JoyButtonEvent;
277 * \struct SDL_QuitEvent
279 * \brief The "quit requested" event
281 typedef struct SDL_QuitEvent
283 Uint8 type; /**< SDL_QUIT */
287 * \struct SDL_UserEvent
289 * \brief A user-defined event type (event.user.*)
291 typedef struct SDL_UserEvent
293 Uint8 type; /**< SDL_USEREVENT through SDL_NUMEVENTS-1 */
294 int code; /**< User defined event code */
295 void *data1; /**< User defined data pointer */
296 void *data2; /**< User defined data pointer */
297 SDL_WindowID windowID; /**< The associated window if any*/
301 * \struct SDL_SysWMEvent
303 * \brief A video driver dependent system event (event.syswm.*)
305 * \note If you want to use this event, you should include SDL_syswm.h
308 typedef struct SDL_SysWMmsg SDL_SysWMmsg;
309 typedef struct SDL_SysWMEvent
311 Uint8 type; /**< SDL_SYSWMEVENT */
312 SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */
315 /* Typedefs for backwards compatibility */
316 typedef struct SDL_ActiveEvent
322 typedef struct SDL_ResizeEvent
329 typedef struct SDL_ProximityEvent
335 } SDL_ProximityEvent;
340 * \brief General event structure
342 typedef union SDL_Event
344 Uint8 type; /**< Event type, shared with all events */
345 SDL_WindowEvent window; /**< Window event data */
346 SDL_KeyboardEvent key; /**< Keyboard event data */
347 SDL_TextInputEvent text; /**< Text input event data */
348 SDL_MouseMotionEvent motion; /**< Mouse motion event data */
349 SDL_MouseButtonEvent button; /**< Mouse button event data */
350 SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */
351 SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */
352 SDL_JoyBallEvent jball; /**< Joystick ball event data */
353 SDL_JoyHatEvent jhat; /**< Joystick hat event data */
354 SDL_JoyButtonEvent jbutton; /**< Joystick button event data */
355 SDL_QuitEvent quit; /**< Quit request event data */
356 SDL_UserEvent user; /**< Custom event data */
357 SDL_SysWMEvent syswm; /**< System dependent window event data */
358 SDL_ProximityEvent proximity; /**< Proximity In or Out event */
359 /* Temporarily here for backwards compatibility */
360 SDL_ActiveEvent active;
361 SDL_ResizeEvent resize;
365 /* Function prototypes */
367 /* Pumps the event loop, gathering events from the input devices.
368 This function updates the event queue and internal input device state.
369 This should only be run in the thread that sets the video mode.
371 extern DECLSPEC void SDLCALL SDL_PumpEvents(void);
373 /* Checks the event queue for messages and optionally returns them.
374 If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to
375 the back of the event queue.
376 If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front
377 of the event queue, matching 'mask', will be returned and will not
378 be removed from the queue.
379 If 'action' is SDL_GETEVENT, up to 'numevents' events at the front
380 of the event queue, matching 'mask', will be returned and will be
381 removed from the queue.
382 This function returns the number of events actually stored, or -1
383 if there was an error. This function is thread-safe.
392 extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents,
393 SDL_eventaction action,
396 /* Checks to see if certain event types are in the event queue.
398 extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 mask);
400 /* Polls for currently pending events, and returns 1 if there are any pending
401 events, or 0 if there are none available. If 'event' is not NULL, the next
402 event is removed from the queue and stored in that area.
404 extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event);
406 /* Waits indefinitely for the next available event, returning 1, or 0 if there
407 was an error while waiting for events. If 'event' is not NULL, the next
408 event is removed from the queue and stored in that area.
410 extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event);
412 /* Add an event to the event queue.
413 This function returns 1 on success, 0 if the event was filtered,
414 or -1 if the event queue was full or there was some other error.
416 extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event);
419 This function sets up a filter to process all events before they
420 change internal state and are posted to the internal event queue.
422 The filter is protypted as:
424 typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event);
426 If the filter returns 1, then the event will be added to the internal queue.
427 If it returns 0, then the event will be dropped from the queue, but the
428 internal state will still be updated. This allows selective filtering of
429 dynamically arriving events.
431 WARNING: Be very careful of what you do in the event filter function, as
432 it may run in a different thread!
434 There is one caveat when dealing with the SDL_QUITEVENT event type. The
435 event filter is only called when the window manager desires to close the
436 application window. If the event filter returns 1, then the window will
437 be closed, otherwise the window will remain open if possible.
438 If the quit event is generated by an interrupt signal, it will bypass the
439 internal queue and be delivered to the application at the next event poll.
441 extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter,
445 Return the current event filter - can be used to "chain" filters.
446 If there is no event filter set, this function returns SDL_FALSE.
448 extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter,
452 Run the filter function on the current event queue, removing any
453 events for which the filter returns 0.
455 extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter,
459 This function allows you to set the state of processing certain events.
460 If 'state' is set to SDL_IGNORE, that event will be automatically dropped
461 from the event queue and will not event be filtered.
462 If 'state' is set to SDL_ENABLE, that event will be processed normally.
463 If 'state' is set to SDL_QUERY, SDL_EventState() will return the
464 current processing state of the specified event.
468 #define SDL_DISABLE 0
470 extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state);
473 /* Ends C function definitions when using C++ */
479 #include "close_code.h"
481 #endif /* _SDL_events_h */
483 /* vi: set ts=4 sw=4 expandtab: */