From 603dba29e610542187179342f8effe536e6189d7 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Tue, 16 Sep 2025 13:30:28 +0200 Subject: [PATCH] Add snapshot test for text spacing/kerning (#7545) --- crates/egui_demo_lib/tests/misc.rs | 26 +++++++++++++++++++ .../image_blending/image_dark_x1.png | 3 +++ .../image_blending/image_dark_x2.png | 3 +++ .../image_blending/image_light_x1.png | 3 +++ .../image_blending/image_light_x2.png | 3 +++ crates/epaint/src/text/font.rs | 2 +- 6 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 crates/egui_demo_lib/tests/misc.rs create mode 100644 crates/egui_demo_lib/tests/snapshots/image_blending/image_dark_x1.png create mode 100644 crates/egui_demo_lib/tests/snapshots/image_blending/image_dark_x2.png create mode 100644 crates/egui_demo_lib/tests/snapshots/image_blending/image_light_x1.png create mode 100644 crates/egui_demo_lib/tests/snapshots/image_blending/image_light_x2.png diff --git a/crates/egui_demo_lib/tests/misc.rs b/crates/egui_demo_lib/tests/misc.rs new file mode 100644 index 00000000..5a8ae2c2 --- /dev/null +++ b/crates/egui_demo_lib/tests/misc.rs @@ -0,0 +1,26 @@ +use egui_kittest::Harness; + +#[test] +fn test_kerning() { + for pixels_per_point in [1.0, 2.0] { + for theme in [egui::Theme::Dark, egui::Theme::Light] { + let mut harness = Harness::builder() + .with_pixels_per_point(pixels_per_point) + .with_theme(theme) + .build_ui(|ui| { + ui.label("Thin spaces: −123 456 789"); + ui.label("Ligature: fi :)"); + ui.label("\ttabbed"); + }); + harness.run(); + harness.fit_contents(); + harness.snapshot(format!( + "image_blending/image_{theme}_x{pixels_per_point}", + theme = match theme { + egui::Theme::Dark => "dark", + egui::Theme::Light => "light", + } + )); + } + } +} diff --git a/crates/egui_demo_lib/tests/snapshots/image_blending/image_dark_x1.png b/crates/egui_demo_lib/tests/snapshots/image_blending/image_dark_x1.png new file mode 100644 index 00000000..069d4819 --- /dev/null +++ b/crates/egui_demo_lib/tests/snapshots/image_blending/image_dark_x1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b619e8dbedbfc017513111dc26144d795ce97352631ae561c1c336c3e9e0fd4 +size 5557 diff --git a/crates/egui_demo_lib/tests/snapshots/image_blending/image_dark_x2.png b/crates/egui_demo_lib/tests/snapshots/image_blending/image_dark_x2.png new file mode 100644 index 00000000..020f9e37 --- /dev/null +++ b/crates/egui_demo_lib/tests/snapshots/image_blending/image_dark_x2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3827cbd75a015ab9d03d9f47ba40fcadb71a2ba3a312d0892ae22a8e379103bc +size 12539 diff --git a/crates/egui_demo_lib/tests/snapshots/image_blending/image_light_x1.png b/crates/egui_demo_lib/tests/snapshots/image_blending/image_light_x1.png new file mode 100644 index 00000000..f248a753 --- /dev/null +++ b/crates/egui_demo_lib/tests/snapshots/image_blending/image_light_x1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afd019fc23aa4b8a899e2df92138b2b3e69b7cb1d20e038a5e841c84e9095fe1 +size 5740 diff --git a/crates/egui_demo_lib/tests/snapshots/image_blending/image_light_x2.png b/crates/egui_demo_lib/tests/snapshots/image_blending/image_light_x2.png new file mode 100644 index 00000000..f5024f7a --- /dev/null +++ b/crates/egui_demo_lib/tests/snapshots/image_blending/image_light_x2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6129567eaf7d77c6656d9fe6984f1667b0817099492a24f6622da0f1d636e0e8 +size 13646 diff --git a/crates/epaint/src/text/font.rs b/crates/epaint/src/text/font.rs index 37238918..c452eb4b 100644 --- a/crates/epaint/src/text/font.rs +++ b/crates/epaint/src/text/font.rs @@ -259,7 +259,7 @@ impl FontImpl { if let Some(space) = self.glyph_info(' ') { let em = self.ab_glyph_font.units_per_em().unwrap_or(1.0); - let advance_width = f32::min(em / 6.0, space.advance_width_unscaled.0 * 0.5); + let advance_width = f32::min(em / 6.0, space.advance_width_unscaled.0 * 0.5); // TODO(emilk): make configurable let glyph_info = GlyphInfo { advance_width_unscaled: advance_width.into(), ..space