use crate::{
graphics::{Shape, Size},
DebugWidget, ToAny, Widget,
};
#[derive(Debug)]
pub struct Detector<'a, T: Widget> {
pub widget: Box<T>,
pub on_tap: fn(widget: &'a mut T),
}
crate::dynamic_controller!(Detector<'a, T>);
impl<'a, T: Widget + 'static> Widget for Detector<'a, T> {
fn shape(&self, size: Option<Size>) -> Shape {
self.widget.shape(size)
}
}
impl<'a, T: Widget> Detector<'a, T> {
pub fn new(
widget: T,
on_tap: fn(widget: &'a mut T),
) -> Self {
Self {
widget: Box::new(widget),
on_tap,
}
}
pub fn on_tap(&'static mut self) {
let call = self.on_tap;
call(&mut self.widget);
}
}