构想:
一个AVGDIALOG控件其中的每一个字符都是一个avgString类,派生于avgWidget.
类属性:
std::wstring m_string;//这个字符串类所代表的字符串
avgFont *m_font;//一个字体类,它将由资源管理器生成 m_font = DataManager::Singleton().GetFreeTypeFont("fontname");
HGE *m_hge;
hgeSprite *m_charsprite;
FONTTYPE m_fontType;
bool ke
enum FONTTYPE
{
FONTTYPE_FREETYPE,//FREETYPE字体
FONTTYPE_PNGCHAR,//用图的形式储存字符
FONTTYPE_PNG//图片,用于特殊的预先设计好的文字
}
方法:
avgChar( char* a_fontname , std::wstring a_string, CHARSETTYPE a_charType/*是FREETYPE字体还是图片或者是图形字体集合*/ )
{
switch( a_charType )
{
case FONTTYPE_FREETYPE:
m_font = DataManager::Singleton().GetFreeTypeFont(a_fontname);
m_font->CacheChars( a_string );//缓冲字体
}
}
void avgChar::Draw() //用于绘制字体
{
switch( m_fonttype )
{
case FONTTYPE_FREETYPE:
DrawFreeTypeChars();
case FONTTYPE_PNGCHAR:
DrawPngChars();
case FONTTYPE_PNG:
DrawPng();
}
void avgChar::DrawFreeTypeChars( std::wstring a_string )
{
std::size_t p_len = a_string.lenght();
for( size_t i = 0; i <p_len ; i++)
{
DrawFreeTypeChar( a_string.at(i) );
}
}
void avgChar::DrawFreeTypeChar( wchar_t a_charCode )//绘制单个字符
{
CacheEntry* p_theGlyph = getCacheEntry( a_charCode );
if (NULL == p_theGlyph || NULL == p_theGlyph->Texture)
return false;
m_charsprite->SetTexture( p_theGlyph->Texture );
m_charsprite->RenderEx();//参数还未设
m_cgarsprite->SetHotSpot(0.0f, 0.0f);
}