36 lines
869 B
Rust
36 lines
869 B
Rust
use macroquad::{
|
|
text::{TextDimensions, measure_text},
|
|
window::screen_width,
|
|
};
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
#[allow(dead_code)]
|
|
pub enum FontSize {
|
|
Small,
|
|
Medium,
|
|
Large,
|
|
}
|
|
|
|
impl FontSize {
|
|
pub fn size(&self) -> u16 {
|
|
let size1 = measure_text("A", None, 10, 1.0);
|
|
let size2 = measure_text("A", None, 20, 1.0);
|
|
|
|
let scale_factor = size2.width - size1.width / 10.0;
|
|
|
|
let offset = size2.width - (10.0 * scale_factor);
|
|
|
|
let base_font_size = screen_width() * 0.01 - offset / scale_factor;
|
|
|
|
(match self {
|
|
FontSize::Small => base_font_size,
|
|
FontSize::Medium => base_font_size * 1.0,
|
|
FontSize::Large => base_font_size * 2.0,
|
|
}) as u16
|
|
}
|
|
|
|
pub fn measure(&self, text: &str) -> TextDimensions {
|
|
measure_text(text, None, self.size(), 1.0)
|
|
}
|
|
}
|