/** * CBitmapFont::drawStringMarkup * @date Modified Mar 29, 2006 */ void CBitmapFont::drawStringMarkup(CString str, float fX, float fY, D3DCOLOR dwColor, bool bHandleSprite) { CRenderDevice& oDev = CRenderSystem::getInstance().getRenderDevice(); LPD3DXSPRITE pSprite = oDev.getD3DXSprite(); RECT rChar; char cChar; D3DXVECTOR3 vPos, vZero; vPos.x = fX; vPos.y = fY; vPos.z = 0.0f; vZero.x = vZero.y = vZero.z = 0.0f; if(bHandleSprite) beginSprite(); // Split strings bool bFirst = false; std::vector<CString> vStrings; str.ToList(vStrings, TEXT("{}")); if(str.GetChar(0) == '{') bFirst = true; // Iterate split strings, and change color if needed. for(size_t v = 0; v < vStrings.size(); ++v) { // Get string, and read color if((bFirst && v % 2 == 0) || (!bFirst && v % 2 == 1)) { dwColor = vStrings[v].ToUlongFromHex(); continue; } // Iterate string and draw characters. size_t nSize = vStrings[v].GetLength(); for(size_t i = 0; i < nSize; ++i) { cChar = vStrings[v].GetChar(i); switch(cChar) { case '\n': vPos.y += m_cLineHeight; vPos.x = fX; break; case '\t': vPos.x += m_mCharMap['X'] * 4; break; default: getCharRect(cChar, &rChar); pSprite->Draw(m_poTexture->getD3DTexture(), &rChar, NULL, &vPos, dwColor); vPos.x += (rChar.right - rChar.left); break; } } } if(bHandleSprite) endSprite(); }
/** * CBitmapFont::drawString * @date Modified Mar 29, 2006 */ void CBitmapFont::drawString(CString str, float fX, float fY, D3DCOLOR dwColor, bool bHandleSprite) { CRenderDevice& oDev = CRenderSystem::getInstance().getRenderDevice(); LPD3DXSPRITE pSprite = oDev.getD3DXSprite(); RECT rChar; char cChar; D3DXVECTOR3 vPos, vZero; vPos.x = fX; vPos.y = fY; vPos.z = 0.0f; vZero.x = vZero.y = vZero.z = 0.0f; if(bHandleSprite) beginSprite(); // Iterate string and draw characters. size_t nSize = str.GetLength(); for(size_t i = 0; i < nSize; ++i) { cChar = str.GetChar(i); switch(cChar) { case '\n': vPos.y += m_cLineHeight; vPos.x = fX; break; case '\t': vPos.x += m_mCharMap['X'] * 4; break; default: getCharRect(str.GetChar(i), &rChar); pSprite->Draw(m_poTexture->getD3DTexture(), &rChar, NULL, &vPos, dwColor); vPos.x += (rChar.right - rChar.left); break; } } if(bHandleSprite) endSprite(); }
/** * CBitmapFont::measureString * @date Modified Apr 04, 2006 */ unsigned int CBitmapFont::measureString(CString sString, RECT* pRect) { RECT rVal = {0}; char cChar; for(size_t i = 0; i < sString.GetLength(); ++i) { cChar = sString.GetChar(i); switch(cChar) { case '\r': case '\n': rVal.bottom += m_cLineHeight; break; case '\t': rVal.right += m_mCharMap['X'] * 4; default: rVal.right += m_mCharMap[cChar]; break; } } if(pRect) *pRect = rVal; return rVal.right; }