1
0
Fork 0

Merge branch 'jmt/font'

This commit is contained in:
Tim Moore 2010-02-25 12:06:08 +01:00
commit 4ae8c90f76
2 changed files with 39 additions and 18 deletions

View file

@ -1109,7 +1109,12 @@ FGTextLayer::draw (osg::State& state)
transform();
FGFontCache *fc = globals->get_fontcache();
text_renderer.setFont(fc->getTexFont(_font_name.c_str()));
fntFont* font = fc->getTexFont(_font_name.c_str());
if (!font) {
return; // don't crash on missing fonts
}
text_renderer.setFont(font);
text_renderer.setPointSize(_pointSize);
text_renderer.begin();
@ -1170,6 +1175,11 @@ void
FGTextLayer::setFontName(const string &name)
{
_font_name = name + ".txf";
FGFontCache *fc = globals->get_fontcache();
fntFont* font = fc->getTexFont(_font_name.c_str());
if (!font) {
SG_LOG(SG_GENERAL, SG_WARN, "unable to find font:" << name);
}
}

View file

@ -14,6 +14,8 @@
#include <simgear/structure/exception.hxx>
#include <simgear/props/props_io.hxx>
#include <boost/algorithm/string/case_conv.hpp>
#include <Main/fg_props.hxx>
#include "menubar.hxx"
@ -468,24 +470,29 @@ inline bool FGFontCache::FntParamsLess::operator()(const FntParams& f1,
struct FGFontCache::fnt *
FGFontCache::getfnt(const char *name, float size, float slant)
{
string fontName(name);
string fontName = boost::to_lower_copy(string(name));
FntParams fntParams(fontName, size, slant);
PuFontMap::iterator i = _puFonts.find(fntParams);
if (i != _puFonts.end())
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 = 0;
puFont* pufont = 0;
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;
@ -527,16 +534,18 @@ FGFontCache::get(SGPropertyNode *node)
void FGFontCache::init()
{
if (!_initialized) {
char *envp = ::getenv("FG_FONTS");
if (envp != NULL) {
_path.set(envp);
} else {
_path.set(globals->get_fg_root());
_path.append("Fonts");
}
_initialized = true;
if (_initialized) {
return;
}
char *envp = ::getenv("FG_FONTS");
if (envp != NULL) {
_path.set(envp);
} else {
_path.set(globals->get_fg_root());
_path.append("Fonts");
}
_initialized = true;
}
SGPath
@ -552,7 +561,7 @@ FGFontCache::getfntpath(const char *name)
path = SGPath(_path);
path.append("Helvetica.txf");
SG_LOG(SG_GENERAL, SG_WARN, "Unknown font name '" << name << "', defaulting to Helvetica");
return path;
}
@ -569,9 +578,11 @@ bool FGFontCache::initializeFonts()
path.append(dirEntry->d_name);
if (path.extension() == fontext) {
fntTexFont* f = new fntTexFont;
if (f->load((char *)path.c_str()))
_texFonts[string(dirEntry->d_name)] = f;
else
if (f->load((char *)path.c_str())) {
// convert font names in the map to lowercase for matching
string fontName = boost::to_lower_copy(string(dirEntry->d_name));
_texFonts[fontName] = f;
} else
delete f;
}
}