use crate::prelude::*; use std::marker::Unsize; pub struct WidgetPtr { pub inner: Option, } impl Widget for WidgetPtr { fn draw(&mut self, painter: &mut Painter) -> Size { match &self.inner { Some(id) => painter.widget(id).size(), None => Size::default(), } } } impl WidgetPtr { pub fn new() -> Self { Self::default() } pub fn empty() -> Self { Self { inner: Default::default(), } } pub fn set>(&mut self, to: StrongWidget) { self.inner = Some(to) } pub fn replace>( &mut self, to: StrongWidget, ) -> Option { self.inner.replace(to) } } impl Default for WidgetPtr { fn default() -> Self { Self::empty() } }