SDL_Event — General event structure
typedef | union { | |||
Uint8 |
type ; |
|||
SDL_ActiveEvent |
active ; |
|||
SDL_KeyboardEvent |
key ; |
|||
SDL_MouseMotionEvent |
motion ; |
|||
SDL_MouseButtonEvent |
button ; |
|||
SDL_JoyAxisEvent |
jaxis ; |
|||
SDL_JoyBallEvent |
jball ; |
|||
SDL_JoyHatEvent |
jhat ; |
|||
SDL_JoyButtonEvent |
jbutton ; |
|||
SDL_ResizeEvent |
resize ; |
|||
SDL_ExposeEvent |
expose ; |
|||
SDL_QuitEvent |
quit ; |
|||
SDL_UserEvent |
user ; |
|||
SDL_SysWMEvent |
syswm ; |
|||
} SDL_Event; |
type
The type of event
active
Activation event
key
Keyboard event
motion
Mouse motion event
button
Mouse button event
jaxis
Joystick axis motion event
jball
Joystick trackball motion event
jhat
Joystick hat motion event
jbutton
Joystick button event
resize
Application window resize event
expose
Application window expose event
quit
Application quit request event
user
User defined event
syswm
Undefined window manager event
The SDL_Event union is the
core to all event handling is SDL, its probably the most
important structure after SDL_Surface. SDL_Event is a union of all event
structures used in SDL, using it is a simple matter of
knowing which union member relates to which event type
.
Event Structure
SDL_ACTIVEEVENT
SDL_ActiveEvent
SDL_KEYDOWN/UP
SDL_KeyboardEvent
SDL_MOUSEMOTION
SDL_MouseMotionEvent
SDL_MOUSEBUTTONDOWN/UP
SDL_MouseButtonEvent
SDL_JOYAXISMOTION
SDL_JoyAxisEvent
SDL_JOYBALLMOTION
SDL_JoyBallEvent
SDL_JOYHATMOTION
SDL_JoyHatEvent
SDL_JOYBUTTONDOWN/UP
SDL_JoyButtonEvent
SDL_QUIT
SDL_QuitEvent
SDL_SYSWMEVENT
SDL_SysWMEvent
SDL_VIDEORESIZE
SDL_ResizeEvent
SDL_VIDEOEXPOSE
SDL_ExposeEvent
SDL_USEREVENT
SDL_UserEvent
The SDL_Event structure has two uses
Reading events on the event queue
Placing events on the event queue
Reading events from the event queue is done with either
SDL_PollEvent
or SDL_PeepEvents
. We'll use SDL_PollEvent
and step through an
example.
First off, we create an empty SDL_Event structure.
SDL_Event test_event;
SDL_PollEvent
removes the
next event from the event queue, if there are no events on
the queue it returns 0
otherwise it returns 1
. We use
a while loop to
process each event in turn.
while(SDL_PollEvent(&test_event)) {
The SDL_PollEvent
function
take a pointer to an SDL_Event structure that is to be filled
with event information. We know that if SDL_PollEvent
removes an event from the
queue then the event information will be placed in our
test_event structure, but we
also know that the type
of event will be placed in
the type
member of
test_event. So to handle each
event type
seperately
we use a switch
statement.
switch(test_event.type) {
We need to know what kind of events we're looking for
and the event
type
's of those
events. So lets assume we want to detect where the user is
moving the mouse pointer within our application. We look
through our event types and notice that SDL_MOUSEMOTION
is, more than likely, the
event we're looking for. A little more research tells use that
SDL_MOUSEMOTION
events are
handled within the SDL_MouseMotionEvent structure which is
the motion
member of
SDL_Event. We can check for
the SDL_MOUSEMOTION
event
type
within our
switch statement like
so:
case SDL_MOUSEMOTION:
All we need do now is read the information out of the
motion
member of
test_event.
printf("We got a motion event. "); printf("Current mouse position is: (%d, %d) ", test_event.motion.x, test_event.motion.y); break; default: printf("Unhandled Event! "); break; } } printf("Event queue empty. ");
It is also possible to push events onto the event queue
and so use it as a two-way communication path. Both
SDL_PushEvent
and SDL_PeepEvents
allow you to place events
onto the event queue. This is usually used to place a
SDL_USEREVENT
on the event
queue, however you could use it to post fake input events if
you wished. Creating your own events is a simple matter of
choosing the event type you want, setting the type
member and filling the
appropriate member structure with information.
SDL_Event user_event; user_event.type=SDL_USEREVENT; user_event.user.code=2; user_event.user.data1=NULL; user_event.user.data2=NULL; SDL_PushEvent(&user_event);
SDL_PollEvent(3), SDL_PushEvent(3), SDL_PeepEvents(3)
COPYRIGHT |
---|
This manual page is taken from the SDL library, licensed under GNU LGPL. |