Hash :
2e5ca9ad
Author :
Date :
2001-08-21T03:20:26
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
#include "FTFace.h"
#include "FTLibrary.h"
#include "FTGL.h"
FTFace::FTFace()
: ftFace(0),
numCharMaps(0),
numGlyphs(0)
{}
FTFace::~FTFace()
{
if( ftFace)
{
Close();
delete ftFace; // is this a prob?
ftFace = 0;
}
}
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()
{
FT_Done_Face( *ftFace);
}
FTSize& FTFace::Size( const unsigned int size, const unsigned int res )
{
charSize.CharSize( ftFace, size, res, res);
return charSize;
}
bool FTFace::CharMap( FT_Encoding encoding )
{
// ft_encoding_none, 0, 0, 0, 0
// ft_encoding_symbol, 's', 'y', 'm', 'b'
// ft_encoding_unicode, 'u', 'n', 'i', 'c'
// ft_encoding_latin_2, 'l', 'a', 't', '2'
// ft_encoding_sjis, 's', 'j', 'i', 's'
// ft_encoding_gb2312, 'g', 'b', ' ', ' '
// ft_encoding_big5, 'b', 'i', 'g', '5'
// ft_encoding_wansung, 'w', 'a', 'n', 's'
// ft_encoding_johab, 'j', 'o', 'h', 'a'
// ft_encoding_adobe_standard, 'A', 'D', 'O', 'B'
// ft_encoding_adobe_expert, 'A', 'D', 'B', 'E'
// ft_encoding_adobe_custom, 'A', 'D', 'B', 'C'
// ft_encoding_apple_roman, 'a', 'r', 'm', 'n'
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);
}
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;
}
}