summaryrefslogtreecommitdiffstats
path: root/font/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'font/src/lib.rs')
-rw-r--r--font/src/lib.rs18
1 files changed, 11 insertions, 7 deletions
diff --git a/font/src/lib.rs b/font/src/lib.rs
index a2580fc8..f9eaaac6 100644
--- a/font/src/lib.rs
+++ b/font/src/lib.rs
@@ -43,7 +43,7 @@ extern crate foreign_types;
extern crate log;
use std::hash::{Hash, Hasher};
-use std::fmt;
+use std::{fmt, cmp};
use std::sync::atomic::{AtomicUsize, ATOMIC_USIZE_INIT, Ordering};
// If target isn't macos, reexport everything from ft
@@ -65,6 +65,8 @@ pub const UNDERLINE_CURSOR_CHAR: char = '\u{10a3e2}';
/// Character used for the beam cursor
// This is part of the private use area and should not conflict with any font
pub const BEAM_CURSOR_CHAR: char = '\u{10a3e3}';
+/// Width of the beam cursor relative to the font width
+pub const BEAM_CURSOR_WIDTH_PERCENTAGE: i32 = 15;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct FontDesc {
@@ -211,11 +213,10 @@ impl Default for RasterizedGlyph {
}
// Returns a custom underline cursor character
-// TODO: Make sure this works with positive/0 descent -> small fonts
pub fn get_underline_cursor_glyph(descent: i32, width: i32) -> Result<RasterizedGlyph, Error> {
// Create a new rectangle, the height is half the distance between
// bounding box bottom and the baseline
- let height = i32::abs(descent / 2);
+ let height = cmp::max(i32::abs(descent / 2), 1);
let buf = vec![255u8; (width * height * 3) as usize];
// Create a custom glyph with the rectangle data attached to it
@@ -230,10 +231,13 @@ pub fn get_underline_cursor_glyph(descent: i32, width: i32) -> Result<Rasterized
}
// Returns a custom beam cursor character
-// TODO: Make sure this works with positive/0 descent -> small fonts
-pub fn get_beam_cursor_glyph(ascent: i32, height: i32, width: i32) -> Result<RasterizedGlyph, Error> {
- // Create a new rectangle
- let beam_width = (f64::from(width) / 5.) as i32;
+pub fn get_beam_cursor_glyph(
+ ascent: i32,
+ height: i32,
+ width: i32,
+) -> Result<RasterizedGlyph, Error> {
+ // Create a new rectangle that is at least one pixel wide
+ let beam_width = cmp::max(width * BEAM_CURSOR_WIDTH_PERCENTAGE / 100, 1);
let buf = vec![255u8; (beam_width * height * 3) as usize];
// Create a custom glyph with the rectangle data attached to it