use once_cell::sync::Lazy;
use rustybuzz::{Face, UnicodeBuffer};
const FONT_DATA: [&[u8]; 1] = [include_bytes!("../fonts/DejaVuSans.ttf")];
const FONT_SIZE: f32 = 11.0;
const PADDING: i32 = 24;
static FONTS: Lazy<[Face; 1]> = Lazy::new(|| {
let dejavu_sans = Face::from_slice(FONT_DATA[0], 0).unwrap();
[dejavu_sans]
});
pub fn measure_text(text: &str) -> u16 {
let face = &FONTS[0];
let features = [];
let mut buffer = UnicodeBuffer::new();
buffer.push_str(text);
let buffer = rustybuzz::shape(face, &features, buffer);
let mut x = 0;
for pos in buffer.glyph_positions() {
x += pos.x_advance;
}
let x = (x as f32) / (face.units_per_em() as f32) * FONT_SIZE;
let x = x as i32 + PADDING;
if x > u16::MAX as _ {
u16::MAX
} else {
x as _
}
}