summaryrefslogtreecommitdiffstats
path: root/src/render/Font.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/render/Font.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/render/Font.h b/src/render/Font.h
new file mode 100644
index 00000000..017aaeea
--- /dev/null
+++ b/src/render/Font.h
@@ -0,0 +1,108 @@
+#pragma once
+
+struct CFontDetails
+{
+ CRGBA color;
+ float scaleX;
+ float scaleY;
+ float slant;
+ float slantRefX;
+ float slantRefY;
+ bool justify;
+ bool centre;
+ bool rightJustify;
+ bool background;
+ bool backgroundOnlyText;
+ bool proportional;
+ float alphaFade;
+ CRGBA backgroundColor;
+ float wrapX;
+ float centreSize;
+ float rightJustifyWrap;
+ int16 style;
+ int32 bank;
+ int16 dropShadowPosition;
+ CRGBA dropColor;
+};
+
+class CSprite2d;
+
+class CFont
+{
+ static CFontDetails &Details;
+ static int16 Size[3][193];
+ static int16 

+ static CSprite2d *Sprite; //[3]
+public:
+ static void Initialise(void);
+ static void Shutdown(void);
+ static void InitPerFrame(void);
+ static void PrintChar(float x, float y, uint16 c);
+ static void PrintString(float x, float y, uint16 *s);
+ static int GetNumberLines(float xstart, float ystart, uint16 *s);
+ static void GetTextRect(CRect *rect, float xstart, float ystart, uint16 *s);
+ static void PrintString(float x, float y, uint16 *start, uint16 *end, float spwidth);
+ static float GetCharacterWidth(uint16 c);
+ static float GetCharacterSize(uint16 c);
+ static float GetStringWidth(uint16 *s, bool spaces = false);
+ static uint16 *GetNextSpace(uint16 *s);
+ static uint16 *ParseToken(uint16 *s, uint16*);
+ static void DrawFonts(void);
+ static uint16 character_code(uint8 c);
+
+ static void SetScale(float x, float y) { Details.scaleX = x; Details.scaleY = 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 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 SetFontStyle(int16 style) { Details.style = 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; }
+
+ // TODO: really just CRGBA but that isn't passed correctly
+ static void SetBackgroundColor(const CRGBA &col) { Details.backgroundColor = col; }
+ static void SetColor(const CRGBA &col) {
+ Details.color = col;
+ if(Details.alphaFade < 255.0f)
+ Details.color.a *= Details.alphaFade/255.0f;
+ }
+ static void SetDropColor(const CRGBA &col) {
+ Details.dropColor = col;
+ if(Details.alphaFade < 255.0f)
+ Details.dropColor.a *= Details.alphaFade/255.0f;
+ }
+};