diff options
| author | Ray <[email protected]> | 2018-02-19 12:08:35 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-02-19 12:08:35 +0100 |
| commit | f6231aa8b68cebbdad37bb4beea26ecded74536b (patch) | |
| tree | 7f4f9935c38c212a5bfafb27266fcaf097372103 /src/textures.c | |
| parent | ffde83d85f24e10d820ee1557a5c4fde4e62d1d8 (diff) | |
| parent | 7e32a627e88035c21cd16daddca128a9b6024de9 (diff) | |
| download | raylib-f6231aa8b68cebbdad37bb4beea26ecded74536b.tar.gz raylib-f6231aa8b68cebbdad37bb4beea26ecded74536b.zip | |
Merge pull request #474 from raysan5/develop
Integrate develop branch (LAST INTEGRATION)
Diffstat (limited to 'src/textures.c')
| -rw-r--r-- | src/textures.c | 43 |
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); |
