From 8fd17e8195054dcc7fe36582f108e4490d3e9c0a Mon Sep 17 00:00:00 2001 From: Leo dev Date: Thu, 19 Dec 2024 01:02:04 +0100 Subject: [PATCH] better calling for Handler --- src/lib.rs | 12 +++++++++++- src/macros.rs | 12 ------------ src/rsx.rs | 7 +++---- src/ui/mod.rs | 4 ++-- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 976576c..6a35080 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,6 +26,7 @@ use std::{ sync::{Arc, Mutex}, }; +use crossterm::event::Event; use ui::Style; pub mod css; @@ -41,8 +42,8 @@ pub mod prelude { pub use crate::ui::Instruction::*; pub use crate::ui::Number::{Auto, Center}; pub use crate::{self as osui, css, ersx, launch, rsx, ui::*, Handler}; - pub use crate::{call, Children, Element, ElementCore, ElementWidget}; pub use crate::{style, Document, State}; + pub use crate::{Children, Element, ElementCore, ElementWidget}; pub use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind}; pub fn sleep(ms: u64) { std::thread::sleep(std::time::Duration::from_millis(ms)); @@ -305,6 +306,15 @@ impl Handler { { Handler(Arc::new(Mutex::new(handler_fn))) } + + pub fn call(&self, s: &mut T, event: Event, document: &Document) { + let mut o = self.0.lock().unwrap(); + o(s, event, document); + } + + pub fn clone(&self) -> Handler { + Handler(Arc::clone(&self.0)) + } } impl Writer { diff --git a/src/macros.rs b/src/macros.rs index ef57207..0984680 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -1,15 +1,3 @@ -#[macro_export] -macro_rules! call { - ($self:ident.$handler:ident ($($inner:tt)*)) => {{ - let a = std::sync::Arc::clone(&$self.$handler.0); - let mut o = a.lock().unwrap(); - o($self, $($inner)*); - }}; - ($self:ident.$handler:ident) => {{ - &$self.$handler; - }}; -} - #[macro_export] macro_rules! launch { ($expr:expr) => { diff --git a/src/rsx.rs b/src/rsx.rs index bda1c75..7902c1d 100644 --- a/src/rsx.rs +++ b/src/rsx.rs @@ -35,10 +35,7 @@ macro_rules! parse_rsx_param { osui::parse_rsx_param!($elem, $($rest)*); }; - ($elem:expr, $($k:ident).+: fn($($params:tt)*) $code:block $(, $($rest:tt)*)?) => { - $elem.$($k).+ = $crate::Handler::new(move |$($params)*| $code); - osui::parse_rsx_param!($elem, $($($rest)*)?); - }; + //// FUNCTIONS ($elem:expr, $($k:ident).+: fn($($params:tt)*) $(@$($v:ident),+)? $code:block $(, $($rest:tt)*)?) => { $elem.$($k).+ = $crate::Handler::new({ @@ -53,6 +50,8 @@ macro_rules! parse_rsx_param { osui::parse_rsx_param!($elem, $($($rest)*)?); }; + //// FUNCTIONS END + ($elem:expr, $($k:ident).+: $v:expr $(, $($rest:tt)*)?) => { $elem.$($k).+ = $crate::check_expr!($v); osui::parse_rsx_param!($elem, $($($rest)*)?); diff --git a/src/ui/mod.rs b/src/ui/mod.rs index c80f894..ba00bfd 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -103,14 +103,14 @@ impl ElementWidget for Button<'_> { if key.code == KeyCode::Enter { document.render(); self.style.set_state("clicked"); - call!(self.on_click(event, document)); + self.on_click.clone().call(self, event, document); document.render(); sleep(65); self.style.set_state(""); } } Event::FocusGained => { - call!(self.on_hover(event, document)); + self.on_hover.clone().call(self, event, document); } _ => {} }