wip: trying to get the engine to work fast again

This commit is contained in:
🪞👃🪞 2024-09-12 17:18:20 +03:00
parent 11ecf669a1
commit d068c193dd
2 changed files with 15 additions and 6 deletions

View file

@ -85,7 +85,7 @@ impl Tui {
let _input_thread = { let _input_thread = {
let engine = engine.clone(); let engine = engine.clone();
let state = state.clone(); let state = state.clone();
let poll = Duration::from_millis(20); let poll = Duration::from_millis(100);
spawn(move || loop { spawn(move || loop {
if ::crossterm::event::poll(poll).is_ok() { if ::crossterm::event::poll(poll).is_ok() {
let event = TuiEvent::Input(::crossterm::event::read().unwrap()); let event = TuiEvent::Input(::crossterm::event::read().unwrap());
@ -112,13 +112,19 @@ impl Tui {
let state = state.clone(); let state = state.clone();
let sleep = Duration::from_millis(20); let sleep = Duration::from_millis(20);
spawn(move || loop { spawn(move || loop {
if let (Ok(mut engine), Ok(state)) = (engine.write(), state.try_read()) { let size = {
let engine = engine.read().unwrap();
if engine.exited() { if engine.exited() {
break break
} }
engine.area = engine.backend.size().expect("get size failed").xywh(); engine.backend.size().expect("get size failed").xywh()
state.render(&mut engine).expect("render failed"); };
{
let mut engine = engine.write().unwrap();
engine.area = size;
state.read().unwrap().render(&mut engine).expect("render failed");
engine.flip(); engine.flip();
std::mem::drop(engine);
} }
std::thread::sleep(sleep); std::thread::sleep(sleep);
}) })
@ -544,6 +550,7 @@ where
Ok(Some([x, y, w, h])) Ok(Some([x, y, w, h]))
} }
fn render (&self, to: &mut Tui) -> Perhaps<[u16;4]> { fn render (&self, to: &mut Tui) -> Perhaps<[u16;4]> {
let layout = self.layout(to.area())?;
self.layout(to.area())? self.layout(to.area())?
.map(|area|(self.0)(&mut |layer| { .map(|area|(self.0)(&mut |layer| {
to.render_in(area, &layer)?; to.render_in(area, &layer)?;

View file

@ -41,24 +41,26 @@ impl Content for Demo<Tui> {
//Layers2::new(|add|add(&Align::Center("FOO"))) //Layers2::new(|add|add(&Align::Center("FOO")))
//Align::Center(&self.items[self.index] as &dyn Widget<Engine = Tui>) //Align::Center(&self.items[self.index] as &dyn Widget<Engine = Tui>)
Align::Center(Layers::new(|add|{ Align::Center(Layers::new(|add|{
add(&FillBg(Color::Rgb(0,128,128)))?;
add(&Split::down(|add|{ add(&Split::down(|add|{
add(&Layers::new(|add|{ add(&Layers::new(|add|{
//add(&Outset::WH(1, 1, FillBg(Color::Rgb(0,128,0))))?; //add(&Outset::WH(1, 1, FillBg(Color::Rgb(0,128,0))))?;
add(&Align::Center("55555"))?; add(&Align::Center("55555"))?;
add(&Align::Center("FOO"))?; add(&Align::Center("FOO"))?;
//add(&FillBg(Color::Rgb(0,128,0)))?; add(&FillBg(Color::Rgb(0,128,0)))?;
//add(&FillBg(Color::Rgb(0,128,0)))?; //add(&FillBg(Color::Rgb(0,128,0)))?;
Ok(()) Ok(())
}))?; }))?;
add(&Layers::new(|add|{ add(&Layers::new(|add|{
add(&Align::Center("7777777"))?; add(&Align::Center("7777777"))?;
add(&Align::Center("BAR"))?; add(&Align::Center("BAR"))?;
add(&FillBg(Color::Rgb(0,0,128)))?;
//add(&Outset::WH(1, 1, FillBg(Color::Rgb(0,0,128))))?; //add(&Outset::WH(1, 1, FillBg(Color::Rgb(0,0,128))))?;
//add(&FillBg(Color::Rgb(0,0,128)))?; //add(&FillBg(Color::Rgb(0,0,128)))?;
//add(&FillBg(Color::Rgb(0,0,128)))?; //add(&FillBg(Color::Rgb(0,0,128)))?;
Ok(()) Ok(())
})) }))
}))?; }))
//add(&Outset::WH(1, 1, FillBg(Color::Rgb(0,128,128)))) //add(&Outset::WH(1, 1, FillBg(Color::Rgb(0,128,128))))
})) }))
} }