use super::{Component, Event, EventCtx}; use crate::ui::geometry::Rect; pub struct Map { inner: T, func: F, } impl Map { pub fn new(inner: T, func: F) -> Self { Self { inner, func } } } impl Component for Map where T: Component, F: Fn(T::Msg) -> Option, { type Msg = U; fn place(&mut self, bounds: Rect) -> Rect { self.inner.place(bounds) } fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option { self.inner.event(ctx, event).and_then(&self.func) } fn paint(&mut self) { self.inner.paint() } fn bounds(&self, sink: &mut dyn FnMut(Rect)) { self.inner.bounds(sink); } } #[cfg(feature = "ui_debug")] impl crate::trace::Trace for Map where T: Component + crate::trace::Trace, { fn trace(&self, t: &mut dyn crate::trace::Tracer) { self.inner.trace(t) } }