Move update_rects out of Surface.xs and make SDL::UpdateRects work
[sdlgit/SDL_perl.git] / src / SDL.xs
index f6660fa..aa949e0 100644 (file)
@@ -858,22 +858,22 @@ GetKeyName ( sym )
        OUTPUT:
                RETVAL
 
+#ifdef HAVE_SDL_IMAGE
+
 SDL_Surface *
-CreateRGBSurface (flags, width, height, depth, Rmask, Gmask, Bmask, Amask )
-       Uint32 flags
-       int width
-       int height
-       int depth
-       Uint32 Rmask
-       Uint32 Gmask
-       Uint32 Bmask
-       Uint32 Amask
+IMG_Load ( filename )
+       char *filename
        CODE:
-               RETVAL = SDL_CreateRGBSurface ( flags, width, height,
-                               depth, Rmask, Gmask, Bmask, Amask );
-       OUTPUT: 
+               char* CLASS = "SDL::Surface";
+               RETVAL = IMG_Load(filename);
+       OUTPUT:
                RETVAL
 
+#endif
+
+=for comment
+
+Comment out for now as it does not compile
 
 SDL_Surface *
 CreateRGBSurfaceFrom (pixels, width, height, depth, pitch, Rmask, Gmask, Bmask, Amask )
@@ -896,18 +896,6 @@ CreateRGBSurfaceFrom (pixels, width, height, depth, pitch, Rmask, Gmask, Bmask,
        OUTPUT: 
                RETVAL
 
-#ifdef HAVE_SDL_IMAGE
-
-SDL_Surface *
-IMGLoad ( fname )
-       char *fname
-       CODE:
-               RETVAL = IMG_Load(fname);
-       OUTPUT:
-               RETVAL
-
-#endif
-
 SDL_Surface*
 SurfaceCopy ( surface )
        SDL_Surface *surface
@@ -1079,6 +1067,12 @@ SurfacePixels ( surface )
        OUTPUT:
                RETVAL
 
+=cut
+
+=for comment
+
+Comment out for now as it does not compile
+
 SDL_Color*
 SurfacePixel ( surface, x, y, ... )
        SDL_Surface *surface
@@ -1172,6 +1166,7 @@ GetVideoSurface ()
        OUTPUT:
                RETVAL
 
+=cut
 
 HV *
 VideoInfo ()
@@ -1205,63 +1200,6 @@ VideoInfo ()
        OUTPUT:
                RETVAL
 
-SDL_Rect *
-NewRect ( x, y, w, h )
-       Sint16 x
-       Sint16 y
-       Uint16 w
-       Uint16 h
-       CODE:
-               RETVAL = (SDL_Rect *) safemalloc (sizeof(SDL_Rect));
-               RETVAL->x = x;
-               RETVAL->y = y;
-               RETVAL->w = w;
-               RETVAL->h = h;
-       OUTPUT:
-               RETVAL
-
-void
-FreeRect ( rect )
-       SDL_Rect *rect
-       CODE:
-               safefree(rect);
-
-Sint16
-RectX ( rect, ... )
-       SDL_Rect *rect
-       CODE:
-               if (items > 1 ) rect->x = SvIV(ST(1)); 
-               RETVAL = rect->x;
-       OUTPUT:
-               RETVAL
-
-Sint16
-RectY ( rect, ... )
-       SDL_Rect *rect
-       CODE:
-               if (items > 1 ) rect->y = SvIV(ST(1)); 
-               RETVAL = rect->y;
-       OUTPUT:
-               RETVAL
-
-Uint16
-RectW ( rect, ... )
-       SDL_Rect *rect
-       CODE:
-               if (items > 1 ) rect->w = SvIV(ST(1)); 
-               RETVAL = rect->w;
-       OUTPUT:
-               RETVAL
-
-Uint16
-RectH ( rect, ... )
-       SDL_Rect *rect
-       CODE:
-               if (items > 1 ) rect->h = SvIV(ST(1)); 
-               RETVAL = rect->h;
-       OUTPUT:
-               RETVAL
-
 AV*
 ListModes ( format, flags )
        Uint32 flags
@@ -1282,73 +1220,117 @@ ListModes ( format, flags )
        OUTPUT:
                RETVAL
 
+SDL_Palette *
+NewPalette ( number )
+       int number
+       CODE:
+               RETVAL = (SDL_Palette *)safemalloc(sizeof(SDL_Palette));
+               RETVAL->colors = (SDL_Color *)safemalloc(number * 
+                                               sizeof(SDL_Color));
+               RETVAL->ncolors = number;
+       OUTPUT:
+               RETVAL
 
-SDL_Color *
-NewColor ( r, g, b )
-       Uint8 r
-       Uint8 g
-       Uint8 b
+int
+PaletteNColors ( palette, ... )
+       SDL_Palette *palette
        CODE:
-               RETVAL = (SDL_Color *) safemalloc(sizeof(SDL_Color));
-               RETVAL->r = r;
-               RETVAL->g = g;
-               RETVAL->b = b;
+               if ( items > 1 ) palette->ncolors = SvIV(ST(1));
+               RETVAL = palette->ncolors;
        OUTPUT:
                RETVAL
 
-Uint8
-ColorR ( color, ... )
-       SDL_Color *color
+SDL_Surface *
+SetVideoMode ( width, height, bpp, flags )
+
+       int width
+       int height
+       int bpp
+       Uint32 flags
+
        CODE:
-               if (items > 1 ) color->r = SvIV(ST(1)); 
-               RETVAL = color->r;
+               char *CLASS = "SDL::Surface";
+               RETVAL = SDL_SetVideoMode(width,height,bpp,flags);
        OUTPUT:
                RETVAL
 
-Uint8
-ColorG ( color, ... )
-       SDL_Color *color
+int
+Flip ( surface )
+       SDL_Surface *surface
        CODE:
-               if (items > 1 ) color->g = SvIV(ST(1)); 
-               RETVAL = color->g;
+               RETVAL = SDL_Flip(surface);
        OUTPUT:
                RETVAL
 
-Uint8
-ColorB ( color, ... )
-       SDL_Color *color
+int
+BlitSurface ( src, src_rect, dest, dest_rect )
+       SDL_Surface *src
+       SDL_Surface *dest
+       SDL_Rect *src_rect
+       SDL_Rect *dest_rect
        CODE:
-               if (items > 1 ) color->b = SvIV(ST(1)); 
-               RETVAL = color->b;
+               RETVAL = SDL_BlitSurface(src,src_rect,dest,dest_rect);
+       OUTPUT:
+               RETVAL
+
+Uint32
+MapRGB ( 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
 
 void
-FreeColor ( color )
-       SDL_Color *color
+UpdateRect ( surface, x, y, w ,h )
+       SDL_Surface *surface
+       int x
+       int y
+       int w
+       int h
        CODE:
-               return; safefree(color);
+               SDL_UpdateRect(surface,x,y,w,h);
 
-SDL_Palette *
-NewPalette ( number )
-       int number
+SDL_Surface *
+DisplayFormat ( surface )
+       SDL_Surface *surface
        CODE:
-               RETVAL = (SDL_Palette *)safemalloc(sizeof(SDL_Palette));
-               RETVAL->colors = (SDL_Color *)safemalloc(number * 
-                                               sizeof(SDL_Color));
-               RETVAL->ncolors = number;
+               char* CLASS = "SDL::Surface";
+               RETVAL = SDL_DisplayFormat(surface);
        OUTPUT:
                RETVAL
 
-int
-PaletteNColors ( palette, ... )
-       SDL_Palette *palette
+SDL_Surface *
+DisplayFormatAlpha ( surface )
+       SDL_Surface *surface
        CODE:
-               if ( items > 1 ) palette->ncolors = SvIV(ST(1));
-               RETVAL = palette->ncolors;
+               char* CLASS = "SDL::Surface";
+               RETVAL = SDL_DisplayFormatAlpha(surface);
        OUTPUT:
                RETVAL
 
+void
+UpdateRects ( surface, ... )
+       SDL_Surface *surface
+       CODE:
+               SDL_Rect *rects;
+               int num_rects,i;
+               if ( items < 2 ) return;
+               num_rects = items - 1;
+               rects = (SDL_Rect *)safemalloc(sizeof(SDL_Rect)*items);
+               for(i=0;i<num_rects;i++) {
+                       rects[i] = *(SDL_Rect *)SvIV((SV*)SvRV( ST(i + 1) ));
+               }
+               SDL_UpdateRects(surface,num_rects,rects);
+               safefree(rects);
+
+=for comment
+
+Comment out for now as it does not compile
+
 SDL_Color *
 PaletteColors ( palette, index, ... )
        SDL_Palette *palette
@@ -1363,6 +1345,8 @@ PaletteColors ( palette, index, ... )
        OUTPUT:
                RETVAL
 
+
+
 int
 VideoModeOK ( width, height, bpp, flags )
        int width
@@ -1385,35 +1369,6 @@ SetVideoMode ( width, height, bpp, flags )
        OUTPUT:
                RETVAL
 
-void
-UpdateRect ( surface, x, y, w ,h )
-       SDL_Surface *surface
-       int x
-       int y
-       int w
-       int h
-       CODE:
-               SDL_UpdateRect(surface,x,y,w,h);
-
-void
-UpdateRects ( surface, ... )
-       SDL_Surface *surface
-       CODE:
-               SDL_Rect *rects, *temp;
-               int num_rects,i;
-               if ( items < 2 ) return;
-               num_rects = items - 1;  
-               rects = (SDL_Rect *)safemalloc(sizeof(SDL_Rect)*items);
-               for(i=0;i<num_rects;i++) {
-                       temp = (SDL_Rect *)SvIV(ST(i+1));
-                       rects[i].x = temp->x;
-                       rects[i].y = temp->y;
-                       rects[i].w = temp->w;
-                       rects[i].h = temp->h;
-               } 
-               SDL_UpdateRects(surface,num_rects,rects);
-               safefree(rects);
-
 int
 Flip ( surface )
        SDL_Surface *surface
@@ -1445,17 +1400,6 @@ all_done:
                RETVAL
 
 Uint32
-MapRGB ( surface, r, g, b )
-       SDL_Surface *surface
-       Uint8 r
-       Uint8 g
-       Uint8 b
-       CODE:
-               RETVAL = SDL_MapRGB(surface->format,r,g,b);
-       OUTPUT:
-               RETVAL
-
-Uint32
 MapRGBA ( surface, r, g, b, a )
        SDL_Surface *surface
        Uint8 r
@@ -1526,22 +1470,6 @@ SetAlpha ( surface, flag, alpha )
        OUTPUT:
                RETVAL
 
-SDL_Surface *
-DisplayFormat ( surface )
-       SDL_Surface *surface
-       CODE:
-               RETVAL = SDL_DisplayFormat(surface);
-       OUTPUT:
-               RETVAL
-
-SDL_Surface*
-DisplayFormatAlpha ( surface )
-       SDL_Surface *surface
-       CODE:
-               RETVAL = SDL_DisplayFormatAlpha(surface);
-       OUTPUT:
-               RETVAL
-
 SDL_Surface*
 ConvertRGB ( surface )
        SDL_Surface * surface
@@ -1594,24 +1522,14 @@ ConvertRGBA ( surface )
        OUTPUT:
                RETVAL
 
-int
-BlitSurface ( src, src_rect, dest, dest_rect )
-       SDL_Surface *src
-       SDL_Rect *src_rect
-       SDL_Surface *dest
-       SDL_Rect *dest_rect
-       CODE:
-               RETVAL = SDL_BlitSurface(src,src_rect,dest,dest_rect);
-       OUTPUT:
-               RETVAL
+=cut
 
 int
-FillRect ( dest, dest_rect, color )
+FillRect ( dest, dest_rect, pixel )
        SDL_Surface *dest
        SDL_Rect *dest_rect
-       SDL_Color *color
+       Uint32 pixel
        CODE:
-               Uint32 pixel = SDL_MapRGB(dest->format,color->r,color->g,color->b);
                RETVAL = SDL_FillRect(dest,dest_rect,pixel);
        OUTPUT:
                RETVAL
@@ -2235,6 +2153,15 @@ MixPlayingMusic()
        OUTPUT:
                RETVAL
 
+int
+MixSetPanning ( channel, left, right )
+       int channel
+       int left
+       int right
+       CODE:
+               RETVAL = Mix_SetPanning(channel, left, right);
+       OUTPUT:
+               RETVAL
 
 void
 MixCloseAudio ()
@@ -2526,14 +2453,12 @@ SetClipRect ( surface, rect )
        CODE:
                SDL_SetClipRect(surface,rect);
        
-SDL_Rect*
-GetClipRect ( surface )
+void
+GetClipRect ( surface, rect )
        SDL_Surface *surface
+       SDL_Rect *rect;
        CODE:
-               RETVAL = (SDL_Rect*) safemalloc(sizeof(SDL_Rect));
-               SDL_GetClipRect(surface,RETVAL);
-       OUTPUT:
-               RETVAL
+               SDL_GetClipRect(surface, rect);
 
 
 #ifdef HAVE_SDL_NET
@@ -2964,9 +2889,19 @@ TTFSizeText ( font, text )
        CODE:
                int w,h;
                RETVAL = newAV();
-               TTF_SizeText(font,text,&w,&h);
-               av_push(RETVAL,newSViv(w));
-               av_push(RETVAL,newSViv(h));
+               if(TTF_SizeText(font,text,&w,&h))
+               {
+                       printf("TTF error at TTFSizeText: %s \n", TTF_GetError());
+                       Perl_croak (aTHX_ "TTF error \n");
+               }
+               else
+               {
+                       av_push(RETVAL,newSViv(w));
+                       av_push(RETVAL,newSViv(h));
+                       sv_2mortal((SV*)RETVAL);
+               }
+               
+       
        OUTPUT:
                RETVAL
 
@@ -2977,9 +2912,19 @@ TTFSizeUTF8 ( font, text )
        CODE:
                int w,h;
                RETVAL = newAV();
-               TTF_SizeUTF8(font,text,&w,&h);
-               av_push(RETVAL,newSViv(w));
-               av_push(RETVAL,newSViv(h));
+               if(TTF_SizeUTF8(font,text,&w,&h))
+               {
+                       av_push(RETVAL,newSViv(w));
+                       av_push(RETVAL,newSViv(h));
+                       sv_2mortal((SV*)RETVAL);
+
+               }
+               else
+               {
+                       printf("TTF error at TTFSizeUTF8 with : %s \n", TTF_GetError());
+                       Perl_croak (aTHX_ "TTF error \n");
+               }
+               
        OUTPUT:
                RETVAL
 
@@ -2990,12 +2935,24 @@ TTFSizeUNICODE ( font, text )
        CODE:
                int w,h;
                RETVAL = newAV();
-               TTF_SizeUNICODE(font,text,&w,&h);
-               av_push(RETVAL,newSViv(w));
-               av_push(RETVAL,newSViv(h));
+               if(TTF_SizeUNICODE(font,text,&w,&h))
+               {
+                       av_push(RETVAL,newSViv(w));
+                       av_push(RETVAL,newSViv(h));
+                       sv_2mortal((SV*)RETVAL);
+
+               }
+               else
+               {
+                       printf("TTF error at TTFSizeUNICODE : %s \n", TTF_GetError()); 
+                       Perl_croak (aTHX_ "TTF error \n");
+               }
+
        OUTPUT:
                RETVAL
 
+=for comment
+
 SDL_Surface*
 TTFRenderTextSolid ( font, text, fg )
        TTF_Font *font
@@ -3219,6 +3176,8 @@ TTFPutString ( font, mode, surface, x, y, fg, bg, text )
        OUTPUT:
                RETVAL
 
+=cut
+
 #endif
 
 SDL_Overlay*
@@ -3658,6 +3617,8 @@ SMPEGGetInfo ( mpeg )
 
 #ifdef HAVE_SDL_GFX
 
+=cut
+
 SDL_Surface *
 GFXRotoZoom ( src, angle, zoom, smooth)
        SDL_Surface * src
@@ -3680,6 +3641,8 @@ GFXZoom ( src, zoomx, zoomy, smooth)
        OUTPUT:
                RETVAL
 
+=cut
+
 int
 GFXPixelColor ( dst, x, y, color )
        SDL_Surface* dst