use super::{Component, Event, EventCtx}; use crate::ui::{ geometry::{Insets, Rect}, shape::Renderer, }; pub struct Border { border: Insets, inner: T, } impl Border where T: Component, { pub fn new(border: Insets, inner: T) -> Self { Self { border, inner } } pub fn inner(&self) -> &T { &self.inner } } impl Component for Border where T: Component, { type Msg = T::Msg; fn place(&mut self, bounds: Rect) -> Rect { let inside = bounds.inset(self.border); self.inner.place(inside); inside } fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option { self.inner.event(ctx, event) } fn paint(&mut self) { self.inner.paint() } fn render<'s>(&'s self, target: &mut impl Renderer<'s>) { self.inner.render(target); } #[cfg(feature = "ui_bounds")] fn bounds(&self, sink: &mut dyn FnMut(Rect)) { self.inner.bounds(sink); } } #[cfg(feature = "ui_debug")] impl crate::trace::Trace for Border where T: Component + crate::trace::Trace, { fn trace(&self, t: &mut dyn crate::trace::Tracer) { self.inner.trace(t) } }