use crate::ui::UIWidget; use maud::{Markup, Render, html}; use super::space::ScreenValue; #[allow(non_snake_case)] pub fn Sized( height: ScreenValue, width: ScreenValue, inner: T, ) -> SizedWidget { SizedWidget(Box::new(inner), height, width) } pub struct SizedWidget(Box, ScreenValue, ScreenValue); impl Render for SizedWidget { fn render(&self) -> Markup { self.render_with_class("") } } impl UIWidget for SizedWidget { fn can_inherit(&self) -> bool { true } fn base_class(&self) -> Vec { vec![ format!("h-{}", self.1.to_value()), format!("w-{}", self.2.to_value()), ] } fn extended_class(&self) -> Vec { let mut c = self.base_class(); c.extend_from_slice(&self.0.extended_class()); c } fn render_with_class(&self, class: &str) -> Markup { if self.0.as_ref().can_inherit() { self.0 .as_ref() .render_with_class(&format!("{} {class}", self.base_class().join(" "))) } else { html! { div class=(format!("{} {class}", self.base_class().join(" "))) { (self.0.as_ref()) } } } } }