Example #1
0
/**
* 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();
}
Example #2
0
/**
* 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();
}
Example #3
0
/**
* 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;
}