Added: Possible to use multiple fonts at the same time

This commit is contained in:
Nimetu 2016-07-24 16:03:37 +03:00
parent eb877f41ad
commit 9f104a27ba
2 changed files with 54 additions and 1 deletions

View file

@ -586,8 +586,12 @@ namespace NLGUI
static NL3D::UDriver *driver; static NL3D::UDriver *driver;
static NL3D::UTextContext *textcontext; static NL3D::UTextContext *textcontext;
typedef CHashMap< std::string, NL3D::UTextContext* > TFontsList;
static TFontsList fonts;
public: public:
static NL3D::UTextContext* getTextContext(){ return textcontext; } static NL3D::UTextContext* getTextContext(const std::string &name="");
static bool registerFont(const std::string &name, const std::string &font);
/// Set of hw cursor images /// Set of hw cursor images
static std::set< std::string > *hwCursors; static std::set< std::string > *hwCursors;

View file

@ -34,6 +34,7 @@ namespace NLGUI
NL3D::UTextContext* CViewRenderer::textcontext = NULL; NL3D::UTextContext* CViewRenderer::textcontext = NULL;
std::set< std::string >* CViewRenderer::hwCursors = NULL; std::set< std::string >* CViewRenderer::hwCursors = NULL;
float CViewRenderer::hwCursorScale = 1.0f; float CViewRenderer::hwCursorScale = 1.0f;
CViewRenderer::TFontsList CViewRenderer::fonts;
CViewRenderer::CViewRenderer() CViewRenderer::CViewRenderer()
{ {
@ -214,17 +215,65 @@ namespace NLGUI
ite++; ite++;
} }
TFontsList::iterator iteFonts = fonts.begin();
while (iteFonts != fonts.end())
{
driver->deleteTextContext(iteFonts->second);
++iteFonts;
}
_GlobalTextures.clear(); _GlobalTextures.clear();
_SImages.clear(); _SImages.clear();
_SImageIterators.clear(); _SImageIterators.clear();
_TextureMap.clear(); _TextureMap.clear();
_IndexesToTextureIds.clear(); _IndexesToTextureIds.clear();
fonts.clear();
} }
NL3D::UDriver* CViewRenderer::getDriver(){ NL3D::UDriver* CViewRenderer::getDriver(){
return driver; return driver;
} }
// ***************************************************************************
NL3D::UTextContext* CViewRenderer::getTextContext(const std::string &name)
{
if (name.size() > 0 && fonts.count(name) > 0)
return fonts[name];
return textcontext;
}
// ***************************************************************************
bool CViewRenderer::registerFont(const std::string &name, const std::string &font)
{
nlassert(driver != NULL);
// free existing font
if (fonts.count(name) > 0)
driver->deleteTextContext(fonts[name]);
std::string fontFile = CPath::lookup(font, false);
if (fontFile.size() == 0)
{
nlwarning("Font file '%s' not found", font.c_str());
return false;
}
NL3D::UTextContext *context;
context = driver->createTextContext(fontFile);
if (context == NULL)
{
nlwarning("Cannot create a TextContext with font '%s'.", font.c_str());
return false;
}
context->setKeep800x600Ratio(false);
fonts[name] = context;
return true;
}
void CViewRenderer::setTextContext(NL3D::UTextContext *textcontext) void CViewRenderer::setTextContext(NL3D::UTextContext *textcontext)
{ {
CViewRenderer::textcontext = textcontext; CViewRenderer::textcontext = textcontext;