use crate::prelude::*; pub struct Padded { pub padding: Padding, pub inner: WidgetId, } impl Widget for Padded { fn draw(&mut self, painter: &mut Painter) { painter.widget_within(&self.inner, self.padding.region()); } fn desired_size(&mut self, ctx: &mut SizeCtx) -> UiVec2 { let mut size = ctx.size(&self.inner); size.abs.x += self.padding.left + self.padding.right; size.abs.y += self.padding.top + self.padding.bottom; size } } pub struct Padding { left: f32, right: f32, top: f32, bottom: f32, } impl Padding { pub fn uniform(amt: f32) -> Self { Self { left: amt, right: amt, top: amt, bottom: amt, } } pub fn region(&self) -> UiRegion { let mut region = UiRegion::full(); region.top_left.abs.x += self.left; region.top_left.abs.y += self.top; region.bot_right.abs.x -= self.right; region.bot_right.abs.y -= self.bottom; region } } impl From for Padding { fn from(amt: T) -> Self { Self::uniform(amt.to_f32()) } }