diff --git a/Sources/Plasma/PubUtilLib/plGImage/plFont.cpp b/Sources/Plasma/PubUtilLib/plGImage/plFont.cpp index 6f2b7de7..c9a282fb 100644 --- a/Sources/Plasma/PubUtilLib/plGImage/plFont.cpp +++ b/Sources/Plasma/PubUtilLib/plGImage/plFont.cpp @@ -288,14 +288,14 @@ void plFont::IRenderString( plMipmap *mip, UInt16 x, UInt16 y, const wchar_t *st if( justCalc ) { - plCharacter& ch = fCharacters[fFirstChar]; - if (fCharacters.Count() <= ((UInt16)string[0] - fFirstChar)) + plCharacter& ch = fCharacters[(UInt16)L' ' - fFirstChar]; + if (fCharacters.Count() <= ((UInt16)string[0] - fFirstChar)) { if (wctob(string[0]) != EOF) ch = (fCharacters[(UInt16)wctob(string[0])]); - else - ch = (fCharacters[(UInt16)L' ' - fFirstChar]); - else + } else { ch = (fCharacters[(UInt16)string[0] - fFirstChar]); + } + fRenderInfo.fX = fRenderInfo.fFarthestX = x - (Int16)ch.fLeftKern; if( fRenderInfo.fX < 0 ) fRenderInfo.fX = 0; @@ -394,14 +394,13 @@ void plFont::IRenderString( plMipmap *mip, UInt16 x, UInt16 y, const wchar_t *st // Just calculating, no wrapping, so the max is as far as we can go // Note: 32767 isn't quite right, since we'll be adding the left kern in before we // calc the first character, so adjust so we make sure we don't underflow - plCharacter& ch = fCharacters[fFirstChar]; - if (fCharacters.Count() <= ((UInt16)string[0] - fFirstChar)) + plCharacter& ch = fCharacters[(UInt16)L' ' - fFirstChar]; + if (fCharacters.Count() <= ((UInt16)string[0] - fFirstChar)) { if (wctob(string[0]) != EOF) ch = (fCharacters[(UInt16)wctob(string[0])]); - else - ch = (fCharacters[(UInt16)L' ' - fFirstChar]); - else + } else { ch = (fCharacters[(UInt16)string[0] - fFirstChar]); + } fRenderInfo.fMaxHeight = (Int16)fMaxCharHeight; fRenderInfo.fMaxWidth = (Int16)32767 + (Int16)ch.fLeftKern; @@ -465,14 +464,13 @@ void plFont::IRenderString( plMipmap *mip, UInt16 x, UInt16 y, const wchar_t *st } // handle invalid chars discretely - plCharacter* charToDraw = NULL; - if (fCharacters.Count() <= ((UInt16)string[i] - fFirstChar)) + plCharacter* charToDraw = &(fCharacters[(UInt16)L' ' - fFirstchar]); + if (fCharacters.Count() <= ((UInt16)string[i] - fFirstChar)) { if (wctob(string[i]) != EOF) charToDraw = &(fCharacters[(UInt16)wctob(string[i])]); - else - charToDraw = &(fCharacters[(UInt16)L' ' - fFirstChar]); - else + } else { charToDraw = &(fCharacters[(UInt16)string[i] - fFirstChar]); + } Int16 leftKern = (Int16)charToDraw->fLeftKern; if( fRenderInfo.fFlags & kRenderScaleAA ) @@ -602,14 +600,13 @@ void plFont::IRenderString( plMipmap *mip, UInt16 x, UInt16 y, const wchar_t *st { Int16 baseX = fRenderInfo.fX; - plCharacter& ch = fCharacters[fFirstChar]; - if (fCharacters.Count() <= ((UInt16)string[0] - fFirstChar)) + plCharacter& ch = fCharacters[(UInt16)L' ' - fFirstChar]; + if (fCharacters.Count() <= ((UInt16)string[0] - fFirstChar)) { if (wctob(string[0]) != EOF) ch = (fCharacters[(UInt16)wctob(string[0])]); - else - ch = (fCharacters[(UInt16)L' ' - fFirstChar]); - else + } else { ch = (fCharacters[(UInt16)string[0] - fFirstChar]); + } fRenderInfo.fX -= (Int16)ch.fLeftKern; fRenderInfo.fDestPtr -= (Int16)ch.fLeftKern * fRenderInfo.fDestBPP;