diff options
| author | Travis Harmon <harmtrav@gmail.com> | 2025-04-07 19:07:29 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-08 00:07:29 +0000 |
| commit | d716fe4e835369b4d4d98e768b309b5e4088f1af (patch) | |
| tree | 7816de26133c6d6351a344e56362e0ab9e1ecb8e | |
| parent | 15f1278d695776860ebcd939d30604b253788278 (diff) | |
| download | r-alacritty-d716fe4e835369b4d4d98e768b309b5e4088f1af.tar.gz r-alacritty-d716fe4e835369b4d4d98e768b309b5e4088f1af.tar.bz2 r-alacritty-d716fe4e835369b4d4d98e768b309b5e4088f1af.zip | |
Apply glyph offset to strikeout position
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | alacritty/src/renderer/text/glyph_cache.rs | 31 |
2 files changed, 19 insertions, 13 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c2cc6cd..509183fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ Notable changes to the `alacritty_terminal` crate are documented in its - Crash when OpenGL context resets - Modifier keys clearing selection with kitty keyboard protocol enabled +- `glyph_offset.y` not applied to strikeout ## 0.15.1 diff --git a/alacritty/src/renderer/text/glyph_cache.rs b/alacritty/src/renderer/text/glyph_cache.rs index 6acc3189..3ad3a36b 100644 --- a/alacritty/src/renderer/text/glyph_cache.rs +++ b/alacritty/src/renderer/text/glyph_cache.rs @@ -82,13 +82,7 @@ impl GlyphCache { pub fn new(mut rasterizer: Rasterizer, font: &Font) -> Result<GlyphCache, crossfont::Error> { let (regular, bold, italic, bold_italic) = Self::compute_font_keys(font, &mut rasterizer)?; - // Need to load at least one glyph for the face before calling metrics. - // The glyph requested here ('m' at the time of writing) has no special - // meaning. - rasterizer.get_glyph(GlyphKey { font_key: regular, character: 'm', size: font.size() })?; - - let metrics = rasterizer.metrics(regular, font.size())?; - + let metrics = GlyphCache::load_font_metrics(&mut rasterizer, font, regular)?; Ok(Self { cache: Default::default(), rasterizer, @@ -104,6 +98,22 @@ impl GlyphCache { }) } + // Load font metrics and adjust for glyph offset. + fn load_font_metrics( + rasterizer: &mut Rasterizer, + font: &Font, + key: FontKey, + ) -> Result<Metrics, crossfont::Error> { + // Need to load at least one glyph for the face before calling metrics. + // The glyph requested here ('m' at the time of writing) has no special + // meaning. + rasterizer.get_glyph(GlyphKey { font_key: key, character: 'm', size: font.size() })?; + + let mut metrics = rasterizer.metrics(key, font.size())?; + metrics.strikeout_position += font.glyph_offset.y as f32; + Ok(metrics) + } + fn load_glyphs_for_font<L: LoadGlyph>(&mut self, font: FontKey, loader: &mut L) { let size = self.font_size; @@ -279,12 +289,7 @@ impl GlyphCache { let (regular, bold, italic, bold_italic) = Self::compute_font_keys(font, &mut self.rasterizer)?; - self.rasterizer.get_glyph(GlyphKey { - font_key: regular, - character: 'm', - size: font.size(), - })?; - let metrics = self.rasterizer.metrics(regular, font.size())?; + let metrics = GlyphCache::load_font_metrics(&mut self.rasterizer, font, regular)?; info!("Font size changed to {:?} px", font.size().as_px()); |