mirror of
https://github.com/dashr9230/SA-MP.git
synced 2024-11-27 16:30:44 +00:00
142 lines
3.4 KiB
C++
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
|
|
}
|