CPAN Rel v2.2.3
[sdlgit/SDL_perl.git] / lib / SDL.pm
CommitLineData
bfd90409 1#!/usr/bin/env perl
2#
3# SDL.pm
4#
5# Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
91e7ec4e 6# Copyright (C) 2009 Kartik Thakore <kthakore@cpan.org>
bfd90409 7# ------------------------------------------------------------------------------
8#
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.
13#
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.
18#
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
22#
23# ------------------------------------------------------------------------------
24#
25# Please feel free to send questions, suggestions or improvements to:
26#
91e7ec4e 27# Kartik Thakore
28# kthakore@cpan.org
bfd90409 29#
30
31package SDL;
32
33use strict;
084b921f 34use warnings;
35use Carp;
36
bfd90409 37use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
38
39require Exporter;
40require DynaLoader;
41
42use SDL_perl;
43use SDL::Constants;
44
45BEGIN {
46 @ISA = qw(Exporter DynaLoader);
47 @EXPORT = qw( in verify &NULL );
48};
49
659a4733 50# Give our caller SDL::Constant's stuff as well as ours.
51sub import {
52 my $self = shift;
53
54 $self->export_to_level(1, @_);
55 SDL::Constants->export_to_level(1);
56}
91e7ec4e 57$VERSION = '2.2.3';
bfd90409 58
59print "$VERSION" if (defined($ARGV[0]) && ($ARGV[0] eq '--SDLperl'));
60
fe6d1297 61$SDL::DEBUG=0;
bfd90409 62
63sub NULL {
64 return 0;
65}
66
67sub in {
68 my ($k,@t) = @_;
1cf7cae7 69 return 0 unless defined $k;
5c44eb34 70 my $r = ((scalar grep { defined $_ && $_ eq $k } @t) <=> 0);
03aadbe5 71 return 0 if $r eq '';
72 return $r;
73
bfd90409 74}
75
76sub verify (\%@) {
77 my ($options,@valid_options) = @_;
78 for (keys %$options) {
084b921f 79 croak "Invalid option $_\n" unless in ($_, @valid_options);
bfd90409 80 }
81}
82
83
841;
85__END__
86
87=head1 NAME
88
89SDL_perl - Simple DirectMedia Layer for Perl
90
91=head1 SYNOPSIS
92
93 use SDL;
94
95=head1 DESCRIPTION
96
97SDL_perl is a package of perl modules that provides both functional and object orient
98interfaces to the Simple DirectMedia Layer for Perl 5. This package does take some
99liberties with the SDL API, and attempts to adhere to the spirit of both the SDL
100and Perl. This document describes the low-level functional SDL_perl API. For the
101object oriented programming interface please see the documentation provided on a
102per class basis.
103
91e7ec4e 104=head1 The SDL Perl 2009 Development Team
105
106=head2 Documentation
107
108 Nick: magnet
109
110=head2 Perl Development
111
112 Nick: Garu
113 Name: Breno G. de Oliveira
114
115 Nick: Dngor
116 Name: Rocco Caputo
117
118 Nick: nferraz
119 Name: Nelson Ferraz
120
121=head2 Maintainance
122
123 Nick: kthakore
124
125 Name: Kartik Thakore
126
127=head1 MacOSX Experimental Usage
128
129Please get libsdl packages from Fink
130
131 perl Build.PL
132 perl Build test
133 perl Build Bundle
134 perl Build install
135
136=head2 Running SDL Perl Scripts in MacOSX
137
138First set the PERL5LIB environment variable to the dependencies of your script
139
140 %export PERL5LIB=$PERL5LIB:./lib
141
142Use the SDLPerl executable made in the bundle and call your scripts
143
144 %SDLPerl.app/Contents/MacOS/SDLPerl yourScript.pl
145
146=head1 Functions exported by SDL.pm
147
bfd90409 148=head2 Init(flags)
149
150As with the C language API, SDL_perl initializes the SDL environment through
151the C<SDL::Init> subroutine. This routine takes a mode flag constructed through
152the bitwise OR product of the following functions:
153
154=over 4
24379be6 155
bfd90409 156=item *
157INIT_AUDIO()
158
159=item *
160INIT_VIDEO()
161
162=item *
163INIT_CDROM()
164
165=item *
166INIT_EVERYTHING()
167
168=item *
169INIT_NOPARACHUTE()
170
171=item *
172INIT_JOYSTICK()
173
174=item *
175INIT_TIMER()
176
177=back
178
179C<SDL::Init> returns 0 on success, or -1 on error.
180
181=head2 GetError()
182
183The last error message set by the SDL library can be retrieved using the subroutine
184C<SDL::GetError>, which returns a scalar containing the text of the message if any.
185
186=head2 Delay(ms)
187
188This subroutine allows an application to delay further operations for atleast a
189number of milliseconds provided as the argument. The actual delay may be longer
190than the specified depending on the underlying OS.
191
192=head2 GetTicks()
193
194An application may retrieve the number of milliseconds expired since the initilization
195of the application through this subroutine. This value resets rougly ever 49 days.
196
197=head2 AddTimer(interval,callback,param)
198
199C<AddTimer> will register a SDL_NewTimerCallback function to be executed after
200C<interval> milliseconds, with parameter C<param>. SDL_NewTimerCallback objects
201can be constructed with the C<NewTimer> subroutine. C<SDL::PerlTimerCallback>
202will return a valid callback for executing a perl subroutine or closure.
203This subroutine returns a SDL_TimerID for the newly registered callback, or NULL
204on error.
205
206=head2 NewTimer(interval,subroutine)
207
208The C<NewTimer> takes an interval in milliseconds and a reference to a subroutine
209to call at that interval. The subroutine will be invoked in a void context
210and accepts no parameters. The callback used is that returned by C<SDL::PerlTimerCallback>.
211C<NewTimer> returns the SDL_TimerID for the new timer or NULL on error.
212
213=head2 RemoveTimer(id)
214
215This subroutine taks a SDL_TimerID and removes it from the list of active callbacks.
216RemoveTimer returns false on failure.
217
218=head2 SetTimer
219
220This subroutine is depreciated, please use C<NewTimer> or C<AddTimer> instead.
221
222=head2 CDNumDrives()
223
224C<SDL::CDNumDrives> returns the number of available CD-ROM drives in the system.
225
226=head2 CDName(drive)
227
228The subroutine C<SDL::CDName> returns the system specific human readable device name
229for the given CD-ROM drive.
230
231=head2 CDOpen(drive)
232
233This subroutine opens a CD-ROM drive for access, returning NULL if the drive is busy
234or otherwise unavailable. On success this subroutine returns a handle to the CD-ROM
235drive.
236
237=head2 CDTrackListing(cd)
238
239C<SDL::CDTrackListing> returns a human readable description of a CD-ROM. For each
240track one line will be produced with the following format:
241
242 Track index: %d, id %d, %2d.%2d
243
244This is provided to ease the creation of human readable descriptions and debugging.
245
246=head2 CDTrackId(track)
247
248C<CDTrackId> returns the id field of the given SDL_CDtrack structure.
249
250=head2 CDTrackType(track)
251
252C<CDTrackType> returns the type field of the given SDL_CDtrack structure.
253
254=head2 CDTrackLength(track)
255
256C<CDTrackLength> returns the length field of the given SDL_CDtrack structure.
257
258=head2 CDTrackOffset(track)
259
260C<CDTrackOffset> returns the offset field of the given SDL_CDtrack structure.
261
262=head2 CDStatus(cd)
263
264The function C<CDStatus> returns the current status of the given SDL_CDrom.
265C<CDStatus>'s return values are:
266
267=over 4
268
269=item *
270CD_TRAYEMPTY
271
272=item *
273CD_PLAYING
274
275=item *
276CD_STOPPED
277
278=item *
279CD_PAUSED
280
281=item *
282CD_ERROR
283
284=back
285
286=head2 CDPlayTracks(cd,track,tracks,frame,frames)
287
288To start playing from an arbitrary portion of a CD, one can provide
289C<SDL::CDPlayTracks> with a CD, a starting track, the number of tracks,
290a starting frame, and the number of frames to be played.
291
292=head2 CDPlay(cd,track,length)
293
294C<SDL::CDPlay> plays the next C<length> tracks starting from C<track>
295
296=head2 CDPause(cd)
297
298This function will pause CD playback until resume is called.
299
300=head2 CDResume(cd)
301
302This function will resume CD playback if paused.
303
304=head2 CDStop(cd)
305
306C<SDL::CDStop> will stop CD playback if playing.
307
308=head2 CDEject(cd)
309
9957e76f 310This function will eject the CD.
bfd90409 311
312=head2 CDClose(cd)
313
314This function will release an opened CD.
315
316=head2 CDNumTracks
317
9957e76f 318This function return the number of tracks on a CD,
319it take a SDL_CD as first parameter.
320
bfd90409 321=head2 CDCurTrack
322
9957e76f 323This function return the number of the current track on a CD,
324it take a SDL_CD as first parameter.
325
bfd90409 326=head2 CDCurFrame
327
9957e76f 328this function return the frame offset within the current track on a CD.
329it take a SDL_CD as first parameter.
330
bfd90409 331=head2 CDTrack
332
9957e76f 333CDtrack stores data on each track on a CD, its fields should be pretty self explainatory.
334CDtrack take a SDL::CD as input and return a SDL_CDTrack.
335
bfd90409 336=head2 PumpEvents
337
4e2f93c3 338Pumps the event loop, gathering events from the input devices.
339
340PumpEvents gathers all the pending input information from devices and places
341it on the event queue.
342Without calls to PumpEvents no events would ever be placed on the queue.
343Often the need for calls to PumpEvents is hidden from the user
344since L</ PollEvent> and WaitEvent implicitly call PumpEvents.
345However, if you are not polling or waiting for events (e.g. you are filtering them),
346then you must call PumpEvents to force an event queue update.
9957e76f 347PumpEvents doesn't return any value and doesn't take any parameters.
4e2f93c3 348
349Note: You can only call this function in the thread that set the video mode.
350
bfd90409 351=head2 NewEvent
352
9957e76f 353Create a new event.It return a SDL::Event.
354
bfd90409 355=head2 FreeEvent
356
9957e76f 357FreeEvent delete the SDL::Event given as first parameter.
358it doesn't return anything.
359
bfd90409 360=head2 PollEvent
361
9957e76f 362Polls for currently pending events.
363If event is not undef, the next event is removed from the queue and returned as a L< SDL::Event>.
364As this function implicitly calls L</ PumpEvents>, you can only call this function in the thread that set the video mode.
365it take a SDL::Event as first parameter.
366
bfd90409 367=head2 WaitEvent
368
9957e76f 369Waits indefinitely for the next available event, returning undef if there was an error while waiting for events,
370a L< SDL::Event> otherwise.
371If event is not NULL, the next event is removed.
372As this function implicitly calls L</ PumpEvents>, you can only call this function in the thread that set the video mode.
373WaitEvent take a SDL::Event as first parameter.
374
bfd90409 375=head2 EventState
376
9957e76f 377This function allows you to set the state of processing certain event types.
378
379it take an event type as first argument, and a state as second.
380
381If state is set to SDL_IGNORE, that event type will be automatically
382dropped from the event queue and will not be filtered.
383If state is set to SDL_ENABLE, that event type will be processed
384normally.
385If state is set to SDL_QUERY, SDL_EventState will return the current
386processing state of the specified event type.
387
388A list of event types can be found in the L</ SDL_Event section>.
389
390it returns a state(?).
391
bfd90409 392=head2 IGNORE
393
394=head2 ENABLE
395
396=head2 QUERY
397
398=head2 ACTIVEEVENT
399
400=head2 KEYDOWN
401
402=head2 KEYUP
403
404=head2 MOUSEMOTION
405
406=head2 MOUSEBUTTONDOWN
407
408=head2 MOUSEBUTTONUP
409
410=head2 QUIT
411
412=head2 SYSWMEVENT
413
414=head2 EventType
415
9957e76f 416EventType return the type of the SDL::Event given as first parameter.
417
bfd90409 418=head2 ActiveEventGain
419
9957e76f 420ActiveEventGain return the active gain from the SDL::Event given as first parameter.
421see L</ SDL::Event> for more informations about the active state.
422
bfd90409 423=head2 ActiveEventState
424
9957e76f 425ActiveEventState return the active state from the SDL::Event given as first parameter.
426see L</ SDL::Event> for more informations about the active state.
427
bfd90409 428=head2 APPMOUSEFOCUS
429
430=head2 APPINPUTFOCUS
431
432=head2 APPACTIVE
433
434=head2 KeyEventState
435
9957e76f 436KeyEventState return the active key state from the SDL::Event given as first parameter.
437see L</ SDL::Event> for me more informations about the active key.
438
bfd90409 439=head2 SDLK_BACKSPACE
440
441=head2 SDLK_TAB
442
443=head2 SDLK_CLEAR
444
445=head2 SDLK_RETURN
446
447=head2 SDLK_PAUSE
448
449=head2 SDLK_ESCAPE
450
451=head2 SDLK_SPACE
452
453=head2 SDLK_EXCLAIM
454
455=head2 SDLK_QUOTEDBL
456
457=head2 SDLK_HASH
458
459=head2 SDLK_DOLLAR
460
461=head2 SDLK_AMPERSAND
462
463=head2 SDLK_QUOTE
464
465=head2 SDLK_LEFTPAREN
466
467=head2 SDLK_RIGHTPAREN
468
469=head2 SDLK_ASTERISK
470
471=head2 SDLK_PLUS
472
473=head2 SDLK_COMMA
474
475=head2 SDLK_MINUS
476
477=head2 SDLK_PERIOD
478
479=head2 SDLK_SLASH
480
481=head2 SDLK_0
482
483=head2 SDLK_1
484
485=head2 SDLK_2
486
487=head2 SDLK_3
488
489=head2 SDLK_4
490
491=head2 SDLK_5
492
493=head2 SDLK_6
494
495=head2 SDLK_7
496
497=head2 SDLK_8
498
499=head2 SDLK_9
500
501=head2 SDLK_COLON
502
503=head2 SDLK_SEMICOLON
504
505=head2 SDLK_LESS
506
507=head2 SDLK_EQUALS
508
509=head2 SDLK_GREATER
510
511=head2 SDLK_QUESTION
512
513=head2 SDLK_AT
514
515=head2 SDLK_LEFTBRACKET
516
517=head2 SDLK_BACKSLASH
518
519=head2 SDLK_RIGHTBRACKET
520
521=head2 SDLK_CARET
522
523=head2 SDLK_UNDERSCORE
524
525=head2 SDLK_BACKQUOTE
526
527=head2 SDLK_a
528
529=head2 SDLK_b
530
531=head2 SDLK_c
532
533=head2 SDLK_d
534
535=head2 SDLK_e
536
537=head2 SDLK_f
538
539=head2 SDLK_g
540
541=head2 SDLK_h
542
543=head2 SDLK_i
544
545=head2 SDLK_j
546
547=head2 SDLK_k
548
549=head2 SDLK_l
550
551=head2 SDLK_m
552
553=head2 SDLK_n
554
555=head2 SDLK_o
556
557=head2 SDLK_p
558
559=head2 SDLK_q
560
561=head2 SDLK_r
562
563=head2 SDLK_s
564
565=head2 SDLK_t
566
567=head2 SDLK_u
568
569=head2 SDLK_v
570
571=head2 SDLK_w
572
573=head2 SDLK_x
574
575=head2 SDLK_y
576
577=head2 SDLK_z
578
579=head2 SDLK_DELETE
580
581=head2 SDLK_KP0
582
583=head2 SDLK_KP1
584
585=head2 SDLK_KP2
586
587=head2 SDLK_KP3
588
589=head2 SDLK_KP4
590
591=head2 SDLK_KP5
592
593=head2 SDLK_KP6
594
595=head2 SDLK_KP7
596
597=head2 SDLK_KP8
598
599=head2 SDLK_KP9
600
601=head2 SDLK_KP_PERIOD
602
603=head2 SDLK_KP_DIVIDE
604
605=head2 SDLK_KP_MULTIPLY
606
607=head2 SDLK_KP_MINUS
608
609=head2 SDLK_KP_PLUS
610
611=head2 SDLK_KP_ENTER
612
613=head2 SDLK_KP_EQUALS
614
615=head2 SDLK_UP
616
617=head2 SDLK_DOWN
618
619=head2 SDLK_RIGHT
620
621=head2 SDLK_LEFT
622
623=head2 SDLK_INSERT
624
625=head2 SDLK_HOME
626
627=head2 SDLK_END
628
629=head2 SDLK_PAGEUP
630
631=head2 SDLK_PAGEDOWN
632
633=head2 SDLK_F1
634
635=head2 SDLK_F2
636
637=head2 SDLK_F3
638
639=head2 SDLK_F4
640
641=head2 SDLK_F5
642
643=head2 SDLK_F6
644
645=head2 SDLK_F7
646
647=head2 SDLK_F8
648
649=head2 SDLK_F9
650
651=head2 SDLK_F10
652
653=head2 SDLK_F11
654
655=head2 SDLK_F12
656
657=head2 SDLK_F13
658
659=head2 SDLK_F14
660
661=head2 SDLK_F15
662
663=head2 SDLK_NUMLOCK
664
665=head2 SDLK_CAPSLOCK
666
667=head2 SDLK_SCROLLOCK
668
669=head2 SDLK_RSHIFT
670
671=head2 SDLK_LSHIFT
672
673=head2 SDLK_RCTRL
674
675=head2 SDLK_LCTRL
676
677=head2 SDLK_RALT
678
679=head2 SDLK_LALT
680
681=head2 SDLK_RMETA
682
683=head2 SDLK_LMETA
684
685=head2 SDLK_LSUPER
686
687=head2 SDLK_RSUPER
688
689=head2 SDLK_MODE
690
691=head2 SDLK_HELP
692
693=head2 SDLK_PRINT
694
695=head2 SDLK_SYSREQ
696
697=head2 SDLK_BREAK
698
699=head2 SDLK_MENU
700
701=head2 SDLK_POWER
702
703=head2 SDLK_EURO
704
705=head2 KMOD_NONE
706
707=head2 KMOD_NUM
708
709=head2 KMOD_CAPS
710
711=head2 KMOD_LCTRL
712
713=head2 KMOD_RCTRL
714
715=head2 KMOD_RSHIFT
716
717=head2 KMOD_LSHIFT
718
719=head2 KMOD_RALT
720
721=head2 KMOD_LALT
722
723=head2 KMOD_CTRL
724
725=head2 KMOD_SHIFT
726
727=head2 KMOD_ALT
728
729=head2 KeyEventSym
730
9957e76f 731KeyEventSym return the key pressed/released information from the SDL::Event given as first parameter.
732see L</ SDL::Event> for more informations about the keyboard events.
733
bfd90409 734=head2 KeyEventMod
735
9957e76f 736KeyEventMod return the mod keys pressed information from the SDL::Event given as first parameter.
737see L</ SDL::Event> for more informations about the keyboard events.
738
bfd90409 739=head2 KeyEventUnicode
740
9957e76f 741KeyEventMod return the unicode translated keys pressed/released information from the SDL::Event given as first parameter.
742see L</ SDL::Event> for more informations about the keyboard events.
743
bfd90409 744=head2 KeyEventScanCode
745
746=head2 MouseMotionState
747
748=head2 MouseMotionX
749
750=head2 MouseMotionY
751
752=head2 MouseMotionXrel
753
754=head2 MouseMotionYrel
755
756=head2 MouseButtonState
757
758=head2 MouseButton
759
760=head2 MouseButtonX
761
762=head2 MouseButtonY
763
764=head2 SysWMEventMsg
765
766=head2 EnableUnicode
767
768=head2 EnableKeyRepeat
769
770=head2 GetKeyName
771
772=head2 PRESSED
773
774=head2 RELEASED
775
776=head2 CreateRGBSurface
777
778=head2 CreateRGBSurfaceFrom
779
780=head2 IMG_Load
781
782=head2 FreeSurface
783
784=head2 SurfacePalette
785
786=head2 SurfaceBitsPerPixel
787
4e2f93c3 788=head2 SurfaceBy