Fix bug in size calculation of truncated text (#5076)

The width of the elision character (`…`) was never included in the size
calculation
This commit is contained in:
Emil Ernerfeldt 2024-09-06 11:30:32 +02:00 committed by GitHub
parent 7cb61f8031
commit b2dcb7d8db
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 20 additions and 0 deletions

View File

@ -98,6 +98,9 @@ pub fn layout(fonts: &mut FontsImpl, job: Arc<LayoutJob>) -> Galley {
if elided {
if let Some(last_row) = rows.last_mut() {
replace_last_glyph_with_overflow_character(fonts, &job, last_row);
if let Some(last) = last_row.glyphs.last() {
last_row.rect.max.x = last.max_x();
}
}
}
@ -1115,4 +1118,21 @@ mod tests {
vec!["日本語とEnglish", "の混在した文章"]
);
}
#[test]
fn test_truncate_width() {
let mut fonts = FontsImpl::new(1.0, 1024, FontDefinitions::default());
let mut layout_job =
LayoutJob::single_section("# DNA\nMore text".into(), TextFormat::default());
layout_job.wrap.max_width = f32::INFINITY;
layout_job.wrap.max_rows = 1;
let galley = layout(&mut fonts, layout_job.into());
assert!(galley.elided);
assert_eq!(
galley.rows.iter().map(|row| row.text()).collect::<Vec<_>>(),
vec!["# DNA…"]
);
let row = &galley.rows[0];
assert_eq!(row.rect.max.x, row.glyphs.last().unwrap().max_x());
}
}