00001
00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024
00025
00026 #ifndef NL_FONT_GENERATOR_H
00027 #define NL_FONT_GENERATOR_H
00028
00029 #include <freetype/freetype.h>
00030
00031 #include "nel/misc/types_nl.h"
00032 #include <string>
00033
00034 #ifdef NL_OS_WINDOWS
00035
00036 #pragma comment(lib, "freetype.lib")
00037 #endif
00038
00039
00040 namespace NL3D {
00041
00042
00049 class CFontGenerator
00050 {
00051 public:
00052
00056 CFontGenerator (const std::string &fontFileName, const std::string &fontExFileName = "");
00057
00065 uint8 *getBitmap (ucchar c, uint32 size, uint32 &width, uint32 &height, uint32 &pitch, sint32 &left, sint32 &top, sint32 &advx, uint32 &glyphIndex);
00066
00067 void getKerning (ucchar left, ucchar right, sint32 &kernx);
00068
00069 uint32 getCharIndex (ucchar c);
00070
00071 std::string FontFileName;
00072 private:
00073
00074 const char *getFT2Error(FT_Error fte);
00075
00076 static FT_Library _Library;
00077 static bool _LibraryInit;
00078
00079 FT_Face _Face;
00080 };
00081
00082
00083
00090 struct CFontDescriptor
00091 {
00092 CFontGenerator *FontGen;
00093 ucchar C;
00094 uint32 Size;
00095
00101 CFontDescriptor(CFontGenerator *fg, ucchar c, uint32 sz): FontGen(fg),C(c),Size(sz) { }
00102
00106 bool operator< (const CFontDescriptor& desc) const
00107 {
00108 if (FontGen->FontFileName<desc.FontGen->FontFileName)
00109 return true;
00110 if (FontGen->FontFileName>desc.FontGen->FontFileName)
00111 return false;
00112 if (C<desc.C)
00113 return true;
00114 if (C>desc.C)
00115 return false;
00116 return Size<desc.Size;
00117 }
00118 };
00119
00120
00121 }
00122
00123
00124 #endif // NL_FONT_GENERATOR_H
00125
00126