summaryrefslogtreecommitdiff
path: root/Build/source/libs/freetype/freetype-1.5/test/ftsbit.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/freetype/freetype-1.5/test/ftsbit.c')
-rw-r--r--Build/source/libs/freetype/freetype-1.5/test/ftsbit.c295
1 files changed, 295 insertions, 0 deletions
diff --git a/Build/source/libs/freetype/freetype-1.5/test/ftsbit.c b/Build/source/libs/freetype/freetype-1.5/test/ftsbit.c
new file mode 100644
index 00000000000..be3af357d0d
--- /dev/null
+++ b/Build/source/libs/freetype/freetype-1.5/test/ftsbit.c
@@ -0,0 +1,295 @@
+/****************************************************************************/
+/* */
+/* The FreeType project -- a free and portable quality TrueType renderer. */
+/* */
+/* Copyright 1996-2001 by */
+/* D. Turner, R.Wilhelm, and W. Lemberg */
+/* */
+/* ftsbit: a _very_ simple embedded bitmap dumper for FreeType 1.x. */
+/* */
+/* NOTE: This is just a test program that is used to show off and */
+/* debug the current engine. */
+/* */
+/****************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "common.h"
+#include "freetype.h"
+#include "ftxsbit.h"
+
+#include "textdisp.h"
+
+/*
+ * Basically, an external program using FreeType shouldn't depend on an
+ * internal file of the FreeType library, especially not on ft_conf.h -- but
+ * to avoid another configure script which tests for the existence of the
+ * i18n stuff we include ft_conf.h here since we can be sure that our test
+ * programs use the same configuration options as the library itself.
+ */
+
+#include "ft_conf.h"
+
+
+#ifdef HAVE_LIBINTL_H
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+#include <libintl.h>
+#include "ftxerr18.h"
+
+#else /* !HAVE_LIBINTL_H */
+
+#define gettext( x ) ( x )
+
+ /* We ignore error message strings with this function */
+
+ static char* TT_ErrToString18( TT_Error error )
+ {
+ static char temp[32];
+
+
+ sprintf( temp, "0x%04lx", error );
+ return temp;
+ }
+
+#endif /* !HAVE_LIBINTL_H */
+
+
+ TT_Error error;
+
+ TT_Engine engine;
+
+ TT_Face face;
+ TT_Instance instance;
+ TT_Glyph glyph;
+
+ TT_Outline outline;
+ TT_Glyph_Metrics metrics;
+
+ TT_Face_Properties properties;
+ TT_EBLC eblc;
+ TT_SBit_Image* bitmap;
+
+ unsigned int num_glyphs;
+ int ptsize;
+
+ int Fail;
+ int Num;
+
+
+ static void Usage( char* name )
+ {
+ char* gt;
+
+
+ gt = gettext( "ftsbit: Simple TrueType `sbit' dumper -- part of the FreeType project" );
+ fprintf( stderr, "%s\n", gt );
+ separator_line( stderr, strlen( gt ) );
+
+ fprintf( stderr, gettext(
+ "Usage: %s ppem fontname[.ttf|.ttc] glyph_index [glyph_index2..]\n\n" ), name );
+
+ exit( EXIT_FAILURE );
+ }
+
+
+ int main( int argc, char** argv )
+ {
+ int i;
+ char filename[128 + 4];
+ char alt_filename[128 + 4];
+ char* execname;
+ char* fname;
+
+
+#ifdef HAVE_LIBINTL_H
+ setlocale( LC_ALL, "" );
+ bindtextdomain( "freetype", LOCALEDIR );
+ textdomain( "freetype" );
+#endif
+
+ execname = argv[0];
+
+ if ( argc < 3 )
+ Usage( execname );
+
+ if ( sscanf( argv[1], "%d", &ptsize ) != 1 )
+ Usage( execname );
+
+ /* Initialize engine */
+ if ( (error = TT_Init_FreeType( &engine )) )
+ {
+ fprintf( stderr, gettext( "Error while initializing engine.\n" ) );
+ goto Failure;
+ }
+
+ if ( (error = TT_Init_SBit_Extension( engine )) )
+ {
+ fprintf( stderr, gettext(
+ "Error while initializing embedded bitmap extension.\n" ) );
+ goto Failure;
+ }
+
+ /* Now check all files */
+ fname = argv[2];
+ i = strlen( fname );
+ while ( i > 0 && fname[i] != '\\' && fname[i] != '/' )
+ {
+ if ( fname[i] == '.' )
+ i = 0;
+ i--;
+ }
+
+ filename[128] = '\0';
+ alt_filename[128] = '\0';
+
+ strncpy( filename, fname, 128 );
+ strncpy( alt_filename, fname, 128 );
+
+ if ( i >= 0 )
+ {
+ strncpy( filename + strlen( filename ), ".ttf", 4 );
+ strncpy( alt_filename + strlen( alt_filename ), ".ttc", 4 );
+ }
+
+ /* Load face */
+ error = TT_Open_Face( engine, filename, &face );
+ if ( error == TT_Err_Could_Not_Open_File )
+ {
+ strcpy( filename, alt_filename );
+ error = TT_Open_Face( engine, alt_filename, &face );
+ }
+
+ i = strlen( filename );
+ fname = filename;
+
+ while ( i >= 0 )
+ if ( filename[i] == '/' || filename[i] == '\\' )
+ {
+ fname = filename + i + 1;
+ i = -1;
+ }
+ else
+ i--;
+
+ if ( error )
+ {
+ fprintf( stderr, gettext( "Could not find or open %s.\n" ),
+ filename );
+ goto Failure;
+ }
+ if ( error )
+ {
+ fprintf( stderr, gettext( "Error while opening %s.\n" ), filename );
+ goto Failure;
+ }
+
+ /* get face properties */
+ TT_Get_Face_Properties( face, &properties );
+ num_glyphs = properties.num_Glyphs;
+
+ error = TT_Get_Face_Bitmaps( face, &eblc );
+ if ( error == TT_Err_Table_Missing )
+ {
+ fprintf( stderr, gettext(
+ "Could not find embedded bitmaps in this font.\n" ) );
+ goto Failure;
+ }
+ if ( error )
+ {
+ fprintf( stderr, gettext(
+ "Error while loading embedded bitmaps.\n" ) );
+ goto Failure;
+ }
+
+ /* create instance */
+ error = TT_New_Instance( face, &instance );
+ if ( error )
+ {
+ fprintf( stderr, gettext( "Could not create instance.\n" ) );
+ goto Failure;
+ }
+
+ error = TT_Set_Instance_PixelSizes( instance,
+ ptsize,
+ ptsize,
+ ptsize*3/4 );
+ if ( error )
+ {
+ fprintf( stderr,
+ gettext( "Could not set point size to %d.\n" ),
+ ptsize );
+ goto Failure;
+ }
+
+ error = TT_New_SBit_Image( &bitmap );
+ if ( error )
+ {
+ fprintf( stderr, gettext(
+ "Could not allocate glyph bitmap container.\n" ) );
+ goto Failure;
+ }
+
+ for ( i = 3; i < argc; i++ )
+ {
+ unsigned short glyph_index;
+
+
+ /* we use %i to allow the prefixes `0x' and `0' */
+ if ( sscanf( argv[i], "%hi", &glyph_index ) != 1 )
+ Usage( execname );
+
+ error = TT_Load_Glyph_Bitmap( face, instance, glyph_index, bitmap );
+
+ if ( error == TT_Err_Invalid_Glyph_Index )
+ {
+ fprintf( stderr, gettext(
+ " no bitmap for glyph %d.\n" ), glyph_index );
+ continue;
+ }
+ if ( error )
+ {
+ fprintf( stderr, gettext(
+ "Can't load bitmap for glyph %d.\n" ), glyph_index );
+ goto Failure;
+ }
+
+ /* Dump the resulting bitmap */
+ {
+ printf( gettext( "glyph index %d = %dx%d pixels, " ),
+ glyph_index, bitmap->map.rows, bitmap->map.width );
+
+ printf( gettext( "advance = %ld, minBearing = [%ld,%ld]\n" ),
+ (long)(bitmap->metrics.horiAdvance / 64),
+ (long)(bitmap->metrics.horiBearingX / 64),
+ (long)(bitmap->metrics.horiBearingY / 64));
+
+ Show_Single_Glyph( &bitmap->map );
+ }
+ }
+
+ TT_Done_SBit_Image( bitmap );
+ TT_Close_Face( face );
+ TT_Done_FreeType( engine );
+
+ exit( EXIT_SUCCESS ); /* for safety reasons */
+
+ return 0; /* never reached */
+
+ Failure:
+ fprintf( stderr, " " );
+ fprintf( stderr, gettext( "FreeType error message: %s\n" ),
+ TT_ErrToString18( error ) );
+
+ exit( EXIT_FAILURE );
+
+ return 0; /* never reached */
+ }
+
+
+/* End */