Element events #19
This commit is contained in:
+23
-1
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user