use std::marker::PhantomData;
use std::ops::Deref;
use crate::dependencies::{with_dependencies, with_dependency};
pub use typography::{body, label, title};
use crate::views::text::Font;
use crate::views::ui::accessibility::Scale;
mod typography;
pub struct Inter<'a, Style> {
marker: PhantomData<Style>,
font: Font<'a>,
}
impl<'a, Style> Deref for Inter<'a, Style> {
type Target = Font<'a>;
fn deref(&self) -> &Self::Target {
&self.font
}
}
pub fn with_default_fonts<F: FnOnce() -> R, R>(f: F) -> R {
with_dependency(Scale::default(), || {
with_dependencies(
(
Inter::<body::L>::default(),
Inter::<body::M>::default(),
Inter::<body::S>::default(),
Inter::<title::L>::default(),
Inter::<title::M>::default(),
Inter::<title::S>::default(),
Inter::<label::L>::default(),
Inter::<label::M>::default(),
Inter::<label::S>::default(),
),
f,
)
})
}
#[test]
fn test_font_defaults() {
use crate::dependencies::Dependency;
with_default_fonts(|| {
let body = Dependency::<Inter<body::M>>::new();
assert!(body.is_some());
});
}
#[test]
fn snapshot_testing() {
use crate::dependencies::Dependency;
use crate::views::{svg::Output as Svg, Bounds, View};
use insta::assert_snapshot;
with_default_fonts(|| {
let black = [0, 0, 0, 0xff];
let body = Dependency::<Inter<body::M>>::new();
let caption = Dependency::<Inter<body::S>>::new();
let text = (
body.text(black, "This space intentionally left blank."),
caption.text(black, "except for this, I mean…"),
);
let size = text.size().ceil();
let mut output = Svg::new(size.width, size.height);
text.draw(Bounds::from_size(size), &mut output);
assert_snapshot!("body text", output.into_inner());
});
}