Wrap TTF_Font with a few calls
[sdlgit/SDL_perl.git] / src / TTF / TTF.xs
index e69de29..4a0df50 100644 (file)
@@ -0,0 +1,353 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#ifndef aTHX_
+#define aTHX_
+#endif
+
+#include <SDL.h>
+#include <SDL_ttf.h>
+
+MODULE = SDL   PACKAGE = SDL
+PROTOTYPES : DISABLE
+
+
+=for comment
+
+These are here right now to keep them around with using the code.
+
+int
+TTFGetFontStyle ( font )
+       TTF_Font *font
+       CODE:
+               RETVAL = TTF_GetFontStyle(font);
+       OUTPUT:
+               RETVAL
+
+void
+TTFSetFontStyle ( font, style )
+       TTF_Font *font
+       int style
+       CODE:
+               TTF_SetFontStyle(font,style);
+       
+int
+TTFFontHeight ( font )
+       TTF_Font *font
+       CODE:
+               RETVAL = TTF_FontHeight(font);
+       OUTPUT:
+               RETVAL
+
+int
+TTFFontAscent ( font )
+       TTF_Font *font
+       CODE:
+               RETVAL = TTF_FontAscent(font);
+       OUTPUT:
+               RETVAL
+
+int
+TTFFontDescent ( font )
+       TTF_Font *font
+       CODE:
+               RETVAL = TTF_FontDescent(font);
+       OUTPUT:
+               RETVAL
+
+int
+TTFFontLineSkip ( font )
+       TTF_Font *font
+       CODE:
+               RETVAL = TTF_FontLineSkip(font);
+       OUTPUT:
+               RETVAL
+
+AV*
+TTFGlyphMetrics ( font, ch )
+       TTF_Font *font
+       Uint16 ch
+       CODE:
+               int minx, miny, maxx, maxy, advance;
+               RETVAL = newAV();
+               TTF_GlyphMetrics(font, ch, &minx, &miny, &maxx, &maxy, &advance);
+               av_push(RETVAL,newSViv(minx));
+               av_push(RETVAL,newSViv(miny));
+               av_push(RETVAL,newSViv(maxx));
+               av_push(RETVAL,newSViv(maxy));
+               av_push(RETVAL,newSViv(advance));
+       OUTPUT:
+               RETVAL
+
+
+AV*
+TTFSizeUTF8 ( font, text )
+       TTF_Font *font
+       char *text
+       CODE:
+               int w,h;
+               RETVAL = newAV();
+               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
+
+AV*
+TTFSizeUNICODE ( font, text )
+       TTF_Font *font
+       const Uint16 *text
+       CODE:
+               int w,h;
+               RETVAL = newAV();
+               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
+
+SDL_Surface*
+TTFRenderTextSolid ( font, text, fg )
+       TTF_Font *font
+       char *text
+       SDL_Color *fg
+       CODE:
+               RETVAL = TTF_RenderText_Solid(font,text,*fg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderUTF8Solid ( font, text, fg )
+       TTF_Font *font
+       char *text
+       SDL_Color *fg
+       CODE:
+               RETVAL = TTF_RenderUTF8_Solid(font,text,*fg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderUNICODESolid ( font, text, fg )
+       TTF_Font *font
+       const Uint16 *text
+       SDL_Color *fg
+       CODE:
+               RETVAL = TTF_RenderUNICODE_Solid(font,text,*fg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderGlyphSolid ( font, ch, fg )
+       TTF_Font *font
+       Uint16 ch
+       SDL_Color *fg
+       CODE:
+               RETVAL = TTF_RenderGlyph_Solid(font,ch,*fg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderTextShaded ( font, text, fg, bg )
+       TTF_Font *font
+       char *text
+       SDL_Color *fg
+       SDL_Color *bg
+       CODE:
+               RETVAL = TTF_RenderText_Shaded(font,text,*fg,*bg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderUTF8Shaded( font, text, fg, bg )
+       TTF_Font *font
+       char *text
+       SDL_Color *fg
+       SDL_Color *bg
+       CODE:
+               RETVAL = TTF_RenderUTF8_Shaded(font,text,*fg,*bg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderUNICODEShaded( font, text, fg, bg )
+       TTF_Font *font
+       const Uint16 *text
+       SDL_Color *fg
+       SDL_Color *bg
+       CODE:
+               RETVAL = TTF_RenderUNICODE_Shaded(font,text,*fg,*bg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderGlyphShaded ( font, ch, fg, bg )
+       TTF_Font *font
+       Uint16 ch
+       SDL_Color *fg
+       SDL_Color *bg
+       CODE:
+               RETVAL = TTF_RenderGlyph_Shaded(font,ch,*fg,*bg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderTextBlended( font, text, fg )
+       TTF_Font *font
+       char *text
+       SDL_Color *fg
+       CODE:
+               RETVAL = TTF_RenderText_Blended(font,text,*fg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderUTF8Blended( font, text, fg )
+       TTF_Font *font
+       char *text
+       SDL_Color *fg
+       CODE:
+               RETVAL = TTF_RenderUTF8_Blended(font,text,*fg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderUNICODEBlended( font, text, fg )
+       TTF_Font *font
+       const Uint16 *text
+       SDL_Color *fg
+       CODE:
+               RETVAL = TTF_RenderUNICODE_Blended(font,text,*fg);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface*
+TTFRenderGlyphBlended( font, ch, fg )
+       TTF_Font *font
+       Uint16 ch
+       SDL_Color *fg
+       CODE:
+               RETVAL = TTF_RenderGlyph_Blended(font,ch,*fg);
+       OUTPUT:
+               RETVAL
+
+void
+TTFCloseFont ( font )
+       TTF_Font *font
+       CODE:
+               TTF_CloseFont(font);
+               font=NULL; //to be safe http://sdl.beuc.net/sdl.wiki/SDL_ttf_copy_Functions_Management_TTF_CloseFont
+
+SDL_Surface*
+TTFPutString ( font, mode, surface, x, y, fg, bg, text )
+       TTF_Font *font
+       int mode
+       SDL_Surface *surface
+       int x
+       int y
+       SDL_Color *fg
+       SDL_Color *bg
+       char *text
+       CODE:
+               SDL_Surface *img;
+               SDL_Rect dest;
+               int w,h;
+               dest.x = x;
+               dest.y = y;
+               RETVAL = NULL;
+               switch (mode) {
+                       case TEXT_SOLID:
+                               img = TTF_RenderText_Solid(font,text,*fg);
+                               TTF_SizeText(font,text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+                               break;
+                       case TEXT_SHADED:
+                               img = TTF_RenderText_Shaded(font,text,*fg,*bg);
+                               TTF_SizeText(font,text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+                               break;
+                       case TEXT_BLENDED:
+                               img = TTF_RenderText_Blended(font,text,*fg);
+                               TTF_SizeText(font,text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+                               break;
+                       case UTF8_SOLID:
+                               img = TTF_RenderUTF8_Solid(font,text,*fg);
+                               TTF_SizeUTF8(font,text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+                               break;
+                       case UTF8_SHADED:
+                               img = TTF_RenderUTF8_Shaded(font,text,*fg,*bg);
+                               TTF_SizeUTF8(font,text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+                               break;
+                       case UTF8_BLENDED:
+                               img = TTF_RenderUTF8_Blended(font,text,*fg);
+                               TTF_SizeUTF8(font,text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+                               break;
+                       case UNICODE_SOLID:
+                               img = TTF_RenderUNICODE_Solid(font,(Uint16*)text,*fg);
+                               TTF_SizeUNICODE(font,(Uint16*)text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+                               break;
+                       case UNICODE_SHADED:
+                               img = TTF_RenderUNICODE_Shaded(font,(Uint16*)text,*fg,*bg);
+                               TTF_SizeUNICODE(font,(Uint16*)text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+                               break;
+                       case UNICODE_BLENDED:
+                               img = TTF_RenderUNICODE_Blended(font,(Uint16*)text,*fg);
+                               TTF_SizeUNICODE(font,(Uint16*)text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+                               break;
+                       default:
+                               img = TTF_RenderText_Shaded(font,text,*fg,*bg);
+                               TTF_SizeText(font,text,&w,&h);
+                               dest.w = w;
+                               dest.h = h;
+               }
+               if ( img && img->format && img->format->palette ) {
+                       SDL_Color *c = &img->format->palette->colors[0];
+                       Uint32 key = SDL_MapRGB( img->format, c->r, c->g, c->b );
+                       SDL_SetColorKey(img,SDL_SRCCOLORKEY,key );
+                       if (0 > SDL_BlitSurface(img,NULL,surface,&dest)) {
+                               SDL_FreeSurface(img);
+                               RETVAL = NULL;  
+                       } else {
+                               RETVAL = img;
+                       }
+               }
+       OUTPUT:
+               RETVAL
+
+=cut