Added lock and unlock surface for SDL::Video and added tests
[sdlgit/SDL_perl.git] / src / Core / Video.xs
index 6e318e7..87b348c 100644 (file)
@@ -8,6 +8,30 @@
 
 #include <SDL.h>
 
+
+static Uint16* av_to_uint16 (AV* av)
+{
+       int len = av_len(av);
+       if( len != -1)
+       {
+       int i;
+       Uint16* table = (Uint16 *)safemalloc(sizeof(Uint16)*(len));
+       for ( i = 0; i < len+1 ; i++ ){ 
+               SV ** temp = av_fetch(av,i,0);
+             if( temp != NULL)
+               {
+                       table[i] =  (Uint16 *) SvIV(  *temp   );
+               }
+               else { table[i] =0; }
+
+       }
+       return table;
+       }
+       return NULL;
+}
+
+
+
 MODULE = SDL::Video    PACKAGE = SDL::Video    PREFIX = video_
 
 =for documentation
@@ -136,3 +160,123 @@ video_flip ( surface )
        OUTPUT:
                RETVAL
 
+int
+video_set_colors ( surface, start, ... )
+       SDL_Surface *surface
+       int start
+       CODE:
+               SDL_Color *colors,*temp;
+               int i, length;
+               if ( items < 3 ) { RETVAL = 0;}
+               else
+               {
+               length = items - 2;
+               colors = (SDL_Color *)safemalloc(sizeof(SDL_Color)*(length+1));
+               for ( i = 0; i < length ; i++ ) {
+                       temp = (SDL_Color *)SvIV(ST(i+2));
+                       colors[i].r = temp->r;
+                       colors[i].g = temp->g;
+                       colors[i].b = temp->b;
+               }
+               RETVAL = SDL_SetColors(surface, colors, start, length );
+               safefree(colors);
+               }       
+
+       OUTPUT: 
+               RETVAL
+
+int
+video_set_palette ( surface, flags, start, ... )
+       SDL_Surface *surface
+       int flags
+       int start
+
+       CODE:
+               SDL_Color *colors,*temp;
+               int i, length;
+               if ( items < 4 ) { 
+               RETVAL = 0;
+                       }
+               else
+               {               
+               length = items - 3;
+               colors = (SDL_Color *)safemalloc(sizeof(SDL_Color)*(length+1));
+               for ( i = 0; i < length ; i++ ){ 
+                       temp = (SDL_Color *)SvIV(ST(i+3));
+                       colors[i].r = temp->r;
+                       colors[i].g = temp->g;
+                       colors[i].b = temp->b;
+               }
+               RETVAL = SDL_SetPalette(surface, flags, colors, start, length );
+               safefree(colors);
+               }
+       OUTPUT: 
+               RETVAL
+
+int
+video_set_gamma(r, g, b)
+       float r;
+       float g;
+       float b;
+       CODE:
+               RETVAL = SDL_SetGamma(r,g,b);
+       OUTPUT: 
+               RETVAL
+
+       
+int
+video_set_gamma_ramp( rt, gt, bt )
+       AV* rt;
+       AV* gt;
+       AV* bt;
+       CODE:
+               Uint16 *redtable, *greentable, *bluetable;
+               redtable = av_to_uint16(rt);
+               greentable = av_to_uint16(gt);
+               bluetable = av_to_uint16(bt);
+               RETVAL =  SDL_SetGammaRamp(redtable, greentable, bluetable);
+               if( redtable != NULL) { safefree(redtable); }
+               if( greentable != NULL) { safefree(greentable); }
+               if( bluetable != NULL) { safefree(bluetable); } 
+       OUTPUT:
+               RETVAL 
+
+
+
+Uint32
+video_map_RGB ( pixel_format, r, g, b )
+       SDL_PixelFormat *pixel_format
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       CODE:
+               RETVAL = SDL_MapRGB(pixel_format,r,g,b);
+       OUTPUT:
+               RETVAL
+
+Uint32
+video_map_RGBA ( pixel_format, r, g, b, a )
+       SDL_PixelFormat *pixel_format
+       Uint8 r
+       Uint8 g
+       Uint8 b 
+       Uint8 a
+       CODE:
+               RETVAL = SDL_MapRGB(pixel_format,r,g,b);
+       OUTPUT:
+               RETVAL
+
+int
+video_lock_surface ( surface )
+       SDL_Surface *surface
+       CODE:
+               RETVAL = SDL_LockSurface(surface);
+       OUTPUT:
+               RETVAL
+
+void
+video_unlock_surface ( surface )
+       SDL_Surface *surface
+       CODE:
+               SDL_UnlockSurface(surface);
+