diff --git a/font/src/ft/mod.rs b/font/src/ft/mod.rs index 6cd859e..25917e9 100644 --- a/font/src/ft/mod.rs +++ b/font/src/ft/mod.rs @@ -294,6 +294,29 @@ impl FreeTypeRasterizer { let (pixel_width, buf) = Self::normalize_buffer(&glyph.bitmap())?; + // Render a custom symbol for the underline cursor + if glyph_key.c == '􊏢' { + // Get the bottom of the bounding box + let size_metrics = face.ft_face.size_metrics() + .ok_or(Error::MissingSizeMetrics)?; + let descent = (size_metrics.descender / 64) as f32; + + // Create a new rectangle, the height is half the distance between + // bounding box bottom and the baseline + let height = f32::abs(descent / 2.) as i32; + let buf = vec![255u8; (pixel_width * height * 3) as usize]; + + // Create a custom glyph with the rectangle data attached to it + return Ok(RasterizedGlyph { + c: glyph_key.c, + top: descent as i32 + height, + left: glyph.bitmap_left(), + height, + width: pixel_width, + buf: buf, + }); + } + Ok(RasterizedGlyph { c: glyph_key.c, top: glyph.bitmap_top(), diff --git a/src/term/mod.rs b/src/term/mod.rs index 18858da..892a96b 100644 --- a/src/term/mod.rs +++ b/src/term/mod.rs @@ -207,7 +207,8 @@ impl<'a> RenderableCellsIter<'a> { }); let cursor_color = self.text_cursor_color(&cursor_cell); - cursor_cell.c = '▁'; + // This is part of the private use area and shouldn't be used by any font + cursor_cell.c = '􊏢'; cursor_cell.fg = cursor_color; self.cursor_cells.push_back(Indexed { line: self.cursor.line,