Fix: ICU layout: Glyph to char mapping with multiple runs

See: https://github.com/OpenTTD/OpenTTD/issues/11203
See: https://github.com/OpenTTD/OpenTTD/issues/10790
This commit is contained in:
Jonathan G Rennison
2023-08-16 19:04:34 +01:00
parent 6ccf3774b6
commit 8dc953c590

View File

@@ -208,7 +208,7 @@ void ICURun::Shape(UChar *buff, size_t buff_length) {
x_advance = glyph_pos[i].x_advance / FONT_SCALE; x_advance = glyph_pos[i].x_advance / FONT_SCALE;
} }
this->glyph_to_char.push_back(glyph_info[i].cluster - this->start); this->glyph_to_char.push_back(glyph_info[i].cluster);
this->advance.push_back(x_advance); this->advance.push_back(x_advance);
advance += x_advance; advance += x_advance;
} }
@@ -467,7 +467,7 @@ std::unique_ptr<const ICUParagraphLayout::Line> ICUParagraphLayout::NextLine(int
/* There is no suitable line-break and this is the only run on the /* There is no suitable line-break and this is the only run on the
* line. So we break at the cluster. This is not pretty, but the * line. So we break at the cluster. This is not pretty, but the
* best we can do. */ * best we can do. */
new_partial_length = char_pos - this->partial_offset; new_partial_length = char_pos - overflow_run->start - this->partial_offset;
} }
} }