mirror of
https://github.com/love2d/love.git
synced 2026-08-12 08:30:56 +02:00
@@ -155,6 +155,7 @@ void HarfbuzzShaper::computeBufferRanges(const ColoredCodepoints &codepoints, Ra
|
||||
|
||||
int glyphcount = (int)hb_buffer_get_length(hbb);
|
||||
const hb_glyph_info_t *glyphinfos = hb_buffer_get_glyph_infos(hbb, nullptr);
|
||||
hb_direction_t direction = hb_buffer_get_direction(hbb);
|
||||
|
||||
fallbackranges.clear();
|
||||
|
||||
@@ -162,7 +163,7 @@ void HarfbuzzShaper::computeBufferRanges(const ColoredCodepoints &codepoints, Ra
|
||||
{
|
||||
if (isValidGlyph(glyphinfos[i].codepoint, codepoints.cps, glyphinfos[i].cluster))
|
||||
{
|
||||
if (bufferranges.empty() || bufferranges.back().index != rasti || bufferranges.back().range.getMax() != i)
|
||||
if (bufferranges.empty() || bufferranges.back().index != rasti || bufferranges.back().range.getMax() + 1 != i)
|
||||
bufferranges.push_back({(int)rasti, (int)glyphinfos[i].cluster, Range(i, 1)});
|
||||
else
|
||||
bufferranges.back().range.last++;
|
||||
@@ -171,14 +172,16 @@ void HarfbuzzShaper::computeBufferRanges(const ColoredCodepoints &codepoints, Ra
|
||||
{
|
||||
// Use the first font for remaining invalid glyphs when no
|
||||
// fallback font supports them.
|
||||
if (bufferranges.empty() || bufferranges.back().index != 0 || bufferranges.back().range.getMax() != i)
|
||||
if (bufferranges.empty() || bufferranges.back().index != 0 || bufferranges.back().range.getMax() + 1 != i)
|
||||
bufferranges.push_back({0, (int)glyphinfos[i].cluster, Range(i, 1)});
|
||||
else
|
||||
bufferranges.back().range.last++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (fallbackranges.empty() || fallbackranges.back().getMax() != glyphinfos[i - 1].cluster)
|
||||
// Harfbuzz puts RTL text into the buffer in reverse order, so
|
||||
// it'll start with the last cluster (character index).
|
||||
if (fallbackranges.empty() || (direction == HB_DIRECTION_RTL ? fallbackranges.back().getMin() : fallbackranges.back().getMax()) != glyphinfos[i - 1].cluster)
|
||||
fallbackranges.push_back(Range(glyphinfos[i].cluster, 1));
|
||||
else
|
||||
fallbackranges.back().encapsulate(glyphinfos[i].cluster);
|
||||
|
||||
Reference in New Issue
Block a user