From e1366361ed99bcf238327b91e7c19e1b12c60b52 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 7 Jul 2021 09:40:40 +0100 Subject: [PATCH] TextLayout: Skip whitespace tokens in TokenList::createLayout() to fix misalignment when using horizontally centred justification --- .../juce_graphics/fonts/juce_TextLayout.cpp | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/modules/juce_graphics/fonts/juce_TextLayout.cpp b/modules/juce_graphics/fonts/juce_TextLayout.cpp index 2990e6f98c..70547a5645 100644 --- a/modules/juce_graphics/fonts/juce_TextLayout.cpp +++ b/modules/juce_graphics/fonts/juce_TextLayout.cpp @@ -354,31 +354,30 @@ namespace TextLayoutHelpers if (newGlyphs.size() > 0) { - currentRun->glyphs.ensureStorageAllocated (currentRun->glyphs.size() + newGlyphs.size()); - auto tokenOrigin = t.area.getPosition().translated (0, t.font.getAscent()); - - if (needToSetLineOrigin) + if (! t.isWhitespace && ! t.isNewLine) { - needToSetLineOrigin = false; - currentLine->lineOrigin = tokenOrigin; - } + currentRun->glyphs.ensureStorageAllocated (currentRun->glyphs.size() + newGlyphs.size()); + auto tokenOrigin = t.area.getPosition().translated (0, t.font.getAscent()); - auto glyphOffset = tokenOrigin - currentLine->lineOrigin; + if (needToSetLineOrigin) + { + needToSetLineOrigin = false; + currentLine->lineOrigin = tokenOrigin; + } - for (int j = 0; j < newGlyphs.size(); ++j) - { - auto x = xOffsets.getUnchecked (j); - currentRun->glyphs.add (TextLayout::Glyph (newGlyphs.getUnchecked(j), - glyphOffset.translated (x, 0), - xOffsets.getUnchecked (j + 1) - x)); + auto glyphOffset = tokenOrigin - currentLine->lineOrigin; + + for (int j = 0; j < newGlyphs.size(); ++j) + { + auto x = xOffsets.getUnchecked (j); + currentRun->glyphs.add (TextLayout::Glyph (newGlyphs.getUnchecked (j), + glyphOffset.translated (x, 0), + xOffsets.getUnchecked (j + 1) - x)); + } } charPosition += newGlyphs.size(); } - else if (t.isWhitespace || t.isNewLine) - { - ++charPosition; - } if (auto* nextToken = tokens[i + 1]) {