Handle RTL text correctly in TextItemView (#4060)

Co-authored-by: Laurenz <laurmaedje@gmail.com>
This commit is contained in:
Ana Gelez 2024-05-06 14:30:41 +02:00 committed by GitHub
parent 69dcc89d84
commit 061319425b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -89,10 +89,9 @@ impl<'a> TextItemView<'a> {
/// the original text so that it is relative to the start of the slice /// the original text so that it is relative to the start of the slice
pub fn glyph_at(&self, index: usize) -> Glyph { pub fn glyph_at(&self, index: usize) -> Glyph {
let g = &self.item.glyphs[self.glyph_range.start + index]; let g = &self.item.glyphs[self.glyph_range.start + index];
let text_range = self.text_range(); let base = self.text_range().start as u16;
Glyph { Glyph {
range: (g.range.start - text_range.start as u16) range: g.range.start - base..g.range.end - base,
..(g.range.end - text_range.start as u16),
..*g ..*g
} }
} }
@ -122,8 +121,8 @@ impl<'a> TextItemView<'a> {
/// The range of text in the original TextItem that this slice corresponds /// The range of text in the original TextItem that this slice corresponds
/// to. /// to.
fn text_range(&self) -> Range<usize> { fn text_range(&self) -> Range<usize> {
let text_start = self.item.glyphs[self.glyph_range.start].range().start; let first = self.item.glyphs[self.glyph_range.start].range();
let text_end = self.item.glyphs[self.glyph_range.end - 1].range().end; let last = self.item.glyphs[self.glyph_range.end - 1].range();
text_start..text_end first.start.min(last.start)..first.end.max(last.end)
} }
} }