diff --git a/src/component.rs b/src/component.rs index af20a4b..40e63c4 100644 --- a/src/component.rs +++ b/src/component.rs @@ -10,18 +10,8 @@ use crate::{ View, ViewWrapper, }; -pub trait Event { - fn as_any(&self) -> &dyn Any; -} - -impl<'a> dyn Event + 'a { - pub fn get(&self) -> Option<&T> { - self.as_any().downcast_ref() - } -} - pub type Component = Arc) -> View + Send + Sync>; -pub type EventHandler = Arc, &dyn Event) + Send + Sync>>; +pub type EventHandler = Arc, &dyn Any) + Send + Sync>>; pub struct Scope { pub children: Mutex, Option)>>, @@ -77,7 +67,7 @@ impl Context { self.view.lock().unwrap().clone() } - pub fn on_event, &T) + Send + Sync + 'static>( + pub fn on_event, &T) + Send + Sync + 'static>( self: &Arc, handler: F, ) { @@ -87,15 +77,15 @@ impl Context { .entry(TypeId::of::()) .or_insert_with(|| Vec::new()) .push(Arc::new(Mutex::new( - move |ctx: &Arc, event: &dyn Event| { - if let Some(e) = event.get::() { + move |ctx: &Arc, event: &dyn Any| { + if let Some(e) = event.downcast_ref::() { (handler)(ctx, e); } }, ))); } - pub fn emit_event(self: &Arc, event: &E) { + pub fn emit_event(self: &Arc, event: &E) { if let Some(v) = self.event_handlers.lock().unwrap().get(&TypeId::of::()) { for i in v { (i.lock().unwrap())(self, event); @@ -109,7 +99,7 @@ impl Context { } } - pub fn emit_event_threaded( + pub fn emit_event_threaded( self: &Arc, event: &E, ) {