#include <SDL_net.h>
#endif
-#ifdef HAVE_SDL_TTF
-#include <SDL_ttf.h>
-#define TEXT_SOLID 1
-#define TEXT_SHADED 2
-#define TEXT_BLENDED 4
-#define UTF8_SOLID 8
-#define UTF8_SHADED 16
-#define UTF8_BLENDED 32
-#define UNICODE_SOLID 64
-#define UNICODE_SHADED 128
-#define UNICODE_BLENDED 256
-#endif
-
#ifdef HAVE_SMPEG
#include <smpeg/smpeg.h>
#ifdef HAVE_SDL_MIXER
#include <SDL_svg.h>
#endif
+#ifdef HAVE_SDL_TTF
+#include <SDL_ttf.h>
+#endif
+
#ifdef USE_THREADS
#define HAVE_TLS_CONTEXT
#endif
#endif
-#ifdef HAVE_SDL_TTF
-
-int
-TTFInit ()
- CODE:
- RETVAL = TTF_Init();
- OUTPUT:
- RETVAL
-
-void
-TTFQuit ()
- CODE:
- TTF_Quit();
-
-TTF_Font*
-TTFOpenFont ( file, ptsize )
- char *file
- int ptsize
- CODE:
- RETVAL = TTF_OpenFont(file,ptsize);
- OUTPUT:
- RETVAL
-
-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*
-TTFSizeText ( font, text )
- TTF_Font *font
- char *text
- CODE:
- int w,h;
- RETVAL = newAV();
- 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
-
-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
-
-=for comment
-
-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
-
-#endif
-
SDL_Overlay*
CreateYUVOverlay ( width, height, format, display )
int width
#endif
+#ifdef HAVE_SDL_TTF
+
+int
+TTF_Init ()
+ CODE:
+ RETVAL = TTF_Init();
+ OUTPUT:
+ RETVAL
+
+void
+TTF_Quit ()
+ CODE:
+ TTF_Quit();
+
+TTF_Font*
+TTF_OpenFont ( file, ptsize )
+ char *file
+ int ptsize
+ CODE:
+ char* CLASS = "SDL::TTF_Font";
+ RETVAL = TTF_OpenFont(file,ptsize);
+ OUTPUT:
+ RETVAL
+
+AV*
+TTF_SizeText ( font, text )
+ TTF_Font *font
+ char *text
+ CODE:
+ int w,h;
+ RETVAL = newAV();
+ 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
+
+SDL_Surface*
+TTF_RenderText_Blended ( font, text, fg )
+ TTF_Font *font
+ char *text
+ SDL_Color *fg
+ CODE:
+ char* CLASS = "SDL::Surface";
+ RETVAL = TTF_RenderText_Blended(font,text,*fg);
+ OUTPUT:
+ RETVAL
+
+#endif
+
MODULE = SDL PACKAGE = SDL
PROTOTYPES : DISABLE
+#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