summaryrefslogtreecommitdiffhomepage
path: root/src/textures.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/textures.c')
-rw-r--r--src/textures.c43
1 files changed, 37 insertions, 6 deletions
diff --git a/src/textures.c b/src/textures.c
index 2772e246..a571718b 100644
--- a/src/textures.c
+++ b/src/textures.c
@@ -1374,12 +1374,17 @@ Image ImageTextEx(SpriteFont font, const char *text, float fontSize, int spacing
{
int length = strlen(text);
int posX = 0;
+ int index; // Index position in sprite font
+ unsigned char character; // Current character
+ // TODO: ISSUE: Measured text size does not seem to be correct... issue on ImageDraw()
Vector2 imSize = MeasureTextEx(font, text, font.baseSize, spacing);
TraceLog(LOG_DEBUG, "Text Image size: %f, %f", imSize.x, imSize.y);
// NOTE: glGetTexImage() not available in OpenGL ES
+ // TODO: This is horrible, retrieving font texture from GPU!!!
+ // Define ImageFont struct? or include Image spritefont in SpriteFont struct?
Image imFont = GetTextureData(font.texture);
ImageColorTint(&imFont, tint); // Apply color tint to font
@@ -1389,13 +1394,39 @@ Image ImageTextEx(SpriteFont font, const char *text, float fontSize, int spacing
for (int i = 0; i < length; i++)
{
- CharInfo letter = font.chars[(int)text[i] - 32];
-
- ImageDraw(&imText, imFont, letter.rec, (Rectangle){ posX + letter.offsetX,
- letter.offsetY, letter.rec.width, letter.rec.height });
+ if ((unsigned char)text[i] == '\n')
+ {
+ // TODO: Support line break
+ }
+ else
+ {
+ if ((unsigned char)text[i] == 0xc2) // UTF-8 encoding identification HACK!
+ {
+ // Support UTF-8 encoded values from [0xc2 0x80] -> [0xc2 0xbf](¿)
+ character = (unsigned char)text[i + 1];
+ index = GetGlyphIndex(font, (int)character);
+ i++;
+ }
+ else if ((unsigned char)text[i] == 0xc3) // UTF-8 encoding identification HACK!
+ {
+ // Support UTF-8 encoded values from [0xc3 0x80](À) -> [0xc3 0xbf](ÿ)
+ character = (unsigned char)text[i + 1];
+ index = GetGlyphIndex(font, (int)character + 64);
+ i++;
+ }
+ else index = GetGlyphIndex(font, (unsigned char)text[i]);
- if (letter.advanceX == 0) posX += letter.rec.width + spacing;
- else posX += letter.advanceX + spacing;
+ CharInfo letter = font.chars[index];
+
+ if ((unsigned char)text[i] != ' ')
+ {
+ ImageDraw(&imText, imFont, letter.rec, (Rectangle){ posX + letter.offsetX,
+ letter.offsetY, letter.rec.width, letter.rec.height });
+ }
+
+ if (letter.advanceX == 0) posX += letter.rec.width + spacing;
+ else posX += letter.advanceX + spacing;
+ }
}
UnloadImage(imFont);