mirror of
https://github.com/wez/wezterm.git
synced 2024-12-26 06:42:12 +03:00
We now do a better job at rendering dejavusansmono
The descender in that font seems bad, so guestimate something that works better for us.
This commit is contained in:
parent
8afbcc8ee0
commit
e87f129ded
28
src/xwin.rs
28
src/xwin.rs
@ -392,6 +392,29 @@ impl<'a> TerminalWindow<'a> {
|
|||||||
} else {
|
} else {
|
||||||
((descender as f64) / 64.0).floor() as isize
|
((descender as f64) / 64.0).floor() as isize
|
||||||
};
|
};
|
||||||
|
debug!(
|
||||||
|
"METRICS: h={} w={} d={}",
|
||||||
|
cell_height,
|
||||||
|
cell_width,
|
||||||
|
descender
|
||||||
|
);
|
||||||
|
|
||||||
|
// The descender isn't always reliable. If it looks implausible then we
|
||||||
|
// cook up something more reasonable. For example, if the descender pulls
|
||||||
|
// the basline up into the top half of the cell then it is probably bad
|
||||||
|
// so we halve that distance, putting it closer to the bottom quarter instead.
|
||||||
|
let descender = if descender.abs() >= cell_height as isize / 2 {
|
||||||
|
let alt_desc = descender / 2;
|
||||||
|
eprintln!(
|
||||||
|
"descender {} is >=50% the cell height, using {} instead",
|
||||||
|
descender,
|
||||||
|
alt_desc
|
||||||
|
);
|
||||||
|
alt_desc
|
||||||
|
} else {
|
||||||
|
descender
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
let host = Host {
|
let host = Host {
|
||||||
window,
|
window,
|
||||||
@ -411,6 +434,7 @@ impl<'a> TerminalWindow<'a> {
|
|||||||
underline_data.resize(width * cell_height * 4, 0u8);
|
underline_data.resize(width * cell_height * 4, 0u8);
|
||||||
|
|
||||||
let descender_row = (cell_height as isize + descender) as usize;
|
let descender_row = (cell_height as isize + descender) as usize;
|
||||||
|
let descender_plus_one = (1 + descender_row).min(cell_height - 1);
|
||||||
let strike_row = descender_row / 2;
|
let strike_row = descender_row / 2;
|
||||||
|
|
||||||
// First, the single underline.
|
// First, the single underline.
|
||||||
@ -427,7 +451,7 @@ impl<'a> TerminalWindow<'a> {
|
|||||||
{
|
{
|
||||||
let col = 1;
|
let col = 1;
|
||||||
let offset_one = ((width * 4) * (descender_row - 1)) + (col * 4 * cell_width);
|
let offset_one = ((width * 4) * (descender_row - 1)) + (col * 4 * cell_width);
|
||||||
let offset_two = ((width * 4) * (descender_row + 1)) + (col * 4 * cell_width);
|
let offset_two = ((width * 4) * (descender_plus_one)) + (col * 4 * cell_width);
|
||||||
for i in 0..4 * cell_width {
|
for i in 0..4 * cell_width {
|
||||||
underline_data[offset_one + i] = 0xff;
|
underline_data[offset_one + i] = 0xff;
|
||||||
underline_data[offset_two + i] = 0xff;
|
underline_data[offset_two + i] = 0xff;
|
||||||
@ -456,7 +480,7 @@ impl<'a> TerminalWindow<'a> {
|
|||||||
let col = 4;
|
let col = 4;
|
||||||
let offset_one = ((width * 4) * (descender_row - 1)) + (col * 4 * cell_width);
|
let offset_one = ((width * 4) * (descender_row - 1)) + (col * 4 * cell_width);
|
||||||
let offset_two = ((width * 4) * strike_row) + (col * 4 * cell_width);
|
let offset_two = ((width * 4) * strike_row) + (col * 4 * cell_width);
|
||||||
let offset_three = ((width * 4) * (descender_row + 1)) + (col * 4 * cell_width);
|
let offset_three = ((width * 4) * (descender_plus_one)) + (col * 4 * cell_width);
|
||||||
for i in 0..4 * cell_width {
|
for i in 0..4 * cell_width {
|
||||||
underline_data[offset_one + i] = 0xff;
|
underline_data[offset_one + i] = 0xff;
|
||||||
underline_data[offset_two + i] = 0xff;
|
underline_data[offset_two + i] = 0xff;
|
||||||
|
Loading…
Reference in New Issue
Block a user