From 2f9b815ebdcee4558284e5e9cef6ef282dc87b08 Mon Sep 17 00:00:00 2001 From: Christian Duerr Date: Sat, 22 Dec 2018 17:16:54 +0000 Subject: Add proper underline and strikeout support This makes use of the new rectangle rendering methods used to display the colored visual bell to add proper underline and strikeout support to Alacritty. --- font/src/rusttype/mod.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'font/src/rusttype') diff --git a/font/src/rusttype/mod.rs b/font/src/rusttype/mod.rs index dea58150..2d28a8bd 100644 --- a/font/src/rusttype/mod.rs +++ b/font/src/rusttype/mod.rs @@ -33,10 +33,25 @@ impl crate::Rasterize for RustTypeRasterizer { .ok_or(Error::MissingGlyph)? .scaled(scale) .h_metrics(); + + let line_height = f64::from(vmetrics.ascent - vmetrics.descent + vmetrics.line_gap); + let average_advance = f64::from(hmetrics.advance_width); + let descent = vmetrics.descent; + + // Strikeout and underline metrics + // RustType doesn't support these, so we make up our own + let thickness = (descent / 5.).round(); + let underline_position = descent / 2. + thickness / 2.; + let strikeout_position = (line_height as f32 / 2. - descent).round(); + Ok(Metrics { - descent: vmetrics.descent, - average_advance: f64::from(hmetrics.advance_width), - line_height: f64::from(vmetrics.ascent - vmetrics.descent + vmetrics.line_gap), + descent, + average_advance, + line_height, + underline_position, + underline_thickness: thickness, + strikeout_position, + strikeout_thickness: thickness, }) } -- cgit