SA-MP/saco/fontrender.cpp

142 lines
3.4 KiB
C++

#include "main.h"
#include "game/util.h"
int GetFontSize();
int GetFontWeight();
char *GetFontFace();
//----------------------------------------------------
CFontRender::CFontRender(IDirect3DDevice9* pD3DDevice)
{
m_pD3DDevice = pD3DDevice;
field_0 = NULL;
field_4 = NULL;
field_8 = NULL;
field_C = NULL;
field_14 = NULL;
field_10 = NULL;
CreateFonts();
}
CFontRender::~CFontRender()
{
SAFE_RELEASE(field_0);
SAFE_RELEASE(field_4);
SAFE_RELEASE(field_8);
SAFE_RELEASE(field_C);
SAFE_RELEASE(field_14);
SAFE_RELEASE(field_10);
}
void CFontRender::CreateFonts()
{
if(!m_pD3DDevice) return;
SAFE_RELEASE(field_0);
SAFE_RELEASE(field_4);
SAFE_RELEASE(field_8);
SAFE_RELEASE(field_C);
SAFE_RELEASE(field_14);
SAFE_RELEASE(field_10);
int iFontSize = GetFontSize();
int iFontSize2 = iFontSize - 2;
int iFontWeight = GetFontWeight();
char *szFontFace = GetFontFace();
ID3DXFont* pFont;
D3DXCreateFont(m_pD3DDevice, iFontSize, 0, iFontWeight, 1, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH, szFontFace, &pFont);
ID3DXFontHook *pFontHook = new ID3DXFontHook();
pFontHook->m_pD3DFont = pFont;
field_0 = pFontHook;
D3DXCreateFont(m_pD3DDevice, iFontSize, 0, iFontWeight, 1, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH, szFontFace, &field_8);
D3DXCreateFont(m_pD3DDevice, iFontSize2, 0, iFontWeight, 1, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH, szFontFace, &pFont);
ID3DXFontHook *pFontHook2 = new ID3DXFontHook();
pFontHook2->m_pD3DFont = pFont;
field_4 = pFontHook2;
D3DXCreateFontA(m_pD3DDevice, iFontSize2, 0, iFontWeight, 1, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH, szFontFace, &field_C);
D3DXCreateSprite(m_pD3DDevice, &field_14);
field_1C = (char*)calloc(1u, 100001);
D3DXCreateFontA(m_pD3DDevice, 38, 10, FW_BOLD, 1, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH, "Arial", &field_10);
ID3DXFontHook *pFontHook3 = new ID3DXFontHook();
pFontHook3->m_pD3DFont = field_10;
field_10 = pFontHook3;
field_20 = MeasureText("Y").cy;
field_24 = MeasureText2("Y").cy;
}
void CFontRender::DeleteDeviceObjects()
{
field_0->OnLostDevice();
field_4->OnLostDevice();
field_8->OnLostDevice();
field_C->OnLostDevice();
field_14->OnLostDevice();
field_10->OnLostDevice();
}
void CFontRender::RestoreDeviceObjects()
{
field_0->OnResetDevice();
field_4->OnResetDevice();
field_8->OnResetDevice();
field_C->OnResetDevice();
field_14->OnResetDevice();
field_10->OnResetDevice();
}
SIZE CFontRender::MeasureText(char * szString, DWORD dwFormat)
{
RECT rect;
SIZE ret = {0, 0};
if(strlen(szString) > 100000) return ret;
strcpy(field_1C,szString);
RemoveColorEmbedsFromString(field_1C);
field_0->DrawTextA(NULL,field_1C,-1,&rect,dwFormat|DT_CALCRECT,0xFF000000);
ret.cx = rect.right - rect.left;
ret.cy = rect.bottom - rect.top;
return ret;
}
SIZE CFontRender::MeasureText2(char * szString, DWORD dwFormat)
{
RECT rect;
SIZE ret = {0, 0};
if(strlen(szString) > 100000) return ret;
strcpy(field_1C,szString);
RemoveColorEmbedsFromString(field_1C);
field_4->DrawTextA(NULL,field_1C,-1,&rect,dwFormat|DT_CALCRECT,0xFF000000);
ret.cx = rect.right - rect.left;
ret.cy = rect.bottom - rect.top;
return ret;
}
void CFontRender::RenderText(ID3DXSprite * pSprite, char * sz, RECT rect, DWORD dwColor, BOOL bShadowed)
{
// TODO: CFontRender::RenderText .text:1006B360
}