aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/lib/JEDI-SDLv1.0/SDL_ttf/Demos/ShowFont/showfont.dpr
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Code/lib/JEDI-SDLv1.0/SDL_ttf/Demos/ShowFont/showfont.dpr')
-rw-r--r--Game/Code/lib/JEDI-SDLv1.0/SDL_ttf/Demos/ShowFont/showfont.dpr384
1 files changed, 384 insertions, 0 deletions
diff --git a/Game/Code/lib/JEDI-SDLv1.0/SDL_ttf/Demos/ShowFont/showfont.dpr b/Game/Code/lib/JEDI-SDLv1.0/SDL_ttf/Demos/ShowFont/showfont.dpr
new file mode 100644
index 00000000..693c1b8c
--- /dev/null
+++ b/Game/Code/lib/JEDI-SDLv1.0/SDL_ttf/Demos/ShowFont/showfont.dpr
@@ -0,0 +1,384 @@
+program showfont;
+{
+ showfont: An example of using the SDL_ttf library with 2D graphics.
+ Copyright (C) 1997, 1998, 1999, 2000, 2001 Sam Lantinga
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Sam Lantinga slouken@libsdl.org
+}
+
+{
+$Id: showfont.dpr,v 1.3 2007/06/01 08:39:06 savage Exp $
+}
+
+{
+A simple program to test the text rendering feature of the TTF library
+}
+
+uses
+ SysUtils,
+ sdl,
+ sdl_ttf;
+
+const
+ DEFAULT_PTSIZE = 18;
+ DEFAULT_TEXT = 'The quick Pascal compiler jumped over the lazy C compiler';
+ NUM_COLORS = 256;
+ Usage = 'Usage: %s <font>.ttf [-solid] [-utf8 or -unicode] [-b] [-i] [-u] [-fgcol r g b] [-bgcol r g b] [-ptsize nn] [-text "message"]';
+ SCREEN_WIDTH = 640;
+ SCREEN_HEIGHT = 480;
+ SCREEN_BPP = 8;
+
+type
+ TRenderType = ( rtLatin1, rtUTF8, rtUnicode );
+
+procedure ShutDownApplication( HaltStatus : integer );
+begin
+ TTF_Quit;
+ SDL_Quit;
+ Halt( HaltStatus );
+end;
+
+var
+ screen : PSDL_Surface = nil;
+ font : PTTF_Font;
+ text : PSDL_Surface = nil;
+ temp : PSDL_Surface = nil;
+ ptsize : integer = 0;
+ i : integer;
+ done : Boolean = false;
+ rdiff, gdiff, bdiff : integer;
+ colors : array[ 0..NUM_COLORS - 1 ] of TSDL_Color;
+ white : TSDL_Color = ( r : $FF; g : $FF; b : $FF; unused : 0 );
+ black : TSDL_Color = ( r : $00; g : $00; b : $00; unused : 0 );
+ forecol : TSDL_Color;
+ backcol : TSDL_Color;
+ dstrect : TSDL_Rect;
+ event : TSDL_Event;
+ rendersolid : Boolean = false;
+ renderstyle : integer = TTF_STYLE_NORMAL;
+ rendertype : TRenderType = rtLatin1;
+ dump : Boolean;
+ message : WideString;
+ glyph : PSDL_Surface = nil;
+ r, g, b : integer;
+ outname : string;
+begin
+ { Look for special execution mode }
+ {dump := false;
+ { Look for special rendering types }
+ {rendersolid := false;
+ renderstyle := TTF_STYLE_NORMAL;
+ rendertype := rtLatin1;}
+
+ { Default is black and white }
+ forecol := black;
+ backcol := white;
+
+ for i := 1 to ParamCount do
+ begin
+ if ( ParamStr( i ) = '-solid' ) then
+ begin
+ rendersolid := true;
+ end
+ else if ( ParamStr( i ) = '-utf8' ) then
+ begin
+ rendertype := rtUTF8;
+ end
+ else if ( ParamStr( i ) = '-unicode' ) then
+ begin
+ rendertype := rtUnicode;
+ end
+ else if ( ParamStr( i ) = '-b' ) then
+ begin
+ renderstyle := renderstyle or TTF_STYLE_BOLD;
+ end
+ else if ( ParamStr( i ) = '-i' ) then
+ begin
+ renderstyle := renderstyle or TTF_STYLE_ITALIC;
+ end
+ else if ( ParamStr( i ) = '-u' ) then
+ begin
+ renderstyle := renderstyle or TTF_STYLE_UNDERLINE;
+ end
+ else if ( ParamStr( i ) = '-dump' ) then
+ begin
+ dump := true;
+ end
+ else if ( ParamStr( i ) = '-fgcol' ) then
+ begin
+ try
+ r := StrToInt( ParamStr( i + 1 ) );
+ g := StrToInt( ParamStr( i + 2 ) );
+ b := StrToInt( ParamStr( i + 3 ) );
+ except
+ ShutDownApplication( 1 )
+ end;
+ forecol.r := r;
+ forecol.g := g;
+ forecol.b := b;
+ end
+ else if ( ParamStr( i ) = '-bgcol' ) then
+ begin
+ try
+ r := StrToInt( ParamStr( i + 1 ) );
+ g := StrToInt( ParamStr( i + 2 ) );
+ b := StrToInt( ParamStr( i + 3 ) );
+ except
+ ShutDownApplication( 1 )
+ end;
+ forecol.r := r;
+ forecol.g := g;
+ forecol.b := b;
+ end
+ else if ( ParamStr( i ) = '-ptsize' ) then
+ begin
+ ptsize := StrToInt( ParamStr( i + 1 ) );
+ end
+ else if ( ParamStr( i ) = '-text' ) then
+ begin
+ message := WideString( ParamStr( i + 1 ) );
+ end
+ else
+ begin
+ //fprintf(stderr, Usage, argv0);
+ end;
+ end;
+
+ { Check usage }
+ {
+ if ( ! argv[0] ) then
+ begin
+ fprintf(stderr, Usage, argv0);
+ return(1);
+ end;
+ }
+
+ { Initialize SDL }
+ if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) then
+ begin
+ //fprintf(stderr, 'Couldn''t initialize SDL: %s',SDL_GetError);
+ ShutDownApplication( 2 )
+ end;
+
+ //atexit(SDL_Quit);
+
+ { Initialize the TTF library }
+ if ( TTF_Init( ) < 0 ) then
+ begin
+ //fprintf(stderr, 'Couldn''t initialize TTF: %s',SDL_GetError);
+ ShutDownApplication( 2 )
+ end;
+
+ //atexit(TTF_Quit);
+
+ { Open the font file with the requested point size }
+ if ( ptsize = 0 ) then
+ begin
+ i := 2;
+ ptsize := DEFAULT_PTSIZE;
+ end
+ else
+ begin
+ i := 3;
+ end;
+
+ font := TTF_OpenFont( PChar( ParamStr( 1 ) ), ptsize );
+ if ( font = nil ) then
+ begin
+ //fprintf(stderr, 'Couldn''t load %d pt font from %s: %s',[ptsize, ParamStr(0), SDL_GetError]);
+ ShutDownApplication( 2 )
+ end;
+
+ TTF_SetFontStyle( font, renderstyle );
+
+ if ( dump ) then
+ begin
+ for i := 48 to 123 do
+ begin
+ glyph := TTF_RenderGlyph_Shaded( font, i, forecol, backcol );
+ if ( glyph <> nil ) then
+ begin
+ //sprintf( outname, 'glyph-%d.bmp', i );
+ outname := 'glyph-' + IntToStr( i ) + '.bmp';
+ SDL_SaveBMP( glyph, PChar( outname ) );
+ end;
+ end;
+ ShutDownApplication( 0 );
+ exit;
+ end;
+
+ { Set a 640x480x8 video mode }
+ screen := SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
+ if ( screen = nil ) then
+ begin
+ //fprintf(stderr, 'Couldn't set 640x480x8 video mode: %s',[SDL_GetError]);
+ ShutDownApplication( 2 );
+ end;
+
+ // Set the window manager title bar
+ SDL_WM_SetCaption( 'JEDI-SDL 2D TTF Demo', 'showfont' );
+
+ { Set a palette that is good for the foreground colored text }
+ rdiff := backcol.r - forecol.r;
+ gdiff := backcol.g - forecol.g;
+ bdiff := backcol.b - forecol.b;
+
+ for i := 0 to NUM_COLORS - 1 do
+ begin
+ colors[ i ].r := forecol.r + ( i * rdiff ) div 4;
+ colors[ i ].g := forecol.g + ( i * gdiff ) div 4;
+ colors[ i ].b := forecol.b + ( i * bdiff ) div 4;
+ end;
+
+ SDL_SetColors( screen, @colors, 0, NUM_COLORS );
+
+ { Clear the background to background color }
+
+ SDL_FillRect( screen, nil, SDL_MapRGB( screen.format, backcol.r, backcol.g, backcol.b ) );
+
+ SDL_UpdateRect( screen, 0, 0, 0, 0 );
+
+ { Show which font file we're looking at }
+ //sprintf(string, 'Font file: %s', argv[0]);
+
+ { Render and center the message }
+ if message = '' then
+ begin
+ message := DEFAULT_TEXT;
+ end;
+
+ case rendertype of
+ rtLatin1 :
+ begin
+ if ( rendersolid ) then
+ begin
+ text := TTF_RenderText_Solid( font, PChar( string(message) ), forecol );
+ end
+ else
+ begin
+ text := TTF_RenderText_Shaded( font, PChar( string( message ) ), forecol, backcol );
+ end;
+ end;
+
+ rtUTF8 :
+ begin
+ if ( rendersolid ) then
+ begin
+ text := TTF_RenderUTF8_Solid( font, PChar( string( message ) ), forecol );
+ end
+ else
+ begin
+ text := TTF_RenderUTF8_Shaded( font, PChar( string( message ) ), forecol, backcol );
+ end;
+ end;
+
+ rtUnicode :
+ begin
+ { This doesn't actually work because you can't pass UNICODE text in via command line, AFAIK, but...}
+ {Uint16 unicode_text[BUFSIZ];
+ int index;}
+ {for index := 0 to Length(message) - 1 do
+ begin
+ unicode_text[index] := ((Uint8 *)message)[0];
+ unicode_text[index] := unicode_text[index] shl 8;
+ unicode_text[index] := unicode_text[index] or ((Uint8 *)message)[1];
+ message := message + 2;
+ end; }
+ if ( rendersolid ) then
+ begin
+ text := TTF_RenderUNICODE_Solid(font, PUInt16( message ), forecol);
+ end
+ else
+ begin
+ text := TTF_RenderUNICODE_Shaded( font, PUInt16( message ), forecol, backcol);
+ end;
+ end;
+ else
+ begin
+ text := nil;
+ { This shouldn't happen }
+ end;
+ end;
+
+ if ( text = nil ) then
+ begin
+ //fprintf(stderr, 'Couldn''t render text: %s', [SDL_GetError]);
+ TTF_CloseFont( font );
+ ShutDownApplication( 2 );
+ end;
+
+ dstrect.x := ( screen.w - text.w ) div 2;
+ dstrect.y := ( screen.h - text.h ) div 2;
+ dstrect.w := text.w;
+ dstrect.h := text.h;
+ //printf('Font is generally %d big, and string is %hd big', TTF_FontHeight(font), text.h);
+
+ { Blit the text surface }
+ if ( SDL_BlitSurface( text, nil, screen, @dstrect ) < 0 ) then
+ begin
+ //fprintf(stderr, 'Couldn't blit text to display: %s', [SDL_GetError]);
+ TTF_CloseFont( font );
+ ShutDownApplication( 2 );
+ end;
+
+ SDL_UpdateRect( screen, 0, 0, 0, 0 );
+ { Set the text colorkey and convert to display format }
+ if ( SDL_SetColorKey( text, SDL_SRCCOLORKEY or SDL_RLEACCEL, 0 ) < 0 ) then
+ begin
+ //fprintf(stderr, 'Warning: Couldn't set text colorkey: %s', [SDL_GetError]);
+ end;
+
+ temp := SDL_DisplayFormat( text );
+ if ( temp <> nil ) then
+ begin
+ SDL_FreeSurface( text );
+ text := temp;
+
+ { Wait for a keystroke, and blit text on mouse press }
+ done := false;
+ while ( not done ) do
+ begin
+ while ( SDL_PollEvent( @event ) <> 0 ) do
+ begin
+ case ( event.type_ ) of
+ SDL_MOUSEBUTTONDOWN :
+ begin
+ dstrect.x := event.button.x - text.w div 2;
+ dstrect.y := event.button.y - text.h div 2;
+ dstrect.w := text.w;
+ dstrect.h := text.h;
+ if ( SDL_BlitSurface( text, nil, screen, @dstrect ) = 0 ) then
+ begin
+ SDL_UpdateRects( screen, 1, @dstrect );
+ end
+ else
+ begin
+ //fprintf(stderr, 'Couldn''t blit text to display: %s', [SDL_GetError]);
+ end;
+ end;
+
+ SDL_KEYDOWN, SDL_QUITEV :
+ begin
+ done := true;
+ end;
+
+ end;
+ end;
+ end;
+ end;
+ SDL_FreeSurface( text );
+ TTF_CloseFont( font );
+ ShutDownApplication( 0 );
+end.
+