00001 #ifndef __FTFont__ 00002 #define __FTFont__ 00003 00004 #include <ft2build.h> 00005 #include FT_FREETYPE_H 00006 00007 #include "FTFace.h" 00008 #include "FTGL.h" 00009 00010 class FTGlyphContainer; 00011 class FTGlyph; 00012 00013 00032 class FTGL_EXPORT FTFont 00033 { 00034 public: 00040 FTFont( const char* fontFilePath); 00041 00050 FTFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); 00051 00055 virtual ~FTFont(); 00056 00066 bool Attach( const char* fontFilePath); 00067 00078 bool Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); 00079 00087 bool CharMap( FT_Encoding encoding ); 00088 00094 unsigned int CharMapCount(); 00095 00101 FT_Encoding* CharMapList(); 00102 00110 virtual bool FaceSize( const unsigned int size, const unsigned int res = 72); 00111 00117 unsigned int FaceSize() const; 00118 00125 virtual void Depth( float depth){} 00126 00133 void UseDisplayList( bool useList); 00134 00140 float Ascender() const; 00141 00147 float Descender() const; 00148 00154 float LineHeight() const; 00155 00167 void BBox( const char* string, float& llx, float& lly, float& llz, float& urx, float& ury, float& urz); 00168 00180 void BBox( const wchar_t* string, float& llx, float& lly, float& llz, float& urx, float& ury, float& urz); 00181 00188 float Advance( const wchar_t* string); 00189 00196 float Advance( const char* string); 00197 00203 virtual void Render( const char* string ); 00204 00210 virtual void Render( const wchar_t* string ); 00211 00217 FT_Error Error() const { return err;} 00218 00219 protected: 00229 virtual FTGlyph* MakeGlyph( unsigned int g) = 0; 00230 00234 FTFace face; 00235 00239 FTSize charSize; 00240 00246 bool useDisplayLists; 00247 00251 FT_Error err; 00252 00253 private: 00260 inline bool CheckGlyph( const unsigned int chr); 00261 00265 FTGlyphContainer* glyphList; 00266 00270 FTPoint pen; 00271 00272 }; 00273 00274 00275 #endif // __FTFont__ 00276