better calling for Handler

This commit is contained in:
2024-12-19 01:02:04 +01:00
parent 97141eae77
commit 8fd17e8195
4 changed files with 16 additions and 19 deletions
+11 -1
View File
@@ -26,6 +26,7 @@ use std::{
sync::{Arc, Mutex}, sync::{Arc, Mutex},
}; };
use crossterm::event::Event;
use ui::Style; use ui::Style;
pub mod css; pub mod css;
@@ -41,8 +42,8 @@ pub mod prelude {
pub use crate::ui::Instruction::*; pub use crate::ui::Instruction::*;
pub use crate::ui::Number::{Auto, Center}; pub use crate::ui::Number::{Auto, Center};
pub use crate::{self as osui, css, ersx, launch, rsx, ui::*, Handler}; 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::{style, Document, State};
pub use crate::{Children, Element, ElementCore, ElementWidget};
pub use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind}; pub use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind};
pub fn sleep(ms: u64) { pub fn sleep(ms: u64) {
std::thread::sleep(std::time::Duration::from_millis(ms)); std::thread::sleep(std::time::Duration::from_millis(ms));
@@ -305,6 +306,15 @@ impl<T> Handler<T> {
{ {
Handler(Arc::new(Mutex::new(handler_fn))) 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<T> {
Handler(Arc::clone(&self.0))
}
} }
impl Writer { impl Writer {
-12
View File
@@ -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_export]
macro_rules! launch { macro_rules! launch {
($expr:expr) => { ($expr:expr) => {
+3 -4
View File
@@ -35,10 +35,7 @@ macro_rules! parse_rsx_param {
osui::parse_rsx_param!($elem, $($rest)*); osui::parse_rsx_param!($elem, $($rest)*);
}; };
($elem:expr, $($k:ident).+: fn($($params:tt)*) $code:block $(, $($rest:tt)*)?) => { //// FUNCTIONS
$elem.$($k).+ = $crate::Handler::new(move |$($params)*| $code);
osui::parse_rsx_param!($elem, $($($rest)*)?);
};
($elem:expr, $($k:ident).+: fn($($params:tt)*) $(@$($v:ident),+)? $code:block $(, $($rest:tt)*)?) => { ($elem:expr, $($k:ident).+: fn($($params:tt)*) $(@$($v:ident),+)? $code:block $(, $($rest:tt)*)?) => {
$elem.$($k).+ = $crate::Handler::new({ $elem.$($k).+ = $crate::Handler::new({
@@ -53,6 +50,8 @@ macro_rules! parse_rsx_param {
osui::parse_rsx_param!($elem, $($($rest)*)?); osui::parse_rsx_param!($elem, $($($rest)*)?);
}; };
//// FUNCTIONS END
($elem:expr, $($k:ident).+: $v:expr $(, $($rest:tt)*)?) => { ($elem:expr, $($k:ident).+: $v:expr $(, $($rest:tt)*)?) => {
$elem.$($k).+ = $crate::check_expr!($v); $elem.$($k).+ = $crate::check_expr!($v);
osui::parse_rsx_param!($elem, $($($rest)*)?); osui::parse_rsx_param!($elem, $($($rest)*)?);
+2 -2
View File
@@ -103,14 +103,14 @@ impl ElementWidget for Button<'_> {
if key.code == KeyCode::Enter { if key.code == KeyCode::Enter {
document.render(); document.render();
self.style.set_state("clicked"); self.style.set_state("clicked");
call!(self.on_click(event, document)); self.on_click.clone().call(self, event, document);
document.render(); document.render();
sleep(65); sleep(65);
self.style.set_state(""); self.style.set_state("");
} }
} }
Event::FocusGained => { Event::FocusGained => {
call!(self.on_hover(event, document)); self.on_hover.clone().call(self, event, document);
} }
_ => {} _ => {}
} }