Hash :
8a480963
Author :
Date :
2001-09-16T21:29:59
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
#include "FTFace.h"
#include "FTLibrary.h"
#include "FTGL.h"
FTFace::FTFace()
: ftFace(0),
numCharMaps(0),
numGlyphs(0),
err(0)
{}
FTFace::~FTFace()
{
Close();
}
bool FTFace::Open( const char* filename)
{
ftFace = new FT_Face;
err = FT_New_Face( *FTLibrary::Instance().GetLibrary(), filename, 0, ftFace);
if( err)
{
delete ftFace;
ftFace = 0;
return false;
}
else
{
return true;
}
}
void FTFace::Close()
{
if( ftFace)
{
FT_Done_Face( *ftFace);
delete ftFace; // is this a prob?
ftFace = 0;
}
}
FTSize& FTFace::Size( const unsigned int size, const unsigned int res )
{
if( !charSize.CharSize( ftFace, size, res, res))
{
err = charSize.Error();
}
return charSize;
}
bool FTFace::CharMap( FT_Encoding encoding )
{
// FT_CharMap found = 0;
// FT_CharMap charmap;
// int n;
//
// for ( n = 0; n < face->num_charmaps; n++ )
// {
// charmap = face->charmaps[n];
// if ( charmap->platform_id == my_platform_id &&
// charmap->encoding_id == my_encoding_id )
// {
// found = charmap;
// break;
// }
// }
//
// if ( !found ) { ... }
//
// /* now, select the charmap for the face object */
// error = FT_Set_CharMap( face, found );
// if ( error ) { ... }
err = FT_Select_Charmap( *ftFace, encoding );
return !err;
}
unsigned int FTFace::CharIndex( unsigned int index ) const
{
return FT_Get_Char_Index( *ftFace, index);
}
FT_Vector& FTFace::KernAdvance( unsigned int index1, unsigned int index2 )
{
kernAdvance.x = 0; kernAdvance.y = 0;
if( FT_HAS_KERNING((*ftFace)) && index1 && index2)
{
err = FT_Get_Kerning( *ftFace, index1, index2, ft_kerning_unfitted, &kernAdvance);
if( !err)
{
kernAdvance.x /= 64; kernAdvance.y /= 64;
}
}
return kernAdvance;
}
FT_Glyph* FTFace::Glyph( unsigned int index, FT_Int load_flags)
{
err = FT_Load_Glyph( *ftFace, index, load_flags);
err = FT_Get_Glyph( (*ftFace)->glyph, &ftGlyph);
if( !err)
{
return &ftGlyph;
}
else
{
return NULL;
}
}