aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Harmon <harmtrav@gmail.com>2025-04-07 19:07:29 -0500
committerGitHub <noreply@github.com>2025-04-08 00:07:29 +0000
commitd716fe4e835369b4d4d98e768b309b5e4088f1af (patch)
tree7816de26133c6d6351a344e56362e0ab9e1ecb8e
parent15f1278d695776860ebcd939d30604b253788278 (diff)
downloadr-alacritty-d716fe4e835369b4d4d98e768b309b5e4088f1af.tar.gz
r-alacritty-d716fe4e835369b4d4d98e768b309b5e4088f1af.tar.bz2
r-alacritty-d716fe4e835369b4d4d98e768b309b5e4088f1af.zip
Apply glyph offset to strikeout position
-rw-r--r--CHANGELOG.md1
-rw-r--r--alacritty/src/renderer/text/glyph_cache.rs31
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());