- _itt_t it;
- if ((it = _fonts.find(name)) != _fonts.end())
- return it->second;
-
- SGPath path = getfntpath(name);
-
- fnt *f = new fnt();
- f->texfont = new fntTexFont;
-
- if (f->texfont->load((char *)path.c_str())) {
+ string fontName = boost::to_lower_copy(string(name));
+ FntParams fntParams(fontName, size, slant);
+ PuFontMap::iterator i = _puFonts.find(fntParams);
+ if (i != _puFonts.end()) {
+ // found in the puFonts map, all done
+ return i->second;
+ }
+
+ // fntTexFont s are all preloaded into the _texFonts map
+ TexFontMap::iterator texi = _texFonts.find(fontName);
+ fntTexFont* texfont = NULL;
+ puFont* pufont = NULL;
+ if (texi != _texFonts.end()) {
+ texfont = texi->second;
+ } else {
+ // check the built-in PUI fonts (in guifonts array)
+ const GuiFont* guifont = std::find_if(&guifonts[0], guifontsEnd,
+ GuiFont::Predicate(name));
+ if (guifont != guifontsEnd) {
+ pufont = guifont->font;
+ }
+ }
+
+ fnt* f = new fnt;
+ if (pufont) {
+ f->pufont = pufont;
+ } else if (texfont) {
+ f->texfont = texfont;