#include #include #include FT_FREETYPE_H #include #include "common.h" #include "ttobjs.h" #include "ttdriver.h" #include "ttinterp.h" #include "tterrors.h" static void Usage() { fprintf( stderr, "usage : metrictest glyph size fontfile[.ttf]\n\n" ); exit(1); } int main( int argc, char** argv ) { FT_Library library; /* root library object */ FT_Driver driver; /* truetype driver */ TT_Face face; /* truetype face */ TT_Size size; /* truetype size */ TT_GlyphSlot glyph; /* truetype glyph slot */ TT_ExecContext exec; /* truetype execution context */ FT_Error error; char* file_name; int glyph_index; int glyph_size; if ( argc < 3 ) Usage(); if ( sscanf( argv[1], "%d", &glyph_index ) != 1 ) { printf( "invalid glyph index = %s\n", argv[1] ); Usage(); } if ( sscanf( argv[2], "%d", &glyph_size ) != 1 ) { printf( "invalid glyph size = %s\n", argv[2] ); Usage(); } file_name = argv[3]; error = FT_Init_FreeType( &library ); if (error) Panic( "could not initialise FreeType library" ); driver = (FT_Driver)FT_Get_Module( library, "truetype" ); if (!driver) Panic( "could not find the TrueType driver in FreeType 2\n" ); error = FT_New_Face( library, file_name, 0, (FT_Face*)&face ); if (error) Panic( "could not open font resource" ); if ( face->root.driver != driver ) { error = FT_Err_Invalid_File_Format; Panic( "This is not a TrueType font" ); } size = (TT_Size)face->root.size; exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context; printf("1. After FT_New_Face()\n"); printf("size->root.metrics.x_ppem=%d\n", size->root.metrics.x_ppem); printf("size->metrics.x_ppem=%d\n", size->metrics.x_ppem); printf("exec->metrics.x_ppem=%d\n", exec->metrics.x_ppem); error = FT_Set_Char_Size( (FT_Face)face, glyph_size << 6, glyph_size << 6, 72, 72 ); if (error) Panic( "could not set character sizes" ); printf("2. After FT_Set_Char_Size()\n"); printf("size->root.metrics.x_ppem=%d\n", size->root.metrics.x_ppem); printf("size->metrics.x_ppem=%d\n", size->metrics.x_ppem); printf("exec->metrics.x_ppem=%d\n", exec->metrics.x_ppem); glyph = (TT_GlyphSlot)face->root.glyph; error = FT_Load_Glyph( (FT_Face)face, glyph_index, FT_LOAD_NO_BITMAP ); if (error) Panic( "could not load glyph" ); printf("3. After FT_Load_Glyph()\n"); printf("size->root.metrics.x_ppem=%d\n", size->root.metrics.x_ppem); printf("size->metrics.x_ppem=%d\n", size->metrics.x_ppem); printf("exec->metrics.x_ppem=%d\n", exec->metrics.x_ppem); return 0; }