#ifdef USE_D3D9
D3D9Font::D3D9Font()
{
_Font = NULL;
_Device = NULL;
}
D3D9Font::~D3D9Font()
{
FreeMemory();
}
void D3D9Font::FreeMemory()
{
if(_Font)
{
_Font->Release();
_Font = NULL;
}
_Device = NULL;
}
void D3D9Font::ReleaseMemory()
{
FreeMemory();
}
void D3D9Font::Reset(GraphicsDevice &graphics)
{
FreeMemory();
_Device = graphics.CastD3D9().GetDevice();
Assert(_Device != NULL, "Device == NULL");
HRESULT hr;
hr = D3DXCreateFont(
_Device,
_FontHeight, 0, _FontWeight, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, _FontName.CString(), &_Font); Assert(SUCCEEDED(hr) && _Font != NULL, "D3DXCreateFont failed");
}
void D3D9Font::Init(GraphicsDevice &graphics, const String &FontName, int FontHeight, int FontWeight)
{
_FontName = FontName;
_FontHeight = FontHeight;
_FontWeight = FontWeight;
Reset(graphics);
}
void D3D9Font::DrawString(const String &Text, const Vec2i &TopLeft, RGBColor Color) const
{
Rectangle2i Rect(Rectangle2i(TopLeft, Vec2i(TopLeft.x + 2048, TopLeft.y)));
DrawString(Text, Rect, Color);
}
void D3D9Font::DrawString(const String &Text, const Vec2i &TopLeft, UINT Width, RGBColor Color) const
{
Rectangle2i Rect(Rectangle2i(TopLeft, Vec2i(TopLeft.x + Width, TopLeft.y)));
DrawString(Text, Rect, Color);
}
void D3D9Font::DrawString(const String &Text, const Rectangle2i &Rect, RGBColor Color) const
{
RECT CurRect = Rect.ToRect();
HRESULT CoopLevel = _Device->TestCooperativeLevel();
if(CoopLevel == D3D_OK)
{
_Font->DrawText( NULL, Text.CString(), Text.Length(), &CurRect, DT_WORDBREAK | DT_CALCRECT, 0 );
_Font->DrawText( NULL, Text.CString(), Text.Length(), &CurRect, DT_WORDBREAK | DT_NOCLIP, D3DXCOLOR(Color.r / 255.0f, Color.g / 255.0f, Color.b / 255.0f, 1.0f ));
}
}
#endif