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},
};
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<T> Handler<T> {
{
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 {
-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_rules! launch {
($expr:expr) => {
+3 -4
View File
@@ -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)*)?);
+2 -2
View File
@@ -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);
}
_ => {}
}