use anyhow::bail;
use std::{
path::PathBuf,
rc::Rc,
};
use crate::{graphics::Graphics, resources::LoadableResource};
pub struct Font {
pub path: PathBuf,
pub family_name: String,
name: String,
pub size: f32,
pub buffer: Rc<sdl3::ttf::Font<'static>>,
}
pub struct DummyFont {
pub path: PathBuf,
name: String,
}
impl LoadableResource for DummyFont {
fn load(
path: PathBuf,
name: String,
_graphics: &mut Graphics,
_size: Option<f32>,
) -> anyhow::Result<Box<dyn LoadableResource>>
where
Self: Sized, {
Ok(Box::new(Self {
path,
name,
}))
}
fn name(&self) -> String {
self.name.to_string()
}
}
impl LoadableResource for Font {
fn load(
path: PathBuf,
name: String,
graphics: &mut Graphics,
size: Option<f32>,
) -> anyhow::Result<Box<dyn LoadableResource>>
where
Self: Sized,
{
if size.is_none() {
bail!("no font size was provided");
}
let font = graphics.ttf_context.load_font(&path, size.unwrap())?;
Ok(Box::new(Self {
path,
family_name: font
.face_family_name()
.expect("failed to get font family name"),
name,
size: size.unwrap(),
buffer: Rc::new(font),
}))
}
fn name(&self) -> String {
self.name.to_string()
}
}