#include <font_generator.h>
Nevrax France
Definition at line 52 of file font_generator.h.
Public Member Functions | |
CFontGenerator (const std::string &fontFileName, const std::string &fontExFileName="") | |
uint8 * | getBitmap (ucchar c, uint32 size, uint32 &width, uint32 &height, uint32 &pitch, sint32 &left, sint32 &top, sint32 &advx, uint32 &glyphIndex) |
uint32 | getCharIndex (ucchar c) |
void | getKerning (ucchar left, ucchar right, sint32 &kernx) |
void | getSizes (ucchar c, uint32 size, uint32 &width, uint32 &height) |
uint32 | getUID () |
virtual | ~CFontGenerator () |
Private Member Functions | |
const char * | getFT2Error (FT_Error fte) |
Private Attributes | |
FT_Face | _Face |
std::string | _FontFileName |
uint32 | _UID |
Static Private Attributes | |
uint32 | _FontGeneratorCounterUID = 1 |
FT_Library | _Library |
bool | _LibraryInit = false |
|
Constructor
Definition at line 93 of file font_generator.cpp. References _Face, _FontFileName, _FontGeneratorCounterUID, _Library, _LibraryInit, _UID, getFT2Error(), nlerror, and nlwarning.
00094 { 00095 NL_ALLOC_CONTEXT (FreeTyp); 00096 00097 _UID = _FontGeneratorCounterUID; 00098 _FontGeneratorCounterUID++; 00099 _FontFileName = fontFileName; 00100 00101 FT_Error error; 00102 00103 if (!_LibraryInit) 00104 { 00105 error = FT_Init_FreeType (&_Library); 00106 if (error) 00107 { 00108 nlerror ("FT_Init_FreeType() failed: %s", getFT2Error(error)); 00109 } 00110 _LibraryInit = true; 00111 } 00112 00113 error = FT_New_Face (_Library, fontFileName.c_str (), 0, &_Face); 00114 if (error) 00115 { 00116 nlerror ("FT_New_Face() failed with file '%s': %s", fontFileName.c_str(), getFT2Error(error)); 00117 } 00118 00119 string fontEx = fontExFileName; 00120 if (fontEx == "") 00121 { 00122 // try to see if the ex filename exists based on the fontExFileName 00123 fontEx = CPath::lookup(CFile::getFilenameWithoutExtension (fontFileName)+".afm", false, false); 00124 } 00125 00126 if (fontEx != "") 00127 { 00128 error = FT_Attach_File (_Face, fontEx.c_str ()); 00129 if (error) 00130 { 00131 nlwarning ("FT_Attach_File() failed with file '%s': %s", fontEx.c_str(), getFT2Error(error)); 00132 } 00133 } 00134 00135 error = FT_Select_Charmap (_Face, ft_encoding_unicode); 00136 if (error) 00137 { 00138 nlerror ("FT_Select_Charmap() failed with file '%s': %s", fontFileName.c_str(), getFT2Error(error)); 00139 } 00140 } |
|
Definition at line 142 of file font_generator.cpp.
00143 { 00144 } |
|
generate and return a bitmap
Definition at line 173 of file font_generator.cpp. References _Face, getFT2Error(), height, nlerror, sint32, size, ucchar, uint32, uint8, and width. Referenced by NL3D::CTextureFont::getLetterInfo(), and NL3D::CTextureFont::rebuildLetter().
00174 { 00175 NL_ALLOC_CONTEXT (FreeTyp); 00176 00177 FT_Error error; 00178 00179 error = FT_Set_Pixel_Sizes (_Face, size, size); 00180 if (error) 00181 { 00182 nlerror ("FT_Set_Pixel_Sizes() failed: %s", getFT2Error(error)); 00183 } 00184 00185 // retrieve glyph index from character code 00186 FT_UInt glyph_index = FT_Get_Char_Index (_Face, c); 00187 00188 // load glyph image into the slot (erase previous one) 00189 error = FT_Load_Glyph (_Face, glyph_index, FT_LOAD_DEFAULT); 00190 if (error) 00191 { 00192 nlerror ("FT_Load_Glyph() failed: %s", getFT2Error(error)); 00193 } 00194 00195 if (size == 0) 00196 { 00197 width = 0; 00198 height = 0; 00199 pitch = 0; 00200 left = 0; 00201 top = 0; 00202 advx = 0; 00203 glyphIndex = glyph_index; 00204 return NULL; 00205 } 00206 00207 // convert to an anti-aliased bitmap 00208 error = FT_Render_Glyph (_Face->glyph, ft_render_mode_normal); 00209 if (error) 00210 { 00211 nlerror ("FT_Render_Glyph() failed: %s", getFT2Error(error)); 00212 } 00213 00214 width = _Face->glyph->bitmap.width; 00215 height = _Face->glyph->bitmap.rows; 00216 pitch = _Face->glyph->bitmap.pitch; 00217 00218 left = _Face->glyph->bitmap_left; 00219 top = _Face->glyph->bitmap_top; 00220 00221 advx = _Face->glyph->advance.x >> 6; 00222 00223 glyphIndex = glyph_index; 00224 00225 return (uint8 *) _Face->glyph->bitmap.buffer; 00226 } |
|
Definition at line 252 of file font_generator.cpp. References _Face, ucchar, and uint32.
00253 {
00254 NL_ALLOC_CONTEXT (FreeTyp);
00255
00256 return FT_Get_Char_Index (_Face, c);
00257 }
|
|
Definition at line 73 of file font_generator.cpp. References ft_errors, NLMISC::smprintf(), and uint32. Referenced by CFontGenerator(), getBitmap(), getKerning(), and getSizes().
00074 { 00075 NL_ALLOC_CONTEXT (FreeTyp); 00076 00077 static char ukn[1024]; 00078 00079 for (uint32 i = 0; ft_errors[i].err_code != 0 || ft_errors[i].err_msg != 0; i++) 00080 { 00081 if (ft_errors[i].err_code == fte) 00082 return ft_errors[i].err_msg; 00083 } 00084 smprintf (ukn, 1024, "Unknown freetype2 error, errcode: 0x%x", fte); 00085 return ukn; 00086 } |
|
Definition at line 230 of file font_generator.cpp. References _Face, getFT2Error(), nlerror, sint32, and ucchar.
00231 { 00232 NL_ALLOC_CONTEXT (FreeTyp); 00233 00234 if (!FT_HAS_KERNING(_Face)) 00235 { 00236 kernx = 0; 00237 } 00238 else 00239 { 00240 FT_Vector kerning; 00241 FT_Error error = FT_Get_Kerning (_Face, left, right, ft_kerning_default, &kerning); 00242 if (error) 00243 { 00244 nlerror ("FT_Get_Kerning() failed: %s", getFT2Error(error)); 00245 } 00246 kernx = kerning.x; 00247 } 00248 } |
|
returns the width and height of a character using a specific size and
Definition at line 146 of file font_generator.cpp. References _Face, getFT2Error(), height, nlerror, size, ucchar, uint32, and width.
00147 { 00148 NL_ALLOC_CONTEXT (FreeTyp); 00149 00150 FT_Error error; 00151 00152 error = FT_Set_Pixel_Sizes (_Face, size, size); 00153 if (error) 00154 { 00155 nlerror ("FT_Set_Pixel_Sizes() failed: %s", getFT2Error(error)); 00156 } 00157 00158 // retrieve glyph index from character code 00159 FT_UInt glyph_index = FT_Get_Char_Index (_Face, c); 00160 00161 // load glyph image into the slot (erase previous one) 00162 error = FT_Load_Glyph (_Face, glyph_index, FT_LOAD_DEFAULT); 00163 if (error) 00164 { 00165 nlerror ("FT_Load_Glyph() failed: %s", getFT2Error(error)); 00166 } 00167 00168 // convert 24.6 fixed point into integer 00169 width = _Face->glyph->metrics.width >> 6; 00170 height = _Face->glyph->metrics.height >> 6; 00171 } |
|
Definition at line 82 of file font_generator.h. Referenced by NL3D::CTextureFont::SLetterKey::getVal().
00082 { return _UID; } |
|
Definition at line 96 of file font_generator.h. Referenced by CFontGenerator(), getBitmap(), getCharIndex(), getKerning(), and getSizes(). |
|
Definition at line 88 of file font_generator.h. Referenced by CFontGenerator(). |
|
Definition at line 71 of file font_generator.cpp. Referenced by CFontGenerator(). |
|
Definition at line 69 of file font_generator.cpp. Referenced by CFontGenerator(). |
|
Definition at line 70 of file font_generator.cpp. Referenced by CFontGenerator(). |
|
Definition at line 87 of file font_generator.h. Referenced by CFontGenerator(), and getUID(). |