From 7f1437e779832b946d1c2fb50c31a858597f73c5 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Fri, 22 Nov 2024 11:29:00 +0100 Subject: [PATCH] perfomance changes --- src/app.rs | 17 +++++++++++------ src/lib.rs | 4 ++++ src/main.rs | 4 +--- src/ui/mod.rs | 2 ++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/app.rs b/src/app.rs index 5863f13..efbeb82 100644 --- a/src/app.rs +++ b/src/app.rs @@ -64,12 +64,7 @@ extern "C" fn render_loop(ptr: *mut c_void) -> bool { } let args = unsafe { &mut *(ptr as *mut LArgs) }; while args.running { - let (width, height) = get_term_size(); - let mut frame: Vec = create_frame(width, height); - render_to_frame(true, width, &mut frame, args.element); - clear(); - print!("{}", frame.join("")); - flush(); + sleep(1000); } false } @@ -92,12 +87,14 @@ extern "C" fn event_loop(ptr: *mut c_void) -> *const c_void { crossterm::event::Event::FocusGained, &document, ); + document.render(); while args.running { if ptr.is_null() { break; } event(args.element, crossterm::event::read().unwrap(), &document); + document.render(); } null() as *const c_void } @@ -124,6 +121,14 @@ extern "C" fn cmd_loop(ptr: *mut c_void) -> *const c_void { }) .unwrap(); } + Command::Render => { + let (width, height) = get_term_size(); + let mut frame: Vec = create_frame(width, height); + render_to_frame(true, width, &mut frame, args.element); + clear(); + print!("{}", frame.join("")); + flush(); + } } } null() diff --git a/src/lib.rs b/src/lib.rs index 27b3449..8f0f97e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -216,6 +216,7 @@ pub fn convert(widget: &mut Box) -> &mut Box { pub enum Command { Exit, + Render, GetElementById(String), } @@ -240,4 +241,7 @@ impl Document { None } } + pub fn render(&self) { + self.cmd_sender.send(Command::Render).unwrap(); + } } diff --git a/src/main.rs b/src/main.rs index c42bc85..eddde5d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,13 +9,11 @@ fn main() { fn app() -> Element { rsx! { styling: Some(styles()), button { class: "btn", on_click: Handler::new(|_, _, document| { - if let Some(txt) = document.get_element_by_id::("txt") { txt.children.set_text("edited"); } - }), "Hello, World!" } - text { id: "txt", "Some text!" } + text { id: "txt", y: 2, "Some text!" } } } diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 6512cce..de5b9a2 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -159,8 +159,10 @@ impl ElementWidget for Button<'_> { match event { Event::Key(key) => { if key.code == KeyCode::Enter { + document.render(); self.state = "clicked"; run_handler!(self.on_click(event, document)); + document.render(); sleep(100); self.state = ""; }