diff --git a/stepmania/src/BitmapText.cpp b/stepmania/src/BitmapText.cpp index e0ab0d795c..54f6e84e64 100644 --- a/stepmania/src/BitmapText.cpp +++ b/stepmania/src/BitmapText.cpp @@ -129,6 +129,7 @@ void BitmapText::BuildChars() /* calculate line lengths and widths */ m_iWidestLineWidth = 0; + m_iLineWidths.clear(); for( unsigned l=0; lGetLineWidthInSourcePixels( m_szTextLines[l] )); @@ -218,11 +219,25 @@ void BitmapText::DrawChars() } } -/* sText is UTF-8. */ -void BitmapText::SetText( CString sText ) +/* sText is UTF-8. If PREFSMAN->UseAlternateText is enabled, and not all + * of the characters in sText are available in the font, sAlternateText + * will be used instead. This is normally enabled; the option exists + * as a troubleshooting option (so should only be shown in a debug options + * menu) for the case that a string isn't being displayed, to find out + * which character is causing problems. If there are unavailable characters + * in sAlternateText, too, just use sText. + * XXX: implement PREFSMAN->UseAlternateText */ +void BitmapText::SetText( CString sText, CString sAlternateText ) { ASSERT( m_pFont ); + if(sAlternateText.size()) + { + if(!m_pFont->FontCompleteForString(CStringToWstring(sText)) && + m_pFont->FontCompleteForString(CStringToWstring(sAlternateText))) + sText = sAlternateText; + } + if(m_szText == sText) return; @@ -230,9 +245,7 @@ void BitmapText::SetText( CString sText ) /* Break the string into lines. */ m_szTextLines.clear(); - m_iLineWidths.clear(); - - split(CStringToWstring(sText), L"\n", m_szTextLines, false); + split(CStringToWstring(m_szText), L"\n", m_szTextLines, false); BuildChars(); } diff --git a/stepmania/src/BitmapText.h b/stepmania/src/BitmapText.h index 87d44b99b2..71023e79d0 100644 --- a/stepmania/src/BitmapText.h +++ b/stepmania/src/BitmapText.h @@ -26,7 +26,7 @@ public: bool LoadFromFont( CString sFontName ); bool LoadFromNumbers( CString sTexturePath ) { return LoadFromTextureAndChars(sTexturePath,"0123456789%. :x"); }; bool LoadFromTextureAndChars( CString sTexturePath, CString sChars ); - void SetText( CString sText ); + void SetText( CString sText, CString sAlternateText = "" ); int GetWidestLineWidthInSourcePixels() { return m_iWidestLineWidth; }; void CropToWidth( int iWidthInSourcePixels ); @@ -39,8 +39,9 @@ public: void SetHorizAlign( HorizAlign ha ); void SetVertAlign( VertAlign va ); + CString GetText() const { return m_szText; } + public: - CString m_sFontFilePath; Font* m_pFont; protected: