diff options
author | tamland <thomas.amland@gmail.com> | 2015-02-07 13:34:18 +0100 |
---|---|---|
committer | tamland <thomas.amland@gmail.com> | 2015-02-07 13:34:18 +0100 |
commit | 6c1b379e2cc1db1fc73637e64833d477a74edeef (patch) | |
tree | 6eb26ed0e1e37d0514c54c2ea8accc5dc3ca5824 | |
parent | 0867f2d4aa4b10f6f975c0b4db4535cf47c2c3dc (diff) | |
parent | a29068e84dbad2173c677ffb5adc461948d49098 (diff) |
Merge pull request #6140 from tamland/justifyfix
text rendering: dont change character spacing on justify
-rw-r--r-- | xbmc/guilib/GUIFontTTF.cpp | 22 | ||||
-rw-r--r-- | xbmc/guilib/GUIFontTTF.h | 2 |
2 files changed, 10 insertions, 14 deletions
diff --git a/xbmc/guilib/GUIFontTTF.cpp b/xbmc/guilib/GUIFontTTF.cpp index b67a8b5ed6..a16d3db162 100644 --- a/xbmc/guilib/GUIFontTTF.cpp +++ b/xbmc/guilib/GUIFontTTF.cpp @@ -53,9 +53,6 @@ using namespace std; #define CHARS_PER_TEXTURE_LINE 20 // number of characters to cache per texture line #define CHAR_CHUNK 64 // 64 chars allocated at a time (1024 bytes) -int CGUIFontTTFBase::justification_word_weight = 6; // weight of word spacing over letter spacing when justifying. - // A larger number means more of the "dead space" is placed between - // words rather than between letters. class CFreeTypeLibrary { @@ -423,26 +420,27 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors startX -= w; } - float spacePerLetter = 0; // for justification effects + float spacePerSpaceCharacter = 0; // for justification effects if ( alignment & XBFONT_JUSTIFIED ) { // first compute the size of the text to render in both characters and pixels - unsigned int lineChars = 0; + unsigned int numSpaces = 0; float linePixels = 0; for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos) { Character *ch = GetCharacter(*pos); if (ch) - { // spaces have multiple times the justification spacing of normal letters - lineChars += ((*pos & 0xffff) == L' ') ? justification_word_weight : 1; + { + if ((*pos & 0xffff) == L' ') + numSpaces += 1; linePixels += ch->advance; } } - if (lineChars > 1) - spacePerLetter = (maxPixelWidth - linePixels) / (lineChars - 1); + if (numSpaces > 0) + spacePerSpaceCharacter = (maxPixelWidth - linePixels) / numSpaces; } - float cursorX = 0; // current position along the line + float cursorX = 0; // current position along the line for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos) { // If starting text on a new line, determine justification effects @@ -482,9 +480,9 @@ void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors if ( alignment & XBFONT_JUSTIFIED ) { if ((*pos & 0xffff) == L' ') - cursorX += ch->advance + spacePerLetter * justification_word_weight; + cursorX += ch->advance + spacePerSpaceCharacter; else - cursorX += ch->advance + spacePerLetter; + cursorX += ch->advance; } else cursorX += ch->advance; diff --git a/xbmc/guilib/GUIFontTTF.h b/xbmc/guilib/GUIFontTTF.h index 29eac0bb07..c7af7ef64d 100644 --- a/xbmc/guilib/GUIFontTTF.h +++ b/xbmc/guilib/GUIFontTTF.h @@ -184,8 +184,6 @@ protected: float m_textureScaleX; float m_textureScaleY; - static int justification_word_weight; - std::string m_strFileName; XUTILS::auto_buffer m_fontFileInMemory; // used only in some cases, see CFreeTypeLibrary::GetFont() |