#![feature(type_alias_impl_trait, impl_trait_in_assoc_type)]
use nuit::{Bind, Font, FontDesign, FontLevel, FontWeight, ForEach, HStack, Text, VStack, View, ViewExt};
#[derive(Bind)]
struct FontsView;
impl View for FontsView {
type Body = impl View;
fn body(&self) -> Self::Body {
HStack::with_spacing(50, (
VStack::new(
ForEach::with_index_id([
FontLevel::ExtraLargeTitle2,
FontLevel::ExtraLargeTitle,
FontLevel::LargeTitle,
FontLevel::Title,
FontLevel::Title2,
FontLevel::Title3,
FontLevel::Headline,
FontLevel::Subheadline,
FontLevel::Body,
FontLevel::Callout,
FontLevel::Caption,
FontLevel::Caption2,
FontLevel::Footnote,
], |_, level| {
Text::new(format!("{:?}", level))
.font(Font::with_level(level))
})
),
VStack::new(
ForEach::with_index_id([
FontWeight::Black,
FontWeight::Bold,
FontWeight::Heavy,
FontWeight::Light,
FontWeight::Medium,
FontWeight::Regular,
FontWeight::Semibold,
FontWeight::Thin,
FontWeight::UltraLight,
], |_, weight| {
Text::new(format!("{weight:?}"))
.font(Font::system(18, None, Some(weight)))
})
),
VStack::new(
ForEach::with_index_id([
FontDesign::Default,
FontDesign::Monospaced,
FontDesign::Rounded,
FontDesign::Serif,
], |_, design| {
Text::new(format!("{design:?}"))
.font(Font::system(18, Some(design), None))
})
),
VStack::new(
ForEach::new((0..10).rev(), |i| {
let size = i * 4 + 8;
Text::new(format!("{size}"))
.font(Font::with_size(size))
})
),
))
}
}
fn main() {
nuit::run_app(FontsView);
}