From b26a287a0b0baeb7d29d5f8d70045b554d6fd819 Mon Sep 17 00:00:00 2001 From: RD42 <42702181+dashr9230@users.noreply.github.com> Date: Tue, 13 Aug 2024 23:23:21 +0800 Subject: [PATCH] [saco] Implement/match `CFontRender::RenderText(...)` --- saco/fontrender.cpp | 34 ++++++++++++++++++++++++++++++++-- saco/fontrender.h | 2 +- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/saco/fontrender.cpp b/saco/fontrender.cpp index 6ae14a8..1fb3626 100644 --- a/saco/fontrender.cpp +++ b/saco/fontrender.cpp @@ -135,7 +135,37 @@ SIZE CFontRender::MeasureText2(char * szString, DWORD dwFormat) return ret; } -void CFontRender::RenderText(ID3DXSprite * pSprite, char * sz, RECT rect, DWORD dwColor, BOOL bShadowed) +void CFontRender::RenderText(ID3DXSprite *pSprite, char * sz, RECT rect, DWORD dwColor, BOOL bShadowed) { - // TODO: CFontRender::RenderText .text:1006B360 + if(sz == NULL || sz[0] == '\0') return; + + BOOL bLocalSprite = FALSE; + + if(!pSprite) { + pSprite = field_14; + bLocalSprite = TRUE; + pSprite->Begin( D3DXSPRITE_ALPHABLEND ); + } + + if(bShadowed) { + if (strlen(sz) > 100000) return; + strcpy(field_1C, sz); + RemoveColorEmbedsFromString(field_1C); + DWORD dwStrLen = (DWORD)strlen(field_1C); + + rect.top -= 1; + field_8->DrawText(pSprite,field_1C,dwStrLen,&rect,DT_NOCLIP|DT_LEFT,0xFF000000); + rect.top += 2; + field_8->DrawText(pSprite,field_1C,dwStrLen,&rect,DT_NOCLIP|DT_LEFT,0xFF000000); + rect.top -= 1; + rect.left -= 1; + field_8->DrawText(pSprite,field_1C,dwStrLen,&rect,DT_NOCLIP|DT_LEFT,0xFF000000); + rect.left += 2; + field_8->DrawText(pSprite,field_1C,dwStrLen,&rect,DT_NOCLIP|DT_LEFT,0xFF000000); + rect.left -= 1; + } + field_0->DrawText(pSprite,sz,-1,&rect,DT_NOCLIP|DT_LEFT,dwColor); + + if(bLocalSprite) + pSprite->End(); } diff --git a/saco/fontrender.h b/saco/fontrender.h index d72d2a5..c62315e 100644 --- a/saco/fontrender.h +++ b/saco/fontrender.h @@ -27,5 +27,5 @@ public: SIZE MeasureText(char * szString, DWORD dwFormat = DT_LEFT); SIZE MeasureText2(char * szString, DWORD dwFormat = DT_LEFT); - void RenderText(ID3DXSprite * pSprite, char * sz, RECT rect, DWORD dwColor, BOOL bShadowed = TRUE); + void RenderText(ID3DXSprite *pSprite, char * sz, RECT rect, DWORD dwColor, BOOL bShadowed=TRUE); };