Improve justified text alignment

This commit is contained in:
Ron Tseytlin
2024-12-16 21:42:42 +02:00
parent 486cc22dbd
commit 7e34e0ad21
3 changed files with 13 additions and 3 deletions
+6 -1
View File
@@ -49,6 +49,7 @@ void GenericShaper::computeGlyphPositions(const ColoredCodepoints &codepoints, R
// Spacing counter and newline handling.
Vector2 curpos = offset;
float spacingremainder = 0;
float maxwidth = 0;
uint32 prevglyph = 0;
@@ -125,7 +126,11 @@ void GenericShaper::computeGlyphPositions(const ColoredCodepoints &codepoints, R
// Account for extra spacing given to space characters.
if (g == ' ' && extraspacing != 0.0f)
curpos.x += extraspacing;
{
spacingremainder += fmod(extraspacing, 1);
curpos.x += floorf(extraspacing) + floorf(spacingremainder);
spacingremainder = fmod(spacingremainder, 1);
}
prevglyph = g;
}
+6 -1
View File
@@ -208,6 +208,7 @@ void HarfbuzzShaper::computeGlyphPositions(const ColoredCodepoints &codepoints,
offset.y += getBaseline();
Vector2 curpos = offset;
float spacingremainder = 0;
int colorindex = 0;
int ncolors = (int)codepoints.colors.size();
@@ -312,7 +313,11 @@ void HarfbuzzShaper::computeGlyphPositions(const ColoredCodepoints &codepoints,
// Account for extra spacing given to space characters.
if (clustercodepoint == ' ' && extraspacing != 0.0f)
curpos.x += extraspacing;
{
spacingremainder += fmod(extraspacing, 1);
curpos.x += floorf(extraspacing) + floorf(spacingremainder);
spacingremainder = fmod(spacingremainder, 1);
}
}
}
+1 -1
View File
@@ -508,7 +508,7 @@ std::vector<Font::DrawCommand> Font::generateVerticesFormatted(const love::font:
auto end = start + range.getSize();
float numspaces = std::count(start, end, ' ');
if (width < wrap && numspaces >= 1)
extraspacing = floorf((wrap - width) / numspaces);
extraspacing = (wrap - width) / (numspaces - 1);
else
extraspacing = 0.0f;
break;