updated docs
[sdlgit/SDL-Site.git] / pages / SDL-Events.html-inc
CommitLineData
162a0989 1<div class="pod">
2<!-- INDEX START -->
3<h3 id="TOP">Index</h3>
4
60f74f6f 5<ul><li><a href="#NAME">NAME</a>
6<ul><li><a href="#CATEGORY">CATEGORY</a></li>
7</ul>
8</li>
162a0989 9<li><a href="#SYNOPSIS">SYNOPSIS</a></li>
4e623c18 10<li><a href="#CONSTANTS">CONSTANTS</a></li>
162a0989 11<li><a href="#METHODS">METHODS</a>
12<ul><li><a href="#pump_events">pump_events</a></li>
13<li><a href="#peep_events_event_num_events_action_">peep_events (event, num_events, action, mask) </a>
14<ul><li><a href="#RETURN">RETURN</a></li>
15</ul>
16</li>
17<li><a href="#poll_event_event">poll_event($event)</a>
18<ul><li><a href="#RETURN-2">RETURN</a></li>
19</ul>
20</li>
21<li><a href="#push_event_event">push_event($event)</a>
22<ul><li><a href="#RETURN-3">RETURN</a></li>
23</ul>
24</li>
25<li><a href="#wait_event_event">wait_event($event)</a>
26<ul><li><a href="#RETURN-4">RETURN</a></li>
27</ul>
28</li>
55bbf7a2 29<li><a href="#set_event_filter">set_event_filter</a>
30<ul><li><a href="#PARAMETER">PARAMETER</a></li>
31</ul>
32</li>
cf23a5da 33<li><a href="#get_key_state">get_key_state</a></li>
55bbf7a2 34<li><a href="#get_mod_state">get_mod_state</a>
35<ul><li><a href="#MOD_VALUES">MOD VALUES</a></li>
36</ul>
37</li>
cf23a5da 38<li><a href="#set_mod_state">set_mod_state</a></li>
55bbf7a2 39<li><a href="#event_state">event_state </a>
40<ul><li><a href="#STATES">STATES</a></li>
41</ul>
42</li>
cf23a5da 43<li><a href="#get_key_name">get_key_name</a></li>
44<li><a href="#enable_unicode">enable_unicode </a></li>
45<li><a href="#enable_key_repeat">enable_key_repeat </a></li>
46<li><a href="#get_mouse_state">get_mouse_state </a></li>
47<li><a href="#get_relative_mouse_state">get_relative_mouse_state </a></li>
48<li><a href="#get_app_state">get_app_state </a></li>
49<li><a href="#joystick_event_state">joystick_event_state </a></li>
162a0989 50</ul>
51</li>
d5943b68 52<li><a href="#SEE_ALSO">SEE ALSO</a></li>
53<li><a href="#AUTHORS">AUTHORS</a>
162a0989 54</li>
55</ul><hr />
56<!-- INDEX END -->
57
58<h1 id="NAME">NAME</h1><p><a href="#TOP" class="toplink">Top</a></p>
59<div id="NAME_CONTENT">
60<p>SDL::Events - Bindings to the Events Category in SDL API</p>
61
62</div>
60f74f6f 63<h2 id="CATEGORY">CATEGORY</h2>
64<div id="CATEGORY_CONTENT">
65<p>Core, Events</p>
66
67</div>
162a0989 68<h1 id="SYNOPSIS">SYNOPSIS</h1><p><a href="#TOP" class="toplink">Top</a></p>
69<div id="SYNOPSIS_CONTENT">
55bbf7a2 70<p>Most likely you just want to know how to get events for you app.</p>
4e623c18 71<pre> use SDL ':init';
162a0989 72 use SDL::Event;
4e623c18 73 use SDL::Events ':all';
55bbf7a2 74
75 SDL::init(SDL_INIT_VIDEO); # Event can only be grabbed in the same thread as this
162a0989 76
77 ...
78
79 my $event = SDL::Event-&gt;new(); # notices 'Event' ne 'Events'
80
81 while( 1 )
82 {
83 SDL::Events::pump_events();
84 while( SDL::Events::poll_event($event) )
85 {
86 #check by event type
87 on_active() if $event-&gt;type == SDL_ACTIVEEVENT;
88 ...
89 }
90 }
91
92</pre>
93
94</div>
4e623c18 95<h1 id="CONSTANTS">CONSTANTS</h1><p><a href="#TOP" class="toplink">Top</a></p>
96<div id="CONSTANTS_CONTENT">
3549ee6a 97<p>The constants are exported by default. You can avoid this by doing:</p>
98<pre> use SDL::Events ();
162a0989 99
4e623c18 100</pre>
3549ee6a 101<p>and access them directly:</p>
4e623c18 102<pre> SDL::Events::SDL_ACTIVEEVENT;
103
104</pre>
105<p>or by choosing the export tags below:</p>
106<p>Export tag: ':type'</p>
107<pre> SDL_ACTIVEEVENT
108 SDL_KEYDOWN
109 SDL_KEYUP
110 SDL_MOUSEMOTION
111 SDL_MOUSEBUTTONDOWN
112 SDL_MOUSEBUTTONUP
113 SDL_JOYAXISMOTION
114 SDL_JOYBALLMOTION
115 SDL_JOYHATMOTION
116 SDL_JOYBUTTONDOWN
117 SDL_JOYBUTTONUP
118 SDL_QUIT
119 SDL_SYSWMEVENT
120 SDL_VIDEORESIZE
121 SDL_VIDEOEXPOSE
122 SDL_USEREVENT
123 SDL_NUMEVENTS
124
125</pre>
126<p>Export tag: ':mask'</p>
127<pre> SDL_EVENTMASK
128 SDL_ACTIVEEVENTMASK
129 SDL_KEYDOWNMASK
130 SDL_KEYUPMASK
131 SDL_KEYEVENTMASK
132 SDL_MOUSEMOTIONMASK
133 SDL_MOUSEBUTTONDOWNMASK
134 SDL_MOUSEBUTTONUPMASK
135 SDL_MOUSEEVENTMASK
136 SDL_JOYAXISMOTIONMASK
137 SDL_JOYBALLMOTIONMASK
138 SDL_JOYHATMOTIONMASK
139 SDL_JOYBUTTONDOWNMASK
140 SDL_JOYBUTTONUPMASK
141 SDL_JOYEVENTMASK
142 SDL_VIDEORESIZEMASK
143 SDL_VIDEOEXPOSEMASK
144 SDL_QUITMASK
145 SDL_SYSWMEVENTMASK
146 SDL_ALLEVENTS
147
148</pre>
149<p>Export tag: ':action'</p>
150<pre> SDL_ADDEVENT
151 SDL_PEEKEVENT
152 SDL_GETEVENT
153
154</pre>
155<p>Export tag: ':state'</p>
156<pre> SDL_QUERY
157 SDL_IGNORE
158 SDL_DISABLE / SDL_ENABLE
159 SDL_RELEASED / SDL_PRESSED
162a0989 160
4e623c18 161</pre>
162<p>Export tag: ':hat'</p>
163<pre> SDL_HAT_CENTERED
164 SDL_HAT_UP / SDL_HAT_RIGHT / SDL_HAT_DOWN / SDL_HAT_LEFT
165 SDL_HAT_RIGHTUP / SDL_HAT_RIGHTDOWN / SDL_HAT_LEFTUP / SDL_HAT_LEFTDOWN
162a0989 166
4e623c18 167</pre>
168<p>Export tag: ':app'</p>
169<pre> SDL_APPMOUSEFOCUS
170 SDL_APPINPUTFOCUS
171 SDL_APPACTIVE
162a0989 172
4e623c18 173</pre>
174<p>Export tag: ':button'</p>
175<pre> SDL_BUTTON
176 SDL_BUTTON_LEFT / SDL_BUTTON_MIDDLE / SDL_BUTTON_RIGHT
177 SDL_BUTTON_WHEELUP / SDL_BUTTON_WHEELDOWN
178 SDL_BUTTON_X1 / SDL_BUTTON_X2
179 SDL_BUTTON_LMASK / SDL_BUTTON_MMASK / SDL_BUTTON_RMASK
180 SDL_BUTTON_X1MASK / SDL_BUTTON_X2MASK
181
182</pre>
183<p>Export tag: ':keysym'</p>
184<pre> SDLK_UNKNOWN
185 SDLK_FIRST
186 SDLK_BACKSPACE
187 SDLK_TAB
188 SDLK_CLEAR
189 SDLK_RETURN
190 SDLK_PAUSE
191 SDLK_ESCAPE
192 SDLK_SPACE
193 SDLK_EXCLAIM
194 SDLK_QUOTEDBL
195 SDLK_HASH
196 SDLK_DOLLAR
197 SDLK_AMPERSAND
198 SDLK_QUOTE
199 SDLK_LEFTPAREN / SDLK_RIGHTPAREN
200 SDLK_ASTERISK
201 SDLK_PLUS / SDLK_MINUS
202 SDLK_COMMA
203 SDLK_PERIOD
204 SDLK_0 .. SDLK_9
205 SDLK_COLON
206 SDLK_SEMICOLON
207 SDLK_LESS / SDLK_GREATER
208 SDLK_EQUALS
209 SDLK_QUESTION
210 SDLK_AT
211 SDLK_LEFTBRACKET / SDLK_RIGHTBRACKET
212 SDLK_SLASH / SDLK_BACKSLASH
213 SDLK_CARET
214 SDLK_UNDERSCORE
215 SDLK_BACKQUOTE
216 SDLK_a .. SDLK_z
217 SDLK_DELETE
218 SDLK_WORLD_0 .. SDLK_WORLD_95
219 SDLK_KP0 .. SDLK_KP9
220 SDLK_KP_PERIOD
221 SDLK_KP_DIVIDE / SDLK_KP_MULTIPLY
222 SDLK_KP_MINUS / SDLK_KP_PLUS
223 SDLK_KP_ENTER
224 SDLK_KP_EQUALS
225 SDLK_UP / SDLK_DOWN / SDLK_RIGHT / SDLK_LEFT
226 SDLK_INSERT
227 SDLK_HOME / SDLK_END
228 SDLK_PAGEUP / SDLK_PAGEDOWN
229 SDLK_F1 .. SDLK_F15
230 SDLK_NUMLOCK / SDLK_CAPSLOCK / SDLK_SCROLLOCK
231 SDLK_RSHIFT / SDLK_LSHIFT
232 SDLK_RCTRL / SDLK_LCTRL
233 SDLK_RALT / SDLK_LALT
234 SDLK_RMETA / SDLK_LMETA
235 SDLK_LSUPER / SDLK_RSUPER
236 SDLK_MODE
237 SDLK_COMPOSE
238 SDLK_HELP
239 SDLK_PRINT
240 SDLK_SYSREQ
241 SDLK_BREAK
242 SDLK_MENU
243 SDLK_POWER
244 SDLK_EURO
245 SDLK_UNDO
246
247</pre>
248<p>Export tag ':keymod'</p>
249<pre> KMOD_NONE
250 KMOD_LSHIFT / KMOD_RSHIFT / KMOD_SHIFT
251 KMOD_LCTRL / KMOD_RCTRL / KMOD_CTRL
252 KMOD_LALT / KMOD_RALT / KMOD_ALT
253 KMOD_LMETA / KMOD_RMETA / KMOD_META
254 KMOD_NUM
255 KMOD_CAPS
256 KMOD_MODE
257 KMOD_RESERVED
258
259</pre>
162a0989 260
261</div>
262<h1 id="METHODS">METHODS</h1><p><a href="#TOP" class="toplink">Top</a></p>
263<div id="METHODS_CONTENT">
264
265</div>
266<h2 id="pump_events">pump_events</h2>
267<div id="pump_events_CONTENT">
268<p>Pumps the event loop, gathering events from the input devices.</p>
269<pre> pump_events();
270
271</pre>
272<p>pump_events gathers all the pending input information from devices and places it on the event queue. Without calls to pump_events no events would ever be placed on the queue.
46beffd8 273Often the need for calls to pump_events is hidden from the user since <a href="http://search.cpan.org/perldoc?poll_event">poll_event</a> and <a href="http://search.cpan.org/perldoc?wait_event">wait_event</a> implicitly call pump_events.
162a0989 274However, if you are not polling or waiting for events (e.g. you are filtering them), then you must call pump_events to force an event queue update.</p>
275
276
277
278
279
280</div>
281<h2 id="peep_events_event_num_events_action_">peep_events (event, num_events, action, mask) </h2>
282<div id="peep_events_event_num_events_action_-2">
283<p>Checks the event queue for messages and optionally returns them. </p>
284<pre> my $num_peep_events = SDL::Events::peep_events($event, 127, SDL_PEEKEVENT, SDL_ALLEVENTS);
285
286</pre>
287<p>If action is SDL_ADDEVENT, up to numevents events will be added to the back of the event queue.</p>
288<p>If action is SDL_PEEKEVENT, up to numevents events at the front of the event queue, matching mask, will be returned and will not be removed from the queue.</p>
289<p>If action is SDL_GETEVENT, up to numevents events at the front of the event queue, matching mask, will be returned and will be removed from the queue.</p>
290<p>The mask parameter is a bitwise OR of SDL::Events::SDL_EVENTMASK(event_type), for all event types you are interested in</p>
291<p>This function is thread-safe.</p>
292<p>You may have to call pump_events before calling this function. Otherwise, the events may not be ready to be filtered when you call peep_events.</p>
293<p>Examples of mask:</p>
294<dl>
295 <dt>SDL_EVENTMASK (SDL_KEYUP)</dt>
296 <dt>(SDL_EVENTMASK (SDL_MOUSEBUTTONDOWN) | SDL_EVENTMASK (SDL_MOUSEBUTTONUP))</dt>
297 <dt>SDL_ALLEVENTS</dt>
298 <dt>SDL_KEYUPMASK</dt>
299 <dt>SDL_ALLEVENTS ^ SDL_QUITMASK</dt>
300</dl>
301
302</div>
303<h3 id="RETURN">RETURN</h3>
304<div id="RETURN_CONTENT">
305<p>Number of Events actually stored or -1 if there was an error</p>
306
307</div>
308<h2 id="poll_event_event">poll_event($event)</h2>
309<div id="poll_event_event_CONTENT">
310<p>Polls for currently pending events. </p>
55bbf7a2 311<p>If $event is not NULL, the next event is removed from the queue and stored in the <a href="SDL-Event.html">SDL::Event</a> structure pointed to by $event.</p>
92e293d6 312<p>As this function implicitly calls pump_events, you can only call this function in the thread that set the video mode with <a href="/SDL-Video.html#set_video_mode">SDL::Video::set_video_mode</a>. </p>
162a0989 313
314</div>
315<h3 id="RETURN-2">RETURN</h3>
316<div id="RETURN_CONTENT-2">
317<p>Returns 1 if there are any pending events, or 0 if there are none available. </p>
318
319</div>
320<h2 id="push_event_event">push_event($event)</h2>
321<div id="push_event_event_CONTENT">
322<p>Pushes an event onto the event queue </p>
323<p>The event queue can actually be used as a two way communication channel. Not only can events be read from the queue, but the user can also push their own events onto it. event is a pointer to the event structure you wish to push onto the queue.
324The event is copied into the queue, and the caller may dispose of the memory pointed to after push_event returns.</p>
325<p>Note: Pushing device input events onto the queue doesn't modify the state of the device within SDL. </p>
326<p>This function is thread safe, and can be called from other threads safely.</p>
327
328</div>
329<h3 id="RETURN-3">RETURN</h3>
330<div id="RETURN_CONTENT-3">
331<p>Returns 0 on success or -1 if the event couldn't be pushed.</p>
332
333</div>
334<h2 id="wait_event_event">wait_event($event)</h2>
335<div id="wait_event_event_CONTENT">
336<p>Waits indefinitely for the next available $event, returning 0 if there was an error while waiting for events, 1 otherwise.</p>
337<p>If $event is not NULL, the next event is removed from the queue and stored in $event.</p>
92e293d6 338<p>As this function implicitly calls SDL_PumpEvents, you can only call this function in the thread that <a href="/SDL-Video.html#set_video_mode">SDL::Video::set_video_mode</a>. </p>
162a0989 339
340</div>
341<h3 id="RETURN-4">RETURN</h3>
342<div id="RETURN_CONTENT-4">
343<p>0 if there was an error while waiting for events, 1 otherwise</p>
344
345</div>
cf23a5da 346<h2 id="set_event_filter">set_event_filter</h2>
347<div id="set_event_filter_CONTENT">
55bbf7a2 348<p>Sets up a filter to process all events </p>
349<pre> my $filter = sub { if($_[0]-&gt;type == SDL_ACTIVEEVENT){ return 0} else{ return 1; }};
350
351 SDL::Events::set_event_filter($filter);
352
353</pre>
354
355</div>
356<h3 id="PARAMETER">PARAMETER</h3>
357<div id="PARAMETER_CONTENT">
358<p>set_event_filter takes a coderef that it checks all events again. The callback gets a event in the stack</p>
359<pre> sub { my $event_to_test = shift; ...}
360
361</pre>
362<p>to filter the event return a 0, to pass the filter return a 1. </p>
5ce48b7e 363<p>One <strong>Caveat</strong> is if you are filtering SDL_QUIT the event will be filtered if it is non-intterupt call ( Window closes normally ). If it is a interrupt SDL_QUIT it will be process on the next event poll. </p>
55bbf7a2 364<p>Events pushed onto to the queue with <a href="/SDL-Events.html#push_events">SDL::Events::push_events</a> or <a href="/SDL-Events.html#peep_events">SDL::Events::peep_events</a> do not get filtered.</p>
365<p>This callback may run in a different thread. </p>
cf23a5da 366
367</div>
368<h2 id="get_key_state">get_key_state</h2>
369<div id="get_key_state_CONTENT">
55bbf7a2 370<p>Get a snapshot of the current keyboard state</p>
371<pre> my $keys_ref = SDL::Events::get_key_state();
372
373 print $keys_ref-&gt;[SDLK_RETURN]; # 1 if pressed , 0 if not pressed
374
375</pre>
376<p>Use <a href="/SDL-Events.html#pump_events">SDL::Events::pump_events</a> to update the state array.</p>
377<p>This function gives you the current state after all events have been processed, so if a key or button has been pressed and released before you process events, then the pressed state will never show up in the get_key_state call.</p>
378<p>This function doesn't take into account whether shift has been pressed or not.</p>
cf23a5da 379
380</div>
381<h2 id="get_mod_state">get_mod_state</h2>
382<div id="get_mod_state_CONTENT">
55bbf7a2 383<p>Get the state of the modifier keys</p>
384<p>Returns the current state of modifier keys</p>
385<p>Return value is an OR'd combination of KMOD_*</p>
386<pre> SDL::Events::pump_events; #get latest mod_state in buffers
387
388 my $mod_state = SDL::Events::get_mod_state();
389
390 # Check which ones are pressed with
391
392 # no mod pressed?
393
394 print 'no_mod' if ( $mod_state &amp; KMOD_NONE );
395
396 # CTRL or ALT
397
398 print 'ctrl alt' if ($mod_state &amp; KMOD_CTRL || $mod_state &amp; KMOD_ALT );
399
400</pre>
401
402</div>
403<h3 id="MOD_VALUES">MOD VALUES</h3>
404<div id="MOD_VALUES_CONTENT">
405<dl>
406 <dt>KMOD_NONE</dt>
407 <dt>KMOD_LSHIFT</dt>
408 <dt>KMOD_RSHIFT</dt>
409 <dt>KMOD_LCTRL</dt>
410 <dt>KMOD_RCTRL</dt>
411 <dt>KMOD_LALT</dt>
412 <dt>KMOD_RALT</dt>
413 <dt>KMOD_LMETA</dt>
414 <dt>KMOD_RMETA</dt>
415 <dt>KMOD_NUM</dt>
416 <dt>KMOD_CAPS</dt>
417 <dt>KMOD_MODE</dt>
418 <dt>KMOD_CTRL </dt>
419 <dd>
420 <p>same as KMOD_LCTRL|KMOD_RCTRL</p>
421 </dd>
422 <dt>KMOD_SHIFT</dt>
423 <dd>
424 <p>same as KMOD_LSHIFT|KMOD_RSHIFT</p>
425 </dd>
426 <dt>KMOD_ALT</dt>
427 <dd>
428 <p>same as KMOD_LALT|KMOD_RALT</p>
429 </dd>
430 <dt>KMOD_META</dt>
431 <dd>
432 <p>same as KMOD_LMETA|KMOD_RMETA</p>
433 </dd>
434</dl>
cf23a5da 435
436</div>
437<h2 id="set_mod_state">set_mod_state</h2>
438<div id="set_mod_state_CONTENT">
55bbf7a2 439<p>Get the state of the modifier keys</p>
440<p>The inverse of <a href="/SDL-Events.html#get_mod_state">SDL::Events::get_mod_state</a> allows you to impose modifier key states on your application.</p>
441<p>Simply pass your desired modifier states into $modstate. This value can be a OR'd combination of any KMOD* constant.</p>
442<pre> my $modstate = KMOD_LMETA | KMOD_LSHIFT;
443
444</pre>
445<p>Any KMOD_* constant see <a href="/SDL-Events.html#get_mod_state">SDL::Events::get_mod_state</a> for constants.
446 SDL::Events::set_mod_state( $modstate );</p>
cf23a5da 447
448</div>
449<h2 id="event_state">event_state </h2>
450<div id="event_state_CONTENT">
55bbf7a2 451<p>Allows you to set the state of processing certain events</p>
452<pre> SDL::Events::event_state( $type, $state );
453
454</pre>
455<p>A list of $type(s) can be found in <a href="SDL-Event.html">SDL::Event</a></p>
456
457</div>
458<h3 id="STATES">STATES</h3>
459<div id="STATES_CONTENT">
460<dl>
461 <dt>SDL_IGNORE</dt>
462 <dd>
463 <p>The event of $type will be automatically dropper from the event queue and will not be filtered.</p>
464 </dd>
465 <dt>SDL_ENABLE</dt>
466 <dd>
467 <p>The event of $type will be processed normally. This is default.</p>
468 </dd>
469 <dt>SDL_QUERY</dt>
470 <dd>
471 <p>The current processing state of the $type will be returned</p>
472 </dd>
473</dl>
cf23a5da 474
475</div>
476<h2 id="get_key_name">get_key_name</h2>
477<div id="get_key_name_CONTENT">
55bbf7a2 478<p>Gets the name of the a SDL virtual keysym</p>
479<pre> my $event = SDL::Event-&gt;new();
480
481 while( SDL::Events::poll_event($event) )
482 {
483 my $key = $event-&gt;key_sym;
484 $key_str = SDL::Events::get_key_name($key);
485 }
486
487</pre>
488<p>Returns a string with the name of the key sym.</p>
cf23a5da 489
490</div>
491<h2 id="enable_unicode">enable_unicode </h2>
492<div id="enable_unicode_CONTENT">
55bbf7a2 493<p>Enable/Disable UNICODE translation</p>
494<pre> my $previous_translation_mode = SDL::Events::enable_unicode( 1 ); #enable
495 $previous_translation_mode = SDL::Events::enable_unicode( 0 ); #disables
496
497</pre>
498<p>To obtain the character codes corresponding to received keyboard events, Unicode translation must first be turned on using this function. The translation incurs a slight overhead for each keyboard event and is therefore disabled by default. For each subsequently recieved key down event, the unicode member of the <a href="/SDL-Event.html#key_sym">SDL::Event::key_sym</a> provided structure will be then contain the corresponding character code, or otherwise zero.</p>
499<p>A value of 1 for enabling, 0 for disabling and -1 for unchanged. -1 is usefull for querying the current translation mode.</p>
500<p>Only key press events will be translated not release events.</p>
501<p>Returns the previous translation mode as (1,0).</p>
cf23a5da 502
503</div>
504<h2 id="enable_key_repeat">enable_key_repeat </h2>
505<div id="enable_key_repeat_CONTENT">
55bbf7a2 506<p>Sets keyboard repeat rate</p>
507<pre> my $success = SDL::Events::enable_key_repeat( $delay, $interval );
508
509</pre>
510<p>Enables or disables the keyboard repeat rate. $delay specifies how long the key must be pressed before it begins repeating, it then repleats at the speed specified by $interval. Both $delay and $interval are expressed in milliseconds.</p>
511<p>Setting $delay to 0 disables key repeating completely. Good default values are SDL_DEFAULT_REPEAT_DELAY and SDL_DEFAULT_REPEAT_INTERVAL.</p>
512<p>Return 0 on success and -1 on fail.</p>
cf23a5da 513
514</div>
515<h2 id="get_mouse_state">get_mouse_state </h2>
516<div id="get_mouse_state_CONTENT">
55bbf7a2 517<p>Retrives the current state of the mouse</p>
518<pre> my ($mask,$x,$y) = @{ SDL::Events::get_mouse_state( ) };
519
520 print 'Button Left pressed' if ($mask &amp; SDL_BUTTON_LMASK);
521
522 print 'Button Right pressed' if ($mask &amp; SDL_BUTTON_RMASK);
523
524 print 'Button Middle pressed' if ($mask &amp; SDL_BUTTON_MMASK);
525
526 print $x.','.$y;
527
528</pre>
529<p>The current button state is returned as a button $bitmask, which can be tested using the the above constants </p>
cf23a5da 530
531</div>
532<h2 id="get_relative_mouse_state">get_relative_mouse_state </h2>
533<div id="get_relative_mouse_state_CONTENT">
55bbf7a2 534<p>Retrives the current relative state of the mouse</p>
535<pre> my ($mask,$x,$y) = @{ SDL::Events::get_mouse_state( ) };
536
537 print 'Button Left pressed' if ($mask &amp; SDL_BUTTON_LMASK);
538
539 print 'Button Right pressed' if ($mask &amp; SDL_BUTTON_RMASK);
540
541 print 'Button Middle pressed' if ($mask &amp; SDL_BUTTON_MMASK);
542
543 print $x.','.$y; # this is relative to the last postion of the mouse
544
545</pre>
546<p>The current button state is returned as a button $bitmask, which can be tested using the the above constants </p>
547
548
549
550
cf23a5da 551
552</div>
553<h2 id="get_app_state">get_app_state </h2>
554<div id="get_app_state_CONTENT">
55bbf7a2 555<p>Gets the state of the application</p>
556<pre> my $app_state = SDL::Events::get_app_state();
557
558</pre>
559<p>The $app_state is a bitwise combination of:</p>
560<dl>
561 <dt>SDL_APPMOUSEFOCUS</dt>
562 <dd>
563 <p>Application has mouse focus</p>
564<pre> warn 'mouse focus' if $app_state &amp; SDL_APPMOUSEFOCUS
565
566</pre>
567 </dd>
568 <dt>SDL_APPINPUTFOCUS</dt>
569 <dd>
570 <p>Application has keyboard focus</p>
571<pre> warn 'keyboard focus' if $app_state &amp; SDL_APPINPUTFOCUS
572
573
574
575
576</pre>
577 </dd>
578 <dt>SDL_APPACTIVE</dt>
579 <dd>
580 <p>Application is visible</p>
581<pre> warn 'Application Visible' if $app_state &amp; SDL_APPACTIVE
cf23a5da 582
55bbf7a2 583</pre>
b0e2356c 584 </dd>
585</dl>
55bbf7a2 586
587</div>
588<h2 id="joystick_event_state">joystick_event_state </h2>
589<div id="joystick_event_state_CONTENT">
b0e2356c 590<p>Enable/disable joystick event polling</p>
55bbf7a2 591<pre> my $status = SDL::Events::joystick_event_state( $state );
cf23a5da 592
55bbf7a2 593</pre>
b0e2356c 594<p>This function is used to enable or disable joystick event processing. With joystick event processing disabled you will have to update joystick states with SDL_JoystickUpdate and read the joystick information manually. $state can be:</p>
595<dl>
55bbf7a2 596 <dt>SDL_QUERY</dt>
597 <dt>SDL_ENABLE </dt>
598 <dt>SDL_IGNORE</dt>
599 <dd>
600 <p>Joystick event handling is default. Even if joystick event processing is enabled, individual joysticks must be opened before they generate events</p>
601 </dd>
602</dl>
603<p><strong>Warning:</strong> Calling this function may delete all events currently in SDL's event queue.</p>
604<p>If $state is SDL_QUERY then the current state is returned, otherwise the new processing state is returned.</p>
cf23a5da 605
606</div>
162a0989 607<h1 id="SEE_ALSO">SEE ALSO</h1><p><a href="#TOP" class="toplink">Top</a></p>
608<div id="SEE_ALSO_CONTENT">
d5943b68 609<p><a href="SDL-Event.html">SDL::Event</a>, <a href="SDL-Video.html">SDL::Video</a></p>
610
611</div>
612<h1 id="AUTHORS">AUTHORS</h1><p><a href="#TOP" class="toplink">Top</a></p>
613<div id="AUTHORS_CONTENT">
614<p>See <b>AUTHORS</b> in <cite>SDL</cite>.</p>
162a0989 615
616</div>
617</div>