summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2021-01-18 13:55:48 +0100
committerSergeanur <s.anureev@yandex.ua>2021-01-18 13:55:48 +0100
commit8395704dc6a5159b1a28d413e28e4f9fa70996c0 (patch)
tree69fbe0c6ff2d4f3acc19380e492e5c62eeb6f4a7
parentfont (diff)
downloadre3-8395704dc6a5159b1a28d413e28e4f9fa70996c0.tar
re3-8395704dc6a5159b1a28d413e28e4f9fa70996c0.tar.gz
re3-8395704dc6a5159b1a28d413e28e4f9fa70996c0.tar.bz2
re3-8395704dc6a5159b1a28d413e28e4f9fa70996c0.tar.lz
re3-8395704dc6a5159b1a28d413e28e4f9fa70996c0.tar.xz
re3-8395704dc6a5159b1a28d413e28e4f9fa70996c0.tar.zst
re3-8395704dc6a5159b1a28d413e28e4f9fa70996c0.zip
Diffstat (limited to '')
-rw-r--r--src/render/Font.cpp730
-rw-r--r--src/render/Font.h105
2 files changed, 462 insertions, 373 deletions
diff --git a/src/render/Font.cpp b/src/render/Font.cpp
index 60c6e231..01068dae 100644
--- a/src/render/Font.cpp
+++ b/src/render/Font.cpp
@@ -403,6 +403,166 @@ bool CFont::IsAnsiCharacter(wchar *s)
#endif
void
+CFont::RenderFontBuffer()
+{
+ if (FontRenderStatePointer.pRenderState == (CFontRenderState*)FontRenderStateBuf) return;
+
+ float textPosX;
+ float textPosY;
+ CRGBA color;
+ bool bBold = false;
+ bool bFlash = false;
+
+ Sprite[RenderState.style].SetRenderState();
+ RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
+ RenderState = *(CFontRenderState*)&FontRenderStateBuf[0];
+ textPosX = RenderState.fTextPosX;
+ textPosY = RenderState.fTextPosY;
+ color = RenderState.color;
+ tFontRenderStatePointer pRenderStateBufPointer;
+ pRenderStateBufPointer.pRenderState = (CFontRenderState*)&FontRenderStateBuf[0];
+ for (++pRenderStateBufPointer.pRenderState; pRenderStateBufPointer.pStr < FontRenderStatePointer.pStr; pRenderStateBufPointer.pStr++) {
+ if (*pRenderStateBufPointer.pStr == '\0') {
+ tFontRenderStatePointer tmpPointer = pRenderStateBufPointer;
+ tmpPointer.pStr++;
+ tmpPointer.Align();
+ if (tmpPointer.pStr >= FontRenderStatePointer.pStr)
+ break;
+
+ RenderState = *(tmpPointer.pRenderState++);
+
+ pRenderStateBufPointer = tmpPointer;
+
+ textPosX = RenderState.fTextPosX;
+ textPosY = RenderState.fTextPosY;
+ color = RenderState.color;
+ }
+ if (*pRenderStateBufPointer.pStr == '~') {
+#ifdef BUTTON_ICONS
+ PS2Symbol = BUTTON_NONE;
+#endif
+ pRenderStateBufPointer.pStr = ParseToken(pRenderStateBufPointer.pStr, color, bFlash, bBold);
+#ifdef BUTTON_ICONS
+ if(PS2Symbol != BUTTON_NONE) {
+ DrawButton(textPosX, textPosY);
+ textPosX += Details.scaleY * 17.0f;
+ PS2Symbol = BUTTON_NONE;
+ }
+#endif
+ if (bFlash) {
+ if (CTimer::GetTimeInMilliseconds() - Details.nFlashTimer > 300) {
+ Details.bFlashState = !Details.bFlashState;
+ Details.nFlashTimer = CTimer::GetTimeInMilliseconds();
+ }
+ Details.color.alpha = Details.bFlashState ? 0 : 255;
+ }
+ if (!RenderState.bIsShadow)
+ RenderState.color = color;
+ }
+ wchar c = *pRenderStateBufPointer.pStr;
+ c -= ' ';
+ if (RenderState.bFontHalfTexture)
+ c = FindNewCharacter(c);
+ else if (c > 155)
+ c = '\0';
+
+ if (RenderState.slant != 0.0f)
+ textPosY = (RenderState.slantRefX - textPosX) * RenderState.slant + RenderState.slantRefY;
+ PrintChar(textPosX, textPosY, c);
+ if (bBold) {
+ PrintChar(textPosX + 1.0f, textPosY, c);
+ PrintChar(textPosX + 2.0f, textPosY, c);
+ textPosX += 2.0f;
+ }
+#ifdef FIX_BUGS
+ // PS2 uses different chars for some symbols
+ if (!RenderState.bFontHalfTexture && c == 30) c = 61; // wanted star
+#endif
+ textPosX += RenderState.scaleX * GetCharacterWidth(c);
+ if (c == '\0')
+ textPosX += RenderState.fExtraSpace;
+ }
+ CSprite2d::RenderVertexBuffer();
+ FontRenderStatePointer.pRenderState = (CFontRenderState*)FontRenderStateBuf;
+}
+
+void
+CFont::PrintString(float x, float y, uint32, wchar *start, wchar *end, float spwidth)
+{
+ wchar *s;
+
+ if (RenderState.style != Details.style) {
+ RenderFontBuffer();
+ RenderState.style = Details.style;
+ }
+
+ float dropShadowPosition = Details.dropShadowPosition;
+ if (dropShadowPosition != 0.0f && (Details.style == FONT_BANK || Details.style == FONT_STANDARD)) {
+ CRGBA color = Details.color;
+ Details.color = Details.dropColor;
+ Details.dropShadowPosition = 0;
+ Details.bIsShadow = true;
+ if (Details.slant != 0.0f) {
+ Details.slantRefX += SCREEN_SCALE_X(dropShadowPosition);
+ Details.slantRefY += SCREEN_SCALE_Y(dropShadowPosition);
+ PrintString(SCREEN_SCALE_X(dropShadowPosition) + x, SCREEN_SCALE_Y(dropShadowPosition) + y, Details.anonymous_25, start, end, spwidth);
+ Details.slantRefX -= SCREEN_SCALE_X(dropShadowPosition);
+ Details.slantRefY -= SCREEN_SCALE_Y(dropShadowPosition);
+ } else {
+ PrintString(SCREEN_SCALE_X(dropShadowPosition) + x, SCREEN_SCALE_Y(dropShadowPosition) + y, Details.anonymous_25, start, end, spwidth);
+ }
+ Details.color = color;
+ Details.dropShadowPosition = dropShadowPosition;
+ Details.bIsShadow = false;
+ }
+ if (FontRenderStatePointer.pStr >= (wchar*)&FontRenderStateBuf[ARRAY_SIZE(FontRenderStateBuf)] - (end - start + 26)) // why 26?
+ RenderFontBuffer();
+ CFontRenderState *pRenderState = FontRenderStatePointer.pRenderState;
+ pRenderState->fTextPosX = x;
+ pRenderState->fTextPosY = y;
+ pRenderState->scaleX = Details.scaleX;
+ pRenderState->scaleY = Details.scaleY;
+ pRenderState->color = Details.color;
+ pRenderState->fExtraSpace = spwidth;
+ pRenderState->slant = Details.slant;
+ pRenderState->slantRefX = Details.slantRefX;
+ pRenderState->slantRefY = Details.slantRefY;
+ pRenderState->bFontHalfTexture = Details.bFontHalfTexture;
+ pRenderState->proportional = Details.proportional;
+ pRenderState->style = Details.style;
+ pRenderState->bIsShadow = Details.bIsShadow;
+ FontRenderStatePointer.pRenderState++;
+
+ for(s = start; s < end;){
+ if (*s == '~') {
+ for (wchar *i = ParseToken(s); s != i; FontRenderStatePointer.pStr++) {
+ *FontRenderStatePointer.pStr = *(s++);
+ }
+ if (Details.bFlash) {
+ if (CTimer::GetTimeInMilliseconds() - Details.nFlashTimer > 300) {
+ Details.bFlashState = !Details.bFlashState;
+ Details.nFlashTimer = CTimer::GetTimeInMilliseconds();
+ }
+ Details.color.a = Details.bFlashState ? 0 : 255;
+ }
+ } else
+ *(FontRenderStatePointer.pStr++) = *(s++);
+ }
+ *(FontRenderStatePointer.pStr++) = '\0';
+ FontRenderStatePointer.Align();
+}
+
+void
+CFont::PrintStringFromBottom(float x, float y, wchar *str)
+{
+ y -= (32.0f * Details.scaleY / 2.0f + 2.0f * Details.scaleY) * GetNumberLines(x, y, str);
+ if (Details.slant == 0.0f)
+ y -= ((Details.slantRefX - x) * Details.slant + Details.slantRefY);
+ PrintString(x, y, str);
+}
+
+
+void
CFont::PrintString(float xstart, float ystart, wchar *s)
{
CRect rect;
@@ -753,81 +913,6 @@ CFont::GetTextRect(CRect *rect, float xstart, float ystart, wchar *s)
}
}
-void
-CFont::PrintString(float x, float y, uint32, wchar *start, wchar *end, float spwidth)
-{
- wchar *s;
-
- if (RenderState.style != Details.style) {
- RenderFontBuffer();
- RenderState.style = Details.style;
- }
-
- float dropShadowPosition = Details.dropShadowPosition;
- if (dropShadowPosition != 0.0f && (Details.style == FONT_BANK || Details.style == FONT_STANDARD)) {
- CRGBA color = Details.color;
- Details.color = Details.dropColor;
- Details.dropShadowPosition = 0;
- Details.bIsShadow = true;
- if (Details.slant != 0.0f) {
- Details.slantRefX += SCREEN_SCALE_X(dropShadowPosition);
- Details.slantRefY += SCREEN_SCALE_Y(dropShadowPosition);
- PrintString(SCREEN_SCALE_X(dropShadowPosition) + x, SCREEN_SCALE_Y(dropShadowPosition) + y, Details.anonymous_25, start, end, spwidth);
- Details.slantRefX -= SCREEN_SCALE_X(dropShadowPosition);
- Details.slantRefY -= SCREEN_SCALE_Y(dropShadowPosition);
- } else {
- PrintString(SCREEN_SCALE_X(dropShadowPosition) + x, SCREEN_SCALE_Y(dropShadowPosition) + y, Details.anonymous_25, start, end, spwidth);
- }
- Details.color = color;
- Details.dropShadowPosition = dropShadowPosition;
- Details.bIsShadow = false;
- }
- if (FontRenderStatePointer.pStr >= (wchar*)&FontRenderStateBuf[ARRAY_SIZE(FontRenderStateBuf)] - (end - start + 26)) // why 26?
- RenderFontBuffer();
- CFontRenderState *pRenderState = FontRenderStatePointer.pRenderState;
- pRenderState->fTextPosX = x;
- pRenderState->fTextPosY = y;
- pRenderState->scaleX = Details.scaleX;
- pRenderState->scaleY = Details.scaleY;
- pRenderState->color = Details.color;
- pRenderState->fExtraSpace = spwidth;
- pRenderState->slant = Details.slant;
- pRenderState->slantRefX = Details.slantRefX;
- pRenderState->slantRefY = Details.slantRefY;
- pRenderState->bFontHalfTexture = Details.bFontHalfTexture;
- pRenderState->proportional = Details.proportional;
- pRenderState->style = Details.style;
- pRenderState->bIsShadow = Details.bIsShadow;
- FontRenderStatePointer.pRenderState++;
-
- for(s = start; s < end;){
- if (*s == '~') {
- for (wchar *i = ParseToken(s); s != i; FontRenderStatePointer.pStr++) {
- *FontRenderStatePointer.pStr = *(s++);
- }
- if (Details.bFlash) {
- if (CTimer::GetTimeInMilliseconds() - Details.nFlashTimer > 300) {
- Details.bFlashState = !Details.bFlashState;
- Details.nFlashTimer = CTimer::GetTimeInMilliseconds();
- }
- Details.color.a = Details.bFlashState ? 0 : 255;
- }
- } else
- *(FontRenderStatePointer.pStr++) = *(s++);
- }
- *(FontRenderStatePointer.pStr++) = '\0';
- FontRenderStatePointer.Align();
-}
-
-void
-CFont::PrintStringFromBottom(float x, float y, wchar *str)
-{
- y -= (32.0f * Details.scaleY / 2.0f + 2.0f * Details.scaleY) * GetNumberLines(x, y, str);
- if (Details.slant == 0.0f)
- y -= ((Details.slantRefX - x) * Details.slant + Details.slantRefY);
- PrintString(x, y, str);
-}
-
bool IsPunctuation(wchar c)
{
switch (c)
@@ -1022,6 +1107,115 @@ CFont::GetNextSpace(wchar *s)
return s;
}
+wchar*
+CFont::ParseToken(wchar* str, CRGBA &color, bool &flash, bool &bold)
+{
+ Details.anonymous_23 = false;
+ wchar *s = str + 1;
+ if (Details.color.r || Details.color.g || Details.color.b)
+ {
+ switch (*s)
+ {
+ case 'B':
+ bold = !bold;
+ break;
+ case 'Y':
+ color.r = 255;
+ color.g = 227;
+ color.b = 79;
+ break;
+ case 'b':
+ color.r = 77;
+ color.g = 155;
+ color.b = 210;
+ break;
+ case 'f':
+ flash = !flash;
+ break;
+ case 'g':
+ color.r = 75;
+ color.g = 151;
+ color.b = 75;
+ break;
+ case 'h':
+ color.r = 255;
+ color.g = 255;
+ color.b = 255;
+ break;
+ case 'l':
+ color.r = 0;
+ color.g = 0;
+ color.b = 0;
+ break;
+ case 'o':
+ color.r = 229;
+ color.g = 125;
+ color.b = 126;
+ break;
+ case 'p':
+ color.r = 151;
+ color.g = 82;
+ color.b = 197;
+ break;
+ case 'q':
+ color.r = 199;
+ color.g = 144;
+ color.b = 203;
+ break;
+ case 'r':
+ color.r = 174;
+ color.g = 0;
+ color.b = 0;
+ break;
+ case 't':
+ color.r = 86;
+ color.g = 212;
+ color.b = 146;
+ break;
+ case 'w':
+ color.r = 225;
+ color.g = 225;
+ color.b = 225;
+ break;
+ case 'x':
+ color.r = 132;
+ color.g = 146;
+ color.b = 197;
+ break;
+ case 'y':
+ color.r = 255;
+ color.g = 255;
+ color.b = 0;
+ break;
+#ifdef BUTTON_ICONS
+ case 'U': PS2Symbol = BUTTON_UP; break;
+ case 'D': PS2Symbol = BUTTON_DOWN; break;
+ case '<': PS2Symbol = BUTTON_LEFT; break;
+ case '>': PS2Symbol = BUTTON_RIGHT; break;
+ case 'X': PS2Symbol = BUTTON_CROSS; break;
+ case 'O': PS2Symbol = BUTTON_CIRCLE; break;
+ case 'Q': PS2Symbol = BUTTON_SQUARE; break;
+ case 'T': PS2Symbol = BUTTON_TRIANGLE; break;
+ case 'K': PS2Symbol = BUTTON_L1; break;
+ case 'M': PS2Symbol = BUTTON_L2; break;
+ case 'A': PS2Symbol = BUTTON_L3; break;
+ case 'J': PS2Symbol = BUTTON_R1; break;
+ case 'V': PS2Symbol = BUTTON_R2; break;
+ case 'C': PS2Symbol = BUTTON_R3; break;
+ case '(': PS2Symbol = BUTTON_RSTICK_LEFT; break;
+ case ')': PS2Symbol = BUTTON_RSTICK_RIGHT; break;
+#endif
+ default:
+ break;
+ }
+ }
+ while (*s != '~')
+ ++s;
+ if (*(++s) == '~')
+ s = ParseToken(s, color, flash, bold);
+ return s;
+}
+
#ifdef MORE_LANGUAGES
wchar*
CFont::ParseToken(wchar *s, bool japShit)
@@ -1133,113 +1327,22 @@ CFont::ParseToken(wchar *s)
}
#endif
-wchar*
-CFont::ParseToken(wchar* str, CRGBA &color, bool &flash, bool &bold)
+void
+CFont::FilterOutTokensFromString(wchar *str)
{
- Details.anonymous_23 = false;
- wchar *s = str + 1;
- if (Details.color.r || Details.color.g || Details.color.b)
- {
- switch (*s)
- {
- case 'B':
- bold = !bold;
- break;
- case 'Y':
- color.r = 255;
- color.g = 227;
- color.b = 79;
- break;
- case 'b':
- color.r = 77;
- color.g = 155;
- color.b = 210;
- break;
- case 'f':
- flash = !flash;
- break;
- case 'g':
- color.r = 75;
- color.g = 151;
- color.b = 75;
- break;
- case 'h':
- color.r = 255;
- color.g = 255;
- color.b = 255;
- break;
- case 'l':
- color.r = 0;
- color.g = 0;
- color.b = 0;
- break;
- case 'o':
- color.r = 229;
- color.g = 125;
- color.b = 126;
- break;
- case 'p':
- color.r = 151;
- color.g = 82;
- color.b = 197;
- break;
- case 'q':
- color.r = 199;
- color.g = 144;
- color.b = 203;
- break;
- case 'r':
- color.r = 174;
- color.g = 0;
- color.b = 0;
- break;
- case 't':
- color.r = 86;
- color.g = 212;
- color.b = 146;
- break;
- case 'w':
- color.r = 225;
- color.g = 225;
- color.b = 225;
- break;
- case 'x':
- color.r = 132;
- color.g = 146;
- color.b = 197;
- break;
- case 'y':
- color.r = 255;
- color.g = 255;
- color.b = 0;
- break;
-#ifdef BUTTON_ICONS
- case 'U': PS2Symbol = BUTTON_UP; break;
- case 'D': PS2Symbol = BUTTON_DOWN; break;
- case '<': PS2Symbol = BUTTON_LEFT; break;
- case '>': PS2Symbol = BUTTON_RIGHT; break;
- case 'X': PS2Symbol = BUTTON_CROSS; break;
- case 'O': PS2Symbol = BUTTON_CIRCLE; break;
- case 'Q': PS2Symbol = BUTTON_SQUARE; break;
- case 'T': PS2Symbol = BUTTON_TRIANGLE; break;
- case 'K': PS2Symbol = BUTTON_L1; break;
- case 'M': PS2Symbol = BUTTON_L2; break;
- case 'A': PS2Symbol = BUTTON_L3; break;
- case 'J': PS2Symbol = BUTTON_R1; break;
- case 'V': PS2Symbol = BUTTON_R2; break;
- case 'C': PS2Symbol = BUTTON_R3; break;
- case '(': PS2Symbol = BUTTON_RSTICK_LEFT; break;
- case ')': PS2Symbol = BUTTON_RSTICK_RIGHT; break;
-#endif
- default:
- break;
+ int newIdx = 0;
+ wchar copy[256], *c;
+ UnicodeStrcpy(copy, str);
+
+ for (c = copy; *c != '\0'; c++) {
+ if (*c == '~') {
+ c++;
+ while (*c != '~') c++;
+ } else {
+ str[newIdx++] = *c;
}
}
- while (*s != '~')
- ++s;
- if (*(++s) == '~')
- s = ParseToken(s, color, flash, bold);
- return s;
+ str[newIdx] = '\0';
}
void
@@ -1249,89 +1352,132 @@ CFont::DrawFonts(void)
}
void
-CFont::RenderFontBuffer()
+CFont::SetScale(float x, float y)
{
- if (FontRenderStatePointer.pRenderState == (CFontRenderState*)FontRenderStateBuf) return;
+ Details.scaleX = x;
+ Details.scaleY = y;
+}
- float textPosX;
- float textPosY;
- CRGBA color;
- bool bBold = false;
- bool bFlash = false;
+void
+CFont::SetSlantRefPoint(float x, float y)
+{
+ Details.slantRefX = x;
+ Details.slantRefY = y;
+}
- Sprite[RenderState.style].SetRenderState();
- RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
- RenderState = *(CFontRenderState*)&FontRenderStateBuf[0];
- textPosX = RenderState.fTextPosX;
- textPosY = RenderState.fTextPosY;
- color = RenderState.color;
- tFontRenderStatePointer pRenderStateBufPointer;
- pRenderStateBufPointer.pRenderState = (CFontRenderState*)&FontRenderStateBuf[0];
- for (++pRenderStateBufPointer.pRenderState; pRenderStateBufPointer.pStr < FontRenderStatePointer.pStr; pRenderStateBufPointer.pStr++) {
- if (*pRenderStateBufPointer.pStr == '\0') {
- tFontRenderStatePointer tmpPointer = pRenderStateBufPointer;
- tmpPointer.pStr++;
- tmpPointer.Align();
- if (tmpPointer.pStr >= FontRenderStatePointer.pStr)
- break;
+void
+CFont::SetSlant(float s)
+{
+ Details.slant = s;
+}
- RenderState = *(tmpPointer.pRenderState++);
+void
+CFont::SetColor(CRGBA col)
+{
+ Details.color = col;
+ if (Details.alphaFade < 255.0f)
+ Details.color.a *= Details.alphaFade / 255.0f;
+}
- pRenderStateBufPointer = tmpPointer;
- textPosX = RenderState.fTextPosX;
- textPosY = RenderState.fTextPosY;
- color = RenderState.color;
- }
- if (*pRenderStateBufPointer.pStr == '~') {
-#ifdef BUTTON_ICONS
- PS2Symbol = BUTTON_NONE;
-#endif
- pRenderStateBufPointer.pStr = ParseToken(pRenderStateBufPointer.pStr, color, bFlash, bBold);
-#ifdef BUTTON_ICONS
- if(PS2Symbol != BUTTON_NONE) {
- DrawButton(textPosX, textPosY);
- textPosX += Details.scaleY * 17.0f;
- PS2Symbol = BUTTON_NONE;
- }
-#endif
- if (bFlash) {
- if (CTimer::GetTimeInMilliseconds() - Details.nFlashTimer > 300) {
- Details.bFlashState = !Details.bFlashState;
- Details.nFlashTimer = CTimer::GetTimeInMilliseconds();
- }
- Details.color.alpha = Details.bFlashState ? 0 : 255;
- }
- if (!RenderState.bIsShadow)
- RenderState.color = color;
- }
- wchar c = *pRenderStateBufPointer.pStr;
- c -= ' ';
- if (RenderState.bFontHalfTexture)
- c = FindNewCharacter(c);
- else if (c > 155)
- c = '\0';
- if (RenderState.slant != 0.0f)
- textPosY = (RenderState.slantRefX - textPosX) * RenderState.slant + RenderState.slantRefY;
- PrintChar(textPosX, textPosY, c);
- if (bBold) {
- PrintChar(textPosX + 1.0f, textPosY, c);
- PrintChar(textPosX + 2.0f, textPosY, c);
- textPosX += 2.0f;
- }
-#ifdef FIX_BUGS
- // PS2 uses different chars for some symbols
- if (!RenderState.bFontHalfTexture && c == 30) c = 61; // wanted star
-#endif
- textPosX += RenderState.scaleX * GetCharacterWidth(c);
- if (c == '\0')
- textPosX += RenderState.fExtraSpace;
- }
- CSprite2d::RenderVertexBuffer();
- FontRenderStatePointer.pRenderState = (CFontRenderState*)FontRenderStateBuf;
+void
+CFont::SetJustifyOn(void)
+{
+ Details.justify = true;
+ Details.centre = false;
+ Details.rightJustify = false;
+}
+
+void
+CFont::SetJustifyOff(void)
+{
+ Details.justify = false;
+ Details.rightJustify = false;
+}
+
+void
+CFont::SetCentreOn(void)
+{
+ Details.centre = true;
+ Details.justify = false;
+ Details.rightJustify = false;
+}
+
+void
+CFont::SetCentreOff(void)
+{
+ Details.centre = false;
+}
+void
+CFont::SetWrapx(float x)
+{
+ Details.wrapX = x;
+}
+
+void
+CFont::SetCentreSize(float s)
+{
+ Details.centreSize = s;
+}
+
+void
+CFont::SetBackgroundOn(void)
+{
+ Details.background = true;
}
+void
+CFont::SetBackgroundOff(void)
+{
+ Details.background = false;
+}
+
+void
+CFont::SetBackgroundColor(CRGBA col)
+{
+ Details.backgroundColor = col;
+}
+
+void
+CFont::SetBackGroundOnlyTextOn(void)
+{
+ Details.backgroundOnlyText = true;
+}
+
+void
+CFont::SetBackGroundOnlyTextOff(void)
+{
+ Details.backgroundOnlyText = false;
+}
+
+void
+CFont::SetRightJustifyOn(void)
+{
+ Details.rightJustify = true;
+ Details.justify = false;
+ Details.centre = false;
+}
+
+void
+CFont::SetRightJustifyOff(void)
+{
+ Details.rightJustify = false;
+ Details.justify = false;
+ Details.centre = false;
+}
+
+void
+CFont::SetPropOff(void)
+{
+ Details.proportional = false;
+}
+
+void
+CFont::SetPropOn(void)
+{
+ Details.proportional = true;
+}
void
CFont::SetFontStyle(int16 style)
@@ -1339,12 +1485,39 @@ CFont::SetFontStyle(int16 style)
if (style == FONT_HEADING) {
Details.style = FONT_HEADING;
Details.bFontHalfTexture = true;
- } else {
+ }
+ else {
Details.style = style;
Details.bFontHalfTexture = false;
}
}
+void
+CFont::SetRightJustifyWrap(float wrap)
+{
+ Details.rightJustifyWrap = wrap;
+}
+
+void
+CFont::SetAlphaFade(float fade)
+{
+ Details.alphaFade = fade;
+}
+
+void
+CFont::SetDropColor(CRGBA col)
+{
+ Details.dropColor = col;
+ if (Details.alphaFade < 255.0f)
+ Details.dropColor.a *= Details.alphaFade / 255.0f;
+}
+
+void
+CFont::SetDropShadowPosition(int16 pos)
+{
+ Details.dropShadowPosition = pos;
+}
+
int16 CFont::FindNewCharacter(int16 c)
{
if (c >= 33 && c <= 33 + 25)
@@ -1384,36 +1557,6 @@ CFont::character_code(uint8 c)
return foreign_table[c-128];
}
-
-void
-CFont::SetScale(float x, float y)
-{
- Details.scaleX = x;
- Details.scaleY = y;
-}
-
-void
-CFont::SetBackgroundColor(CRGBA col)
-{
- Details.backgroundColor = col;
-}
-
-void
-CFont::SetColor(CRGBA col)
-{
- Details.color = col;
- if (Details.alphaFade < 255.0f)
- Details.color.a *= Details.alphaFade / 255.0f;
-}
-
-void
-CFont::SetDropColor(CRGBA col)
-{
- Details.dropColor = col;
- if (Details.alphaFade < 255.0f)
- Details.dropColor.a *= Details.alphaFade / 255.0f;
-}
-
void
CFont::SetOutlineColor(CRGBA col)
{
@@ -1422,20 +1565,5 @@ CFont::SetOutlineColor(CRGBA col)
Details.outlineColor.a *= Details.alphaFade / 255.0f;
}
-void
-CFont::FilterOutTokensFromString(wchar *str)
-{
- int newIdx = 0;
- wchar copy[256], *c;
- UnicodeStrcpy(copy, str);
-
- for (c = copy; *c != '\0'; c++) {
- if (*c == '~') {
- c++;
- while (*c != '~') c++;
- } else {
- str[newIdx++] = *c;
- }
- }
- str[newIdx] = '\0';
-}
+void CFont::SetOutlineOn(int on) { Details.bOutlineOn = on; }
+void CFont::SetNewLineAdd(int line) { Details.line = line; }
diff --git a/src/render/Font.h b/src/render/Font.h
index 071c0e45..198faa45 100644
--- a/src/render/Font.h
+++ b/src/render/Font.h
@@ -14,28 +14,28 @@ struct CFontDetails
float slant;
float slantRefX;
float slantRefY;
- bool justify;
- bool centre;
- bool rightJustify;
- bool background;
- bool backgroundOnlyText;
- bool proportional;
- bool bIsShadow;
- bool bFlash;
- bool bBold;
+ bool8 justify;
+ bool8 centre;
+ bool8 rightJustify;
+ bool8 background;
+ bool8 backgroundOnlyText;
+ bool8 proportional;
+ bool8 bIsShadow;
+ bool8 bFlash;
+ bool8 bBold;
float alphaFade;
CRGBA backgroundColor;
float wrapX;
float centreSize;
float rightJustifyWrap;
int16 style;
- bool bFontHalfTexture;
+ bool8 bFontHalfTexture;
uint32 bank;
int16 dropShadowPosition;
CRGBA dropColor;
- bool bFlashState;
+ bool8 bFlashState;
int nFlashTimer;
- bool anonymous_23;
+ bool8 anonymous_23;
uint32 anonymous_25;
uint32 anonymous_26;
CRGBA outlineColor;
@@ -175,73 +175,34 @@ public:
static void RenderFontBuffer(void);
static uint16 character_code(uint8 c);
- static CFontDetails GetDetails() { return Details; }
static void SetScale(float x, float y);
- static void SetSlantRefPoint(float x, float y) { Details.slantRefX = x; Details.slantRefY = y; }
- static void SetSlant(float s) { Details.slant = s; }
- static void SetJustifyOn(void) {
- Details.justify = true;
- Details.centre = false;
- Details.rightJustify = false;
- }
- static void SetJustifyOff(void) {
- Details.justify = false;
- Details.rightJustify = false;
- }
- static void SetRightJustifyOn(void) {
- Details.rightJustify = true;
- Details.justify = false;
- Details.centre = false;
- }
- static void SetRightJustifyOff(void) {
- Details.rightJustify = false;
- Details.justify = false;
- Details.centre = false;
- }
- static void SetCentreOn(void) {
- Details.centre = true;
- Details.justify = false;
- Details.rightJustify = false;
- }
- static void SetCentreOff(void) {
- Details.centre = false;
- }
- static void SetAlignment(uint8 alignment) {
- if (alignment == ALIGN_LEFT) {
- CFont::Details.justify = true;
- CFont::Details.centre = false;
- CFont::Details.rightJustify = false;
- }
- else if (alignment == ALIGN_CENTER) {
- CFont::Details.justify = false;
- CFont::Details.centre = true;
- CFont::Details.rightJustify = false;
- }
- else if (alignment == ALIGN_RIGHT) {
- CFont::Details.justify = false;
- CFont::Details.centre = false;
- CFont::Details.rightJustify = true;
- }
- }
- static void SetWrapx(float x) { Details.wrapX = x; }
- static void SetCentreSize(float s) { Details.centreSize = s; }
- static void SetBackgroundOn(void) { Details.background = true; }
- static void SetBackgroundOff(void) { Details.background = false; }
- static void SetBackGroundOnlyTextOn(void) { Details.backgroundOnlyText = true; }
- static void SetBackGroundOnlyTextOff(void) { Details.backgroundOnlyText = false; }
- static void SetPropOn(void) { Details.proportional = true; }
- static void SetPropOff(void) { Details.proportional = false; }
+ static void SetSlantRefPoint(float x, float y);
+ static void SetSlant(float s);
+ static void SetJustifyOn(void);
+ static void SetJustifyOff(void);
+ static void SetRightJustifyOn(void);
+ static void SetRightJustifyOff(void);
+ static void SetCentreOn(void);
+ static void SetCentreOff(void);
+ static void SetWrapx(float x);
+ static void SetCentreSize(float s);
+ static void SetBackgroundOn(void);
+ static void SetBackgroundOff(void);
+ static void SetBackGroundOnlyTextOn(void);
+ static void SetBackGroundOnlyTextOff(void);
+ static void SetPropOn(void);
+ static void SetPropOff(void);
static void SetFontStyle(int16 style);
- static void SetRightJustifyWrap(float wrap) { Details.rightJustifyWrap = wrap; }
- static void SetAlphaFade(float fade) { Details.alphaFade = fade; }
- static void SetDropShadowPosition(int16 pos) { Details.dropShadowPosition = pos; }
+ static void SetRightJustifyWrap(float wrap);
+ static void SetAlphaFade(float fade);
+ static void SetDropShadowPosition(int16 pos);
static void SetBackgroundColor(CRGBA col);
static void SetColor(CRGBA col);
static void SetDropColor(CRGBA col);
static void SetOutlineColor(CRGBA col);
- static void SetOutlineOn(int on) { Details.bOutlineOn = on; }
- static void SetNewLineAdd(int line) { Details.line = line; }
+ static void SetOutlineOn(int on);
+ static void SetNewLineAdd(int line);
static int16 FindNewCharacter(int16 c);
static void FilterOutTokensFromString(wchar*);