Element events #19

This commit is contained in:
2025-08-02 16:26:38 -05:00
parent e0ae338e15
commit ec3576e6db
4 changed files with 32 additions and 9 deletions
+23 -1
View File
@@ -12,7 +12,11 @@ use std::{
sync::{Arc, Mutex, MutexGuard},
};
use crate::{render_scope::RenderScope, state::DependencyHandler};
use crate::{
prelude::{Event, Handler},
render_scope::RenderScope,
state::DependencyHandler,
};
/// A trait object for any renderable UI element.
pub type BoxedElement = Box<dyn Element + Send + Sync>;
@@ -37,6 +41,9 @@ pub trait Element: Send + Sync {
#[allow(unused)]
fn draw_child(&self, element: &Arc<Widget>) {}
#[allow(unused)]
fn event(&mut self, event: &dyn Event) {}
/// Returns a type-erased reference to this object.
fn as_any(&self) -> &dyn Any;
@@ -223,6 +230,21 @@ impl Widget {
}
self
}
pub fn event<E: Event + Clone + 'static>(self: &Arc<Self>, e: &E) {
if let Some(wrapper) = self.get::<Handler<E>>() {
wrapper.call(self, e);
}
match &**self {
Widget::Dynamic(w) => {
w.get_elem().event(e);
}
Widget::Static(w) => {
w.get_elem().event(e);
}
}
}
}
impl StaticWidget {