better calling for Handler
This commit is contained in:
+11
-1
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user