1
0
Fork 0
mirror of https://github.com/alacritty/alacritty.git synced 2024-11-18 13:55:23 -05:00

Rework line position

Line position has been reworked to be more accurate to freetype
specification.

However, the strikethrough position is not documented in freetype so a
weird hack has been chosen for now, further improving this depends on
getting an accurate underline first.

Underlines seem messed up because freetype is reporting a fixed
underline position no matter how big the font size. This can lead to the
underline leaving the glyph box with small fonts and a proportionally
tiny underline with big fonts.
This commit is contained in:
Christian Duerr 2018-02-04 21:01:02 +01:00
parent 0b90772efc
commit fd984f36b7
No known key found for this signature in database
GPG key ID: 85CDAE3C164BA7B4

View file

@ -539,10 +539,20 @@ fn cell_line_rect(
let y = match flag { let y = match flag {
cell::Flags::UNDERLINE => { cell::Flags::UNDERLINE => {
((start.line.0 as f32 + 1.) * metrics.line_height as f32 + metrics.descent - metrics.underline_position) as u32 // Get the baseline positon and offset it down by (-) underline position
// then move it up by half the underline thickness
((start.line.0 as f32 + 1.) * metrics.line_height as f32 + metrics.descent
- metrics.underline_position - metrics.underline_thickness / 2.).round() as u32
}, },
cell::Flags::STRIKE_THROUGH => { cell::Flags::STRIKE_THROUGH => {
((start.line.0 as f32 + 0.5) * metrics.line_height as f32) as u32 // Get half-way point between cell top and baseline
// Then offset it down by (-) underline position and
// move it up by half the underline thickness
// TODO: Moving the strikethrough down by underline thickness is a hack
((start.line.0 as f32) * metrics.line_height as f32
+ (metrics.line_height as f32 + metrics.descent) / 2.
- metrics.underline_thickness / 2.
- metrics.underline_position).round() as u32
}, },
_ => panic!("Invalid flag for cell line drawing specified"), _ => panic!("Invalid flag for cell line drawing specified"),
}; };