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