5 # Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
6 # Copyright (C) 2009 Kartik Thakore <kthakore@cpan.org>
7 # ------------------------------------------------------------------------------
9 # This library is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU Lesser General Public
11 # License as published by the Free Software Foundation; either
12 # version 2.1 of the License, or (at your option) any later version.
14 # This library is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 # Lesser General Public License for more details.
19 # You should have received a copy of the GNU Lesser General Public
20 # License along with this library; if not, write to the Free Software
21 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 # ------------------------------------------------------------------------------
25 # Please feel free to send questions, suggestions or improvements to:
37 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
46 @ISA = qw(Exporter DynaLoader);
47 @EXPORT = qw( in verify &NULL );
50 # Give our caller SDL::Constant's stuff as well as ours.
54 $self->export_to_level(1, @_);
55 SDL::Constants->export_to_level(1);
59 print "$VERSION" if (defined($ARGV[0]) && ($ARGV[0] eq '--SDLperl'));
69 return 0 unless defined $k;
70 my $r = ((scalar grep { defined $_ && $_ eq $k } @t) <=> 0);
77 my ($options,@valid_options) = @_;
78 for (keys %$options) {
79 croak "Invalid option $_\n" unless in ($_, @valid_options);
89 SDL_perl - Simple DirectMedia Layer for Perl
97 SDL_perl is a package of perl modules that provides both functional and object orient
98 interfaces to the Simple DirectMedia Layer for Perl 5. This package does take some
99 liberties with the SDL API, and attempts to adhere to the spirit of both the SDL
100 and Perl. This document describes the low-level functional SDL_perl API. For the
101 object oriented programming interface please see the documentation provided on a
104 =head1 The SDL Perl 2009 Development Team
110 =head2 Perl Development
113 Name: Breno G. de Oliveira
129 =head1 MacOSX Experimental Usage
131 Please get libsdl packages from Fink
138 =head2 Running SDL Perl Scripts in MacOSX
140 First set the PERL5LIB environment variable to the dependencies of your script
142 %export PERL5LIB=$PERL5LIB:./lib
144 Use the SDLPerl executable made in the bundle and call your scripts
146 %SDLPerl.app/Contents/MacOS/SDLPerl yourScript.pl
148 =head1 Functions exported by SDL.pm
152 As with the C language API, SDL_perl initializes the SDL environment through
153 the C<SDL::Init> subroutine. This routine takes a mode flag constructed through
154 the bitwise OR product of the following constants:
181 C<SDL::Init> returns 0 on success, or -1 on error.
185 The last error message set by the SDL library can be retrieved using the subroutine
186 C<SDL::GetError>, which returns a scalar containing the text of the message if any.
190 This subroutine allows an application to delay further operations for atleast a
191 number of milliseconds provided as the argument. The actual delay may be longer
192 than the specified depending on the underlying OS.
196 An application may retrieve the number of milliseconds expired since the initilization
197 of the application through this subroutine. This value resets rougly ever 49 days.
199 =head2 AddTimer(interval,callback,param)
201 C<AddTimer> will register a SDL_NewTimerCallback function to be executed after
202 C<interval> milliseconds, with parameter C<param>. SDL_NewTimerCallback objects
203 can be constructed with the C<NewTimer> subroutine. C<SDL::PerlTimerCallback>
204 will return a valid callback for executing a perl subroutine or closure.
205 This subroutine returns a SDL_TimerID for the newly registered callback, or NULL
208 =head2 NewTimer(interval,subroutine)
210 The C<NewTimer> takes an interval in milliseconds and a reference to a subroutine
211 to call at that interval. The subroutine will be invoked in a void context
212 and accepts no parameters. The callback used is that returned by C<SDL::PerlTimerCallback>.
213 C<NewTimer> returns the SDL_TimerID for the new timer or NULL on error.
215 =head2 RemoveTimer(id)
217 This subroutine taks a SDL_TimerID and removes it from the list of active callbacks.
218 RemoveTimer returns false on failure.
222 This subroutine is depreciated, please use C<NewTimer> or C<AddTimer> instead.
226 C<SDL::CDNumDrives> returns the number of available CD-ROM drives in the system.
230 The subroutine C<SDL::CDName> returns the system specific human readable device name
231 for the given CD-ROM drive.
235 This subroutine opens a CD-ROM drive for access, returning NULL if the drive is busy
236 or otherwise unavailable. On success this subroutine returns a handle to the CD-ROM
239 =head2 CDTrackListing(cd)
241 C<SDL::CDTrackListing> returns a human readable description of a CD-ROM. For each
242 track one line will be produced with the following format:
244 Track index: %d, id %d, %2d.%2d
246 This is provided to ease the creation of human readable descriptions and debugging.
248 =head2 CDTrackId(track)
250 C<CDTrackId> returns the id field of the given SDL_CDtrack structure.
252 =head2 CDTrackType(track)
254 C<CDTrackType> returns the type field of the given SDL_CDtrack structure.
256 =head2 CDTrackLength(track)
258 C<CDTrackLength> returns the length field of the given SDL_CDtrack structure.
260 =head2 CDTrackOffset(track)
262 C<CDTrackOffset> returns the offset field of the given SDL_CDtrack structure.
266 The function C<CDStatus> returns the current status of the given SDL_CDrom.
267 C<CDStatus>'s return values are:
288 =head2 CDPlayTracks(cd,track,tracks,frame,frames)
290 To start playing from an arbitrary portion of a CD, one can provide
291 C<SDL::CDPlayTracks> with a CD, a starting track, the number of tracks,
292 a starting frame, and the number of frames to be played.
294 =head2 CDPlay(cd,track,length)
296 C<SDL::CDPlay> plays the next C<length> tracks starting from C<track>
300 This function will pause CD playback until resume is called.
304 This function will resume CD playback if paused.
308 C<SDL::CDStop> will stop CD playback if playing.
312 This function will eject the CD.
316 This function will release an opened CD.
320 This function return the number of tracks on a CD,
321 it take a SDL_CD as first parameter.
325 This function return the number of the current track on a CD,
326 it take a SDL_CD as first parameter.
330 this function return the frame offset within the current track on a CD.
331 it take a SDL_CD as first parameter.
335 CDtrack stores data on each track on a CD, its fields should be pretty self explainatory.
336 CDtrack take a SDL::CD as input and return a SDL_CDTrack.
340 Pumps the event loop, gathering events from the input devices.
342 PumpEvents gathers all the pending input information from devices and places
343 it on the event queue.
344 Without calls to PumpEvents no events would ever be placed on the queue.
345 Often the need for calls to PumpEvents is hidden from the user
346 since L</ PollEvent> and WaitEvent implicitly call PumpEvents.
347 However, if you are not polling or waiting for events (e.g. you are filtering them),
348 then you must call PumpEvents to force an event queue update.
349 PumpEvents doesn't return any value and doesn't take any parameters.
351 Note: You can only call this function in the thread that set the video mode.
355 Create a new event.It return a SDL::Event.
359 FreeEvent delete the SDL::Event given as first parameter.
360 it doesn't return anything.
364 Polls for currently pending events.
365 If event is not undef, the next event is removed from the queue and returned as a L< SDL::Event>.
366 As this function implicitly calls L</ PumpEvents>, you can only call this function in the thread that set the video mode.
367 it take a SDL::Event as first parameter.
371 Waits indefinitely for the next available event, returning undef if there was an error while waiting for events,
372 a L< SDL::Event> otherwise.
373 If event is not NULL, the next event is removed.
374 As this function implicitly calls L</ PumpEvents>, you can only call this function in the thread that set the video mode.
375 WaitEvent take a SDL::Event as first parameter.
379 This function allows you to set the state of processing certain event types.
381 it take an event type as first argument, and a state as second.
383 If state is set to SDL_IGNORE, that event type will be automatically
384 dropped from the event queue and will not be filtered.
385 If state is set to SDL_ENABLE, that event type will be processed
387 If state is set to SDL_QUERY, SDL_EventState will return the current
388 processing state of the specified event type.
390 A list of event types can be found in the L</ SDL_Event section>.
392 it returns a state(?).
408 =head2 MOUSEBUTTONDOWN
418 EventType return the type of the SDL::Event given as first parameter.
420 =head2 ActiveEventGain
422 ActiveEventGain return the active gain from the SDL::Event given as first parameter.
423 see L</ SDL::Event> for more informations about the active state.
425 =head2 ActiveEventState
427 ActiveEventState return the active state from the SDL::Event given as first parameter.
428 see L</ SDL::Event> for more informations about the active state.
438 KeyEventState return the active key state from the SDL::Event given as first parameter.
439 see L</ SDL::Event> for me more informations about the active key.
441 =head2 SDLK_BACKSPACE
463 =head2 SDLK_AMPERSAND
467 =head2 SDLK_LEFTPAREN
469 =head2 SDLK_RIGHTPAREN
505 =head2 SDLK_SEMICOLON
517 =head2 SDLK_LEFTBRACKET
519 =head2 SDLK_BACKSLASH
521 =head2 SDLK_RIGHTBRACKET
525 =head2 SDLK_UNDERSCORE
527 =head2 SDLK_BACKQUOTE
603 =head2 SDLK_KP_PERIOD
605 =head2 SDLK_KP_DIVIDE
607 =head2 SDLK_KP_MULTIPLY
615 =head2 SDLK_KP_EQUALS
669 =head2 SDLK_SCROLLOCK
733 KeyEventSym return the key pressed/released information from the SDL::Event given as first parameter.
734 see L</ SDL::Event> for more informations about the keyboard events.
738 KeyEventMod return the mod keys pressed information from the SDL::Event given as first parameter.
739 see L</ SDL::Event> for more informations about the keyboard events.
741 =head2 KeyEventUnicode
743 KeyEventMod return the unicode translated keys pressed/released information from the SDL::Event given as first parameter.
744 see L</ SDL::Event> for more informations about the keyboard events.
746 =head2 KeyEventScanCode
748 =head2 MouseMotionState
754 =head2 MouseMotionXrel
756 =head2 MouseMotionYrel
758 =head2 MouseButtonState
770 =head2 EnableKeyRepeat
778 =head2 CreateRGBSurface
780 =head2 CreateRGBSurfaceFrom
786 =head2 SurfacePalette
788 =head2 SurfaceBitsPerPixel