summaryrefslogtreecommitdiffhomepage
path: root/src/rtext.c
diff options
context:
space:
mode:
authorRay <[email protected]>2023-07-02 10:52:20 +0200
committerRay <[email protected]>2023-07-02 10:52:20 +0200
commit3e4e4b32fdcaa2cff8854e11ff2179af4ff2afe9 (patch)
tree44edf0c244c81c59d7e24d59e812cc8138192048 /src/rtext.c
parent48e2663d03a74b26d86e06057d659ddc9b1b7693 (diff)
downloadraylib-3e4e4b32fdcaa2cff8854e11ff2179af4ff2afe9.tar.gz
raylib-3e4e4b32fdcaa2cff8854e11ff2179af4ff2afe9.zip
WARNING: BREAKING: ADDED: `SetTextLineSpacing()`
Diffstat (limited to 'src/rtext.c')
-rw-r--r--src/rtext.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/rtext.c b/src/rtext.c
index 61f2e04c..cb609cf6 100644
--- a/src/rtext.c
+++ b/src/rtext.c
@@ -111,7 +111,8 @@ static Font defaultFont = { 0 };
// Module specific Functions Declaration
//----------------------------------------------------------------------------------
#if defined(SUPPORT_FILEFORMAT_FNT)
-static Font LoadBMFont(const char *fileName); // Load a BMFont file (AngelCode font file)
+static Font LoadBMFont(const char *fileName); // Load a BMFont file (AngelCode font file)
+static int textLineSpacing = 15; // Text vertical line spacing in pixels
#endif
#if defined(SUPPORT_DEFAULT_FONT)
@@ -123,7 +124,6 @@ extern void UnloadFontDefault(void);
// Module Functions Definition
//----------------------------------------------------------------------------------
#if defined(SUPPORT_DEFAULT_FONT)
-
// Load raylib default font
extern void LoadFontDefault(void)
{
@@ -702,6 +702,8 @@ Image GenImageFontAtlas(const GlyphInfo *chars, Rectangle **charRecs, int glyphC
totalWidth += chars[i].image.width + 2*padding;
}
+//#define SUPPORT_FONT_ATLAS_SIZE_CONSERVATIVE
+#if defined(SUPPORT_FONT_ATLAS_SIZE_CONSERVATIVE)
int rowCount = 0;
int imageSize = 64; // Define minimum starting value to avoid unnecessary calculation steps for very small images
@@ -711,6 +713,12 @@ Image GenImageFontAtlas(const GlyphInfo *chars, Rectangle **charRecs, int glyphC
imageSize *= 2; // Double the size of image (to keep POT)
rowCount = imageSize/(fontSize + 2*padding); // Calculate new row count for the new image size
}
+#else
+ // No need for a so-conservative atlas generation
+ float totalArea = totalWidth*fontSize*1.3f;
+ float imageMinSize = sqrtf(totalArea);
+ int imageSize = (int)powf(2, ceilf(logf(imageMinSize)/logf(2)));
+#endif
atlas.width = imageSize; // Atlas bitmap width
atlas.height = imageSize; // Atlas bitmap height
@@ -1071,9 +1079,8 @@ void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, f
if (codepoint == '\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.0f)*scaleFactor);
+ // NOTE: Line spacing is a global variable, use SetTextLineSpacing() to setup
+ textOffsetY += textLineSpacing;
textOffsetX = 0.0f;
}
else
@@ -1143,9 +1150,8 @@ void DrawTextCodepoints(Font font, const int *codepoints, int count, Vector2 pos
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.0f)*scaleFactor);
+ // NOTE: Line spacing is a global variable, use SetTextLineSpacing() to setup
+ textOffsetY += textLineSpacing;
textOffsetX = 0.0f;
}
else
@@ -1161,6 +1167,12 @@ void DrawTextCodepoints(Font font, const int *codepoints, int count, Vector2 pos
}
}
+// Set vertical line spacing when drawing with line-breaks
+void SetTextLineSpacing(int spacing)
+{
+ textLineSpacing = spacing;
+}
+
// Measure string width for default font
int MeasureText(const char *text, int fontSize)
{
@@ -1219,7 +1231,9 @@ Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing
if (tempTextWidth < textWidth) tempTextWidth = textWidth;
byteCounter = 0;
textWidth = 0;
- textHeight += ((float)font.baseSize*1.5f); // NOTE: Fixed line spacing of 1.5 lines
+
+ // NOTE: Line spacing is a global variable, use SetTextLineSpacing() to setup
+ textHeight += (float)textLineSpacing;
}
if (tempByteCounter < byteCounter) tempByteCounter = byteCounter;