mirror of
https://github.com/joel16/SDL2.git
synced 2024-12-14 06:48:33 +00:00
8dd601989f
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40182
183 lines
5.5 KiB
Groff
183 lines
5.5 KiB
Groff
.TH "SDL_Event" "3" "Tue 11 Sep 2001, 22:59" "SDL" "SDL API Reference"
|
|
.SH "NAME"
|
|
SDL_Event\- General event structure
|
|
.SH "STRUCTURE DEFINITION"
|
|
.PP
|
|
.nf
|
|
\f(CWtypedef 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_SywWMEvent syswm;
|
|
} SDL_Event;\fR
|
|
.fi
|
|
.PP
|
|
.SH "STRUCTURE DATA"
|
|
.TP 20
|
|
\fBtype\fR
|
|
The type of event
|
|
.TP 20
|
|
\fBactive\fR
|
|
\fIActivation event\fR
|
|
.TP 20
|
|
\fBkey\fR
|
|
\fIKeyboard event\fR
|
|
.TP 20
|
|
\fBmotion\fR
|
|
\fIMouse motion event\fR
|
|
.TP 20
|
|
\fBbutton\fR
|
|
\fIMouse button event\fR
|
|
.TP 20
|
|
\fBjaxis\fR
|
|
\fIJoystick axis motion event\fR
|
|
.TP 20
|
|
\fBjball\fR
|
|
\fIJoystick trackball motion event\fR
|
|
.TP 20
|
|
\fBjhat\fR
|
|
\fIJoystick hat motion event\fR
|
|
.TP 20
|
|
\fBjbutton\fR
|
|
\fIJoystick button event\fR
|
|
.TP 20
|
|
\fBresize\fR
|
|
\fIApplication window resize event\fR
|
|
.TP 20
|
|
\fBexpose\fR
|
|
\fIApplication window expose event\fR
|
|
.TP 20
|
|
\fBquit\fR
|
|
\fIApplication quit request event\fR
|
|
.TP 20
|
|
\fBuser\fR
|
|
\fIUser defined event\fR
|
|
.TP 20
|
|
\fBsyswm\fR
|
|
\fIUndefined window manager event\fR
|
|
.SH "DESCRIPTION"
|
|
.PP
|
|
The \fBSDL_Event\fR union is the core to all event handling is SDL, its probably the most important structure after \fBSDL_Surface\fR\&. \fBSDL_Event\fR 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 \fBtype\fR\&.
|
|
.PP
|
|
.TP 20
|
|
\fBEvent \fBtype\fR\fR
|
|
\fBEvent Structure\fR
|
|
.TP 20
|
|
\fBSDL_ACTIVEEVENT\fP
|
|
\fI\fBSDL_ActiveEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_KEYDOWN/UP\fP
|
|
\fI\fBSDL_KeyboardEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_MOUSEMOTION\fP
|
|
\fI\fBSDL_MouseMotionEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_MOUSEBUTTONDOWN/UP\fP
|
|
\fI\fBSDL_MouseButtonEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_JOYAXISMOTION\fP
|
|
\fI\fBSDL_JoyAxisEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_JOYBALLMOTION\fP
|
|
\fI\fBSDL_JoyBallEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_JOYHATMOTION\fP
|
|
\fI\fBSDL_JoyHatEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_JOYBUTTONDOWN/UP\fP
|
|
\fI\fBSDL_JoyButtonEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_QUIT\fP
|
|
\fI\fBSDL_QuitEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_SYSWMEVENT\fP
|
|
\fI\fBSDL_SysWMEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_VIDEORESIZE\fP
|
|
\fI\fBSDL_ResizeEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_VIDEOEXPOSE\fP
|
|
\fI\fBSDL_ExposeEvent\fR\fR
|
|
.TP 20
|
|
\fBSDL_USEREVENT\fP
|
|
\fI\fBSDL_UserEvent\fR\fR
|
|
.SH "USE"
|
|
.PP
|
|
The \fBSDL_Event\fR structure has two uses
|
|
.IP " \(bu" 6
|
|
Reading events on the event queue
|
|
.IP " \(bu" 6
|
|
Placing events on the event queue
|
|
.PP
|
|
Reading events from the event queue is done with either \fI\fBSDL_PollEvent\fP\fR or \fI\fBSDL_PeepEvents\fP\fR\&. We\&'ll use \fBSDL_PollEvent\fP and step through an example\&.
|
|
.PP
|
|
First off, we create an empty \fBSDL_Event\fR structure\&.
|
|
.PP
|
|
.nf
|
|
\f(CWSDL_Event test_event;\fR
|
|
.fi
|
|
.PP
|
|
\fBSDL_PollEvent\fP removes the next event from the event queue, if there are no events on the queue it returns \fB0\fR otherwise it returns \fB1\fR\&. We use a \fBwhile\fP loop to process each event in turn\&.
|
|
.PP
|
|
.nf
|
|
\f(CWwhile(SDL_PollEvent(&test_event)) {\fR
|
|
.fi
|
|
.PP
|
|
The \fBSDL_PollEvent\fP function take a pointer to an \fBSDL_Event\fR structure that is to be filled with event information\&. We know that if \fBSDL_PollEvent\fP removes an event from the queue then the event information will be placed in our \fBtest_event\fR structure, but we also know that the \fItype\fP of event will be placed in the \fBtype\fR member of \fBtest_event\fR\&. So to handle each event \fBtype\fR seperately we use a \fBswitch\fP statement\&.
|
|
.PP
|
|
.nf
|
|
\f(CW switch(test_event\&.type) {\fR
|
|
.fi
|
|
.PP
|
|
We need to know what kind of events we\&'re looking for \fIand\fP the event \fBtype\fR\&'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 \fBSDL_MOUSEMOTION\fP is, more than likely, the event we\&'re looking for\&. A little \fImore\fR research tells use that \fBSDL_MOUSEMOTION\fP events are handled within the \fI\fBSDL_MouseMotionEvent\fR\fR structure which is the \fBmotion\fR member of \fBSDL_Event\fR\&. We can check for the \fBSDL_MOUSEMOTION\fP event \fBtype\fR within our \fBswitch\fP statement like so:
|
|
.PP
|
|
.nf
|
|
\f(CW case SDL_MOUSEMOTION:\fR
|
|
.fi
|
|
.PP
|
|
All we need do now is read the information out of the \fBmotion\fR member of \fBtest_event\fR\&.
|
|
.PP
|
|
.nf
|
|
\f(CW 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\&.
|
|
");\fR
|
|
.fi
|
|
.PP
|
|
.PP
|
|
It is also possible to push events onto the event queue and so use it as a two-way communication path\&. Both \fI\fBSDL_PushEvent\fP\fR and \fI\fBSDL_PeepEvents\fP\fR allow you to place events onto the event queue\&. This is usually used to place a \fBSDL_USEREVENT\fP 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 \fBtype\fR member and filling the appropriate member structure with information\&.
|
|
.PP
|
|
.nf
|
|
\f(CWSDL_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);\fR
|
|
.fi
|
|
.PP
|
|
.SH "SEE ALSO"
|
|
.PP
|
|
\fI\fBSDL_PollEvent\fP\fR, \fI\fBSDL_PushEvent\fP\fR, \fI\fBSDL_PeepEvents\fP\fR
|
|
...\" created by instant / docbook-to-man, Tue 11 Sep 2001, 22:59
|