Better title font to all languages
I tested all language, all of the them only needs 2 glyph page to load their needed chars.
This commit is contained in:
parent
786bc5d5b6
commit
a756f9f90e
@ -92,7 +92,7 @@ void getFontProperties::loadChar(const core::stringc langname, FontUse& fu, floa
|
|||||||
fu = F_DEFAULT; //Default font file
|
fu = F_DEFAULT; //Default font file
|
||||||
|
|
||||||
usedchar = translations->getCurrentAllChar(); //Loading unique characters
|
usedchar = translations->getCurrentAllChar(); //Loading unique characters
|
||||||
for (int i = 33; i < 256; ++i)
|
for (int i = 32; i < 256; ++i)
|
||||||
usedchar.insert((wchar_t)i); //Include basic Latin too
|
usedchar.insert((wchar_t)i); //Include basic Latin too
|
||||||
usedchar.insert((wchar_t)160); //Non-breaking space
|
usedchar.insert((wchar_t)160); //Non-breaking space
|
||||||
usedchar.insert((wchar_t)215); //Used on resolution selection screen (X).
|
usedchar.insert((wchar_t)215); //Used on resolution selection screen (X).
|
||||||
@ -115,27 +115,28 @@ void getFontProperties::loadBoldChar(float scale)
|
|||||||
{
|
{
|
||||||
size = (int)(120*scale); //Set default size for Bold Text
|
size = (int)(120*scale); //Set default size for Bold Text
|
||||||
|
|
||||||
//Start to insert from 65 (char code of A) to 640 which is the end+1 of latin-extended-B
|
usedchar = translations->getCurrentAllChar(); //Loading unique characters
|
||||||
for (int i = 65; i < 640; ++i)
|
for (int i = 65; i < 256; ++i)
|
||||||
usedchar.insert((wchar_t)i);
|
usedchar.insert((wchar_t)i); //Include basic Latin too, starting from A (char code 65)
|
||||||
|
|
||||||
setlocale(LC_ALL, "en_US.UTF8");
|
setlocale(LC_ALL, "en_US.UTF8");
|
||||||
std::set<wchar_t>::iterator it = usedchar.begin();
|
std::set<wchar_t>::iterator it = usedchar.begin();
|
||||||
while (it != usedchar.end())
|
while (it != usedchar.end())
|
||||||
{
|
{
|
||||||
if (iswlower((wchar_t)*it) || !iswalpha((wchar_t)*it))
|
//Only use all capital letter for bold char with latin (<640 of char code).
|
||||||
|
if ((iswlower((wchar_t)*it) || !iswalpha((wchar_t)*it)) && *it < 640)
|
||||||
it = usedchar.erase(it);
|
it = usedchar.erase(it);
|
||||||
else
|
else
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Final hack to make stk display title properly
|
//Final hack to make stk display title properly
|
||||||
//33 , 160, 304 is char code to "!", Non-breaking space, and Capital I-dotted
|
for (int i = 32; i < 65; ++i)
|
||||||
//Remove Capital I-dotted with using "I" altogether.
|
usedchar.insert((wchar_t)i); //Include basic symbol (from space (char code 32) to @(char code 64))
|
||||||
|
usedchar.insert((wchar_t)160); //Non-breaking space
|
||||||
usedchar.insert((wchar_t)33);
|
usedchar.erase((wchar_t)170);
|
||||||
usedchar.insert((wchar_t)160);
|
usedchar.erase((wchar_t)186); //Remove Ordinal indicator (char code 170 and 186)
|
||||||
usedchar.erase((wchar_t)304);
|
usedchar.erase((wchar_t)304); //Remove Capital I-dotted (char code 304) with using "I" altogether.
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end namespace gui
|
} // end namespace gui
|
||||||
|
@ -391,7 +391,9 @@ bool ScalableFont::loadTTF()
|
|||||||
u32 texno = 0;
|
u32 texno = 0;
|
||||||
SpriteBank->addTexture(NULL);
|
SpriteBank->addTexture(NULL);
|
||||||
gp_creator->createNewGlyphPage();
|
gp_creator->createNewGlyphPage();
|
||||||
for (it = cur_prop.usedchar.begin(); it != cur_prop.usedchar.end(); ++it)
|
|
||||||
|
it = cur_prop.usedchar.begin();
|
||||||
|
while (it != cur_prop.usedchar.end())
|
||||||
{
|
{
|
||||||
SGUISpriteFrame f;
|
SGUISpriteFrame f;
|
||||||
SGUISprite s;
|
SGUISprite s;
|
||||||
@ -469,13 +471,16 @@ bool ScalableFont::loadTTF()
|
|||||||
SpriteBank->setTexture(texno, Driver->addTexture("Glyph_page", gp_creator->getPage()));
|
SpriteBank->setTexture(texno, Driver->addTexture("Glyph_page", gp_creator->getPage()));
|
||||||
gp_creator->clearGlyphPage();
|
gp_creator->clearGlyphPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (*it == (wchar_t)32 && SpriteBank->getPositions().size() == 1)
|
||||||
|
continue; //Preventing getAreaIDFromCharacter of whitespace == 0, which make space disappear
|
||||||
|
else ++it;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Fix unused glyphs....
|
//Fix unused glyphs....
|
||||||
if (m_type == T_NORMAL || T_BOLD)
|
if (m_type == T_NORMAL || T_BOLD)
|
||||||
{
|
{
|
||||||
CharacterMap[(wchar_t)32] = getAreaIDFromCharacter((wchar_t)160, NULL); //Use non-breaking space glyph to all space/tab characters.
|
CharacterMap[(wchar_t)9] = getAreaIDFromCharacter((wchar_t)160, NULL); //Use non-breaking space glyph to tab.
|
||||||
CharacterMap[(wchar_t)9] = getAreaIDFromCharacter((wchar_t)160, NULL);
|
|
||||||
CharacterMap[(wchar_t)173] = 0; //Don't need a glyph for the soft hypen, as it only print when not having enough space.
|
CharacterMap[(wchar_t)173] = 0; //Don't need a glyph for the soft hypen, as it only print when not having enough space.
|
||||||
//And then it will convert to a "-".
|
//And then it will convert to a "-".
|
||||||
|
|
||||||
@ -491,7 +496,7 @@ bool ScalableFont::loadTTF()
|
|||||||
setlocale(LC_ALL, "en_US.UTF8");
|
setlocale(LC_ALL, "en_US.UTF8");
|
||||||
for (it = cur_prop.usedchar.begin(); it != cur_prop.usedchar.end(); ++it)
|
for (it = cur_prop.usedchar.begin(); it != cur_prop.usedchar.end(); ++it)
|
||||||
{
|
{
|
||||||
if (iswupper((wchar_t)*it))
|
if (iswupper((wchar_t)*it) && *it < 640)
|
||||||
CharacterMap[towlower((wchar_t)*it)] = getAreaIDFromCharacter(*it, NULL);
|
CharacterMap[towlower((wchar_t)*it)] = getAreaIDFromCharacter(*it, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -510,11 +515,11 @@ bool ScalableFont::loadTTF()
|
|||||||
//at the bottom line, so no addition is required, but if we can make draw2dimage draw
|
//at the bottom line, so no addition is required, but if we can make draw2dimage draw
|
||||||
//characters close to the bottom line too, than only one offsety is needed.
|
//characters close to the bottom line too, than only one offsety is needed.
|
||||||
|
|
||||||
if (!n) //Skip soft hypen and space
|
if (!n) //Skip width-less characters
|
||||||
a.bearingx = 0;
|
a.bearingx = 0;
|
||||||
else
|
else
|
||||||
a.bearingx = bx.at(n);
|
a.bearingx = bx.at(n);
|
||||||
if (!n) //Skip soft hypen and space
|
if (!n) //Skip width-less characters
|
||||||
a.width = 0;
|
a.width = 0;
|
||||||
else
|
else
|
||||||
a.width = advance.at(n);
|
a.width = advance.at(n);
|
||||||
|
@ -333,6 +333,7 @@ void OptionsScreenUI::eventCallback(Widget* widget, const std::string& name, con
|
|||||||
//Reload fonts for new translation when using freetype
|
//Reload fonts for new translation when using freetype
|
||||||
GUIEngine::cleanHollowCopyFont();
|
GUIEngine::cleanHollowCopyFont();
|
||||||
GUIEngine::getFont()->recreateFromLanguage();
|
GUIEngine::getFont()->recreateFromLanguage();
|
||||||
|
GUIEngine::getTitleFont()->recreateFromLanguage();
|
||||||
GUIEngine::reloadHollowCopyFont(GUIEngine::getFont());
|
GUIEngine::reloadHollowCopyFont(GUIEngine::getFont());
|
||||||
#endif // ENABLE_FREETYPE
|
#endif // ENABLE_FREETYPE
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user