summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSiddharth Roy <[email protected]>2022-01-26 17:25:34 +0530
committerGitHub <[email protected]>2022-01-26 12:55:34 +0100
commite5ee69a0f51e7dc6e3d9c99a185c05fb8e1addb2 (patch)
tree61ac42911d0ffb4d3f57d04917ac8fa5c6f7a61a
parent76b6efc827ccd90ddfb5d7a0d6890d9f0a5074cf (diff)
downloadraylib-e5ee69a0f51e7dc6e3d9c99a185c05fb8e1addb2.tar.gz
raylib-e5ee69a0f51e7dc6e3d9c99a185c05fb8e1addb2.zip
Add DrawTextCodepoints (#2308)
* Add DrawTextCodepoints * Fixed top comment
-rw-r--r--src/raylib.h1
-rw-r--r--src/rtext.c32
2 files changed, 33 insertions, 0 deletions
diff --git a/src/raylib.h b/src/raylib.h
index 6c6baa7b..228983d5 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -1336,6 +1336,7 @@ RLAPI void DrawText(const char *text, int posX, int posY, int fontSize, Color co
RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters
RLAPI void DrawTextPro(Font font, const char *text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint); // Draw text using Font and pro parameters (rotation)
RLAPI void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); // Draw one character (codepoint)
+RLAPI void DrawTextCodepoints(Font font, int *codepoints, int count, Vector2 position, float fontSize, float spacing, Color tint); // Draw multiple character (codepoint)
// Text font info functions
RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font
diff --git a/src/rtext.c b/src/rtext.c
index 523712a3..f07b8804 100644
--- a/src/rtext.c
+++ b/src/rtext.c
@@ -1091,6 +1091,38 @@ void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSiz
DrawTexturePro(font.texture, srcRec, dstRec, (Vector2){ 0, 0 }, 0.0f, tint);
}
+// Draw multiple character (codepoints)
+void DrawTextCodepoints(Font font, int *codepoints, int count, Vector2 position, float fontSize, float spacing, Color tint)
+{
+ int textOffsetY = 0; // Offset between lines (on line break '\n')
+ float textOffsetX = 0.0f; // Offset X to next character to draw
+
+ float scaleFactor = fontSize/font.baseSize; // Character quad scaling factor
+
+ for (int i = 0; i < count; i++)
+ {
+ int index = GetGlyphIndex(font, codepoints[i]);
+
+ if (codepoints[i] == '\n')
+ {
+ // NOTE: Fixed line spacing of 1.5 line-height
+ // TODO: Support custom line spacing defined by user
+ textOffsetY += (int)((font.baseSize + font.baseSize/2)*scaleFactor);
+ textOffsetX = 0.0f;
+ }
+ else
+ {
+ if ((codepoints[i] != ' ') && (codepoints[i] != '\t'))
+ {
+ DrawTextCodepoint(font, codepoints[i], (Vector2){ position.x + textOffsetX, position.y + textOffsetY }, fontSize, tint);
+ }
+
+ if (font.glyphs[index].advanceX == 0) textOffsetX += ((float)font.recs[index].width*scaleFactor + spacing);
+ else textOffsetX += ((float)font.glyphs[index].advanceX*scaleFactor + spacing);
+ }
+ }
+}
+
// Measure string width for default font
int MeasureText(const char *text, int fontSize)
{