Added video_mode_ok() and its test. Fixed test list_modes better
[sdlgit/SDL_perl.git] / src / Core / Video.xs
index b0f9d2b..0a4569d 100644 (file)
@@ -40,16 +40,51 @@ video_get_video_info()
        OUTPUT:
                RETVAL
 
-char *
-video_video_driver_name( maxlen )
-       int maxlen
+SV *
+video_video_driver_name( )
+       
        CODE:
-               char* buffer = safemalloc(sizeof(char) * maxlen);
-               char* str = SvPV( newSVpvn( buffer , maxlen), maxlen );
+               char buffer[1024];
+               if ( SDL_VideoDriverName(buffer, 1024) != NULL ) 
+               { 
+                       RETVAL =  newSVpv(buffer, 0);
+               } 
+               else 
+                        XSRETURN_UNDEF;        
+       OUTPUT:
+               RETVAL
+
+AV*
+list_modes ( format, flags )
+       Uint32 flags
+       SDL_PixelFormat *format
 
-               RETVAL = (char* )SDL_VideoDriverName( str , maxlen);
-               sv_2mortal(buffer);
-               sv_2mortal(str);                
-               
+       CODE:
+               SDL_Rect **mode;
+               RETVAL = newAV();
+               mode = SDL_ListModes(format,flags);
+               if (mode == (SDL_Rect**)-1 ) {
+                       av_push(RETVAL,newSVpv("all",0));
+               } else if (! mode ) {
+                       av_push(RETVAL,newSVpv("none",0));
+               } else {
+                       for (;*mode;mode++) {
+                               av_push(RETVAL,newSViv(PTR2IV(*mode)));
+                       }
+               }
        OUTPUT:
                RETVAL
+
+
+int
+video_video_mode_ok ( width, height, bpp, flags )
+       int width
+       int height
+       int bpp
+       Uint32 flags
+       CODE:
+               RETVAL = SDL_VideoModeOK(width,height,bpp,flags);
+       OUTPUT:
+               RETVAL
+
+