Moved old SDL::Palette to SDL::Game::Palette.
Kartik Thakore [Mon, 26 Oct 2009 23:00:53 +0000 (19:00 -0400)]
Made palette() a method of SDL::PixelFormat.
Added tests for SDL::Palette.

lib/SDL/Game/Palette.pm [new file with mode: 0644]
lib/SDL/Palette.pm
lib/SDL/PixelFormat.pm
src/Core/objects/Palette.xs
src/Core/objects/PixelFormat.xs
t/core_palette.t [new file with mode: 0644]
t/palettepm.t

diff --git a/lib/SDL/Game/Palette.pm b/lib/SDL/Game/Palette.pm
new file mode 100644 (file)
index 0000000..b8fb578
--- /dev/null
@@ -0,0 +1,164 @@
+#!/usr/bin/env perl
+#
+# Palette.pm
+#
+# Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
+#
+# ------------------------------------------------------------------------------
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+# 
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+# 
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# ------------------------------------------------------------------------------
+#
+# Please feel free to send questions, suggestions or improvements to:
+#
+#      David J. Goehrig
+#      dgoehrig@cpan.org
+#
+
+# NB: there is no palette destructor because most of the time the 
+# palette will be owned by a surface, so any palettes you create 
+# with new, won't be destroyed until the program ends!
+
+package SDL::Game::Palette;
+use strict;
+use warnings;
+use Carp;
+
+# NB: there is no palette destructor because most of the time the 
+# palette will be owned by a surface, so any palettes you create 
+# with new, won't be destroyed until the program ends!
+
+sub new {
+       my $proto = shift;
+       my $class = ref($proto) || $proto;
+       my $image;
+       my $self;
+       if (@_) { 
+               $image = shift;
+               $self = \$image->palette(); 
+       } else { 
+               $self = \SDL::NewPalette(256); 
+       }
+       croak SDL::GetError() unless $$self;
+       bless $self, $class;
+       return $self;
+}
+
+sub size {
+       my $self = shift;
+       return SDL::PaletteNColors($$self);
+}
+
+sub color {
+       my $self = shift;
+       my $index = shift;
+       my ($r,$g,$b);
+       if (@_) { 
+               $r = shift; $g = shift; $b = shift; 
+               return SDL::PaletteColors($$self,$index,$r,$g,$b);
+       } else {
+               return SDL::PaletteColors($$self,$index);
+       }
+}
+
+sub red {
+       my $self = shift;
+       my $index = shift;
+       my $c;
+       if (@_) {
+               $c = shift;
+               return SDL::ColorR(
+                       SDL::PaletteColors($$self,$index),$c);
+       } else {        
+               return SDL::ColorR(
+                       SDL::PaletteColors($$self,$index));
+       }
+}
+
+sub green {
+       my $self = shift;
+       my $index = shift;
+       my $c;
+       if (@_) {
+               $c = shift;
+               return SDL::ColorG(
+                       SDL::PaletteColors($$self,$index),$c);
+       } else {        
+               return SDL::ColorG(
+                       SDL::PaletteColors($$self,$index));
+       }
+}
+
+sub blue {
+       my $self = shift;
+       my $index = shift;
+       my $c;
+       if (@_) {
+               $c = shift;
+               return SDL::ColorB(
+                       SDL::PaletteColors($$self,$index),$c);
+       } else {        
+               return SDL::ColorB(
+                       SDL::PaletteColors($$self,$index));
+       }
+}
+
+1;
+
+__END__;
+
+=pod
+
+=head1 NAME
+
+SDL::Palette - a perl extension
+
+=head1 DESCRIPTION
+
+L<SDL::Palette> provides an interface to the SDL_Palette structures,
+and can be used to set the color values of an existing palette's indexes.
+
+=head1 METHODS
+
+=head2 blue ( index, [value] )
+
+Fetches and sets the blue component of the color at index.
+
+=head2 green ( index, [value] )
+
+Fetches and sets the green component of the color at index.
+
+=head2 red ( index, [value] )
+
+Fetches and sets the red component of the color at index.
+
+=head2 color ( index, [ r, g, b ] )
+
+Fetches and sets the RGB, returns an SDL_Color *.
+
+=head2 size
+
+Returns the size of the palette.
+
+=head1 AUTHOR
+
+David J. Goehrig
+
+=head1 SEE ALSO
+
+L<perl> L<SDL::Color> L<SDL::Surface>
+
+=cut
index df99f3f..9d3040a 100644 (file)
-#!/usr/bin/env perl
-#
-# Palette.pm
-#
-# Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
-#
-# ------------------------------------------------------------------------------
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-# 
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-#
-# ------------------------------------------------------------------------------
-#
-# Please feel free to send questions, suggestions or improvements to:
-#
-#      David J. Goehrig
-#      dgoehrig@cpan.org
-#
-
-# NB: there is no palette destructor because most of the time the 
-# palette will be owned by a surface, so any palettes you create 
-# with new, won't be destroyed until the program ends!
-
+#!perl
 package SDL::Palette;
 use strict;
 use warnings;
-use Carp;
-
-# NB: there is no palette destructor because most of the time the 
-# palette will be owned by a surface, so any palettes you create 
-# with new, won't be destroyed until the program ends!
-
-sub new {
-       my $proto = shift;
-       my $class = ref($proto) || $proto;
-       my $image;
-       my $self;
-       if (@_) { 
-               $image = shift;
-               $self = \$image->palette(); 
-       } else { 
-               $self = \SDL::NewPalette(256); 
-       }
-       croak SDL::GetError() unless $$self;
-       bless $self, $class;
-       return $self;
-}
-
-sub size {
-       my $self = shift;
-       return SDL::PaletteNColors($$self);
-}
-
-sub color {
-       my $self = shift;
-       my $index = shift;
-       my ($r,$g,$b);
-       if (@_) { 
-               $r = shift; $g = shift; $b = shift; 
-               return SDL::PaletteColors($$self,$index,$r,$g,$b);
-       } else {
-               return SDL::PaletteColors($$self,$index);
-       }
-}
-
-sub red {
-       my $self = shift;
-       my $index = shift;
-       my $c;
-       if (@_) {
-               $c = shift;
-               return SDL::ColorR(
-                       SDL::PaletteColors($$self,$index),$c);
-       } else {        
-               return SDL::ColorR(
-                       SDL::PaletteColors($$self,$index));
-       }
-}
-
-sub green {
-       my $self = shift;
-       my $index = shift;
-       my $c;
-       if (@_) {
-               $c = shift;
-               return SDL::ColorG(
-                       SDL::PaletteColors($$self,$index),$c);
-       } else {        
-               return SDL::ColorG(
-                       SDL::PaletteColors($$self,$index));
-       }
-}
-
-sub blue {
-       my $self = shift;
-       my $index = shift;
-       my $c;
-       if (@_) {
-               $c = shift;
-               return SDL::ColorB(
-                       SDL::PaletteColors($$self,$index),$c);
-       } else {        
-               return SDL::ColorB(
-                       SDL::PaletteColors($$self,$index));
-       }
-}
+require Exporter;
+require DynaLoader;
+our @ISA = qw(Exporter DynaLoader);
+bootstrap SDL::Palette;
 
 1;
 
-__END__;
+__END__
 
 =pod
 
@@ -128,37 +19,30 @@ SDL::Palette - a perl extension
 
 =head1 DESCRIPTION
 
-L<SDL::Palette> provides an interface to the SDL_Palette structures,
+L<SDL::Palette> provides an interface to the C<SDL_Palette> structures,
 and can be used to set the color values of an existing palette's indexes.
 
 =head1 METHODS
 
-=head2 blue ( index, [value] )
-
-Fetches and sets the blue component of the color at index.
+=head2 ncolors ( )
 
-=head2 green ( index, [value] )
+Fetches the number of colors in palette
 
-Fetches and sets the green component of the color at index.
+=head2 colors ( index )
 
-=head2 red ( index, [value] )
+Fetches an array of colors in palette
 
-Fetches and sets the red component of the color at index.
+=head2 color_index ( index )
 
-=head2 color ( index, [ r, g, b ] )
-
-Fetches and sets the RGB, returns an SDL_Color *.
+Fetches the SDL_Color at the provide index in palette
 
 =head2 size
 
 Returns the size of the palette.
 
-=head1 AUTHOR
-
-David J. Goehrig
 
 =head1 SEE ALSO
 
-L<perl> L<SDL::Color> L<SDL::Surface>
+L<SDL::Color> L<SDL::Surface>
 
 =cut
index 4795c43..a69f3d2 100644 (file)
@@ -30,6 +30,11 @@ An C<SDL::PixelFormat > stores surface format information
 
 =head1 METHODS
 
+=head2  palette
+
+       $surface->format->palette;
+
+Returns the C<SDL_Palette> and L<SDL::Palette> of the format of the surface.
 
 =head2  BitsPerPixel 
 
index 3177b02..ce69ba2 100644 (file)
@@ -46,7 +46,7 @@ palette_colors ( palette )
 
 
 SDL_Color *
-palette_colors_index ( palette, index )
+palette_color_index ( palette, index )
        SDL_Palette *palette
        int index
        PREINIT:
index 76ab6d1..a463c3d 100644 (file)
@@ -27,6 +27,17 @@ SDL_PixelFormat -- Stores surface format information
 
 =cut
 
+SDL_Palette*
+pixelformat_palette( pixelformat )
+       SDL_PixelFormat *pixelformat
+       PREINIT:
+               char* CLASS = "SDL::Palette";
+       CODE:
+               RETVAL = pixelformat->palette;
+       OUTPUT:
+               RETVAL
+
+
 Uint8
 pixelformat_BitsPerPixel( pixelformat )
        SDL_PixelFormat *pixelformat
diff --git a/t/core_palette.t b/t/core_palette.t
new file mode 100644 (file)
index 0000000..a3a16ff
--- /dev/null
@@ -0,0 +1,31 @@
+#!perl
+use strict;
+use warnings;
+use Test::More tests => 999999999;
+use_ok('SDL::Palette');
+
+can_ok('SDL::Palette', qw/ ncolors colors color_index /); 
+
+use SDL;
+use SDL::Surface;
+use SDL::PixelFormat;
+
+SDL::Init(SDL_INIT_VIDEO);
+
+my $display = SDL::SetVideoMode(640,480,32, SDL_SWSURFACE );
+
+isa_ok($display->format, 'SDL::PixelFormat', 'Are we a SDL::PixelFormat?');
+
+is( !defined $display->format->palette , 1, 'Palette is not defined as BitPerPixels is greater then 8');
+
+$display = SDL::SetVideoMode(640,480,8, SDL_SWSURFACE );
+isa_ok($display->format, 'SDL::PixelFormat', 'Are we a SDL::PixelFormat?');
+
+isa_ok( $display->format->palette , 'SDL::Palette', 'Palette is SDL::Palette when BitPerPixels is 8 ');
+
+is( $display->format->palette->ncolors, 256, '256 colors in palette');
+
+isa_ok( $display->format->palette->colors(), 'ARRAY', 'Palette->colors[x] is a color');
+
+isa_ok( $display->format->palette->color_index(23), 'SDL::Color', 'Palette->color_index() is a SDL::Color');
+
index 3cc9cfc..e4ab803 100644 (file)
@@ -41,9 +41,9 @@ use Test::More;
 
 plan ( tests => 2 );
 
-use_ok( 'SDL::Palette' ); 
+use_ok( 'SDL::Game::Palette' ); 
   
-can_ok ('SDL::Palette', qw/
+can_ok ('SDL::Game::Palette', qw/
        new
        size
        red