partial fix for resize

This commit is contained in:
🪞👃🪞 2024-09-18 21:58:42 +03:00
parent 6660416fd2
commit 3042e9e3a8

View file

@ -82,16 +82,13 @@ impl Tui {
exited.store(true, Ordering::Relaxed); exited.store(true, Ordering::Relaxed);
}, },
_ => { _ => {
if let Err(e) = state.write().unwrap().handle(&TuiInput { let exited = exited.clone();
event, if let Err(e) = state.write().unwrap().handle(&TuiInput { event, exited }) {
exited: exited.clone()
}) {
panic!("{e}") panic!("{e}")
} }
} }
} }
} }
//engine.read().unwrap().handle(&mut *state.write().unwrap()).expect("handle failed");
}) })
} }
fn spawn_render_thread <R: Component<Tui> + Sized + 'static> ( fn spawn_render_thread <R: Component<Tui> + Sized + 'static> (
@ -107,19 +104,22 @@ impl Tui {
if exited.fetch_and(true, Ordering::Relaxed) { if exited.fetch_and(true, Ordering::Relaxed) {
break break
} }
let size = engine.read().unwrap().backend.size().expect("get size failed");
if let Ok(state) = state.try_read() { if let Ok(state) = state.try_read() {
let area = engine.read().unwrap().backend.size().expect("get size failed").xywh(); let mut output = TuiOutput { buffer, area: size.xywh() };
let mut output = TuiOutput { buffer, area };
state.render(&mut output).expect("render failed"); state.render(&mut output).expect("render failed");
buffer = engine.write().unwrap().flip(output.buffer); buffer = engine.write().unwrap().flip(output.buffer, size);
} }
std::thread::sleep(sleep); std::thread::sleep(sleep);
}) })
} }
//pub fn buffer (&mut self) -> &mut Buffer { fn flip (&mut self, mut buffer: Buffer, size: ratatui::prelude::Rect) -> Buffer {
//&mut self.buffers[self.buffer] if buffer.area != size {
//} buffer.resize(size);
fn flip (&mut self, mut buffer: Buffer) -> Buffer { }
if self.buffer.area != size {
self.buffer.resize(size);
}
let updates = self.buffer.diff(&buffer); let updates = self.buffer.diff(&buffer);
self.backend.draw(updates.into_iter()).expect("failed to render"); self.backend.draw(updates.into_iter()).expect("failed to render");
self.backend.flush().expect("failed to flush output buffer"); self.backend.flush().expect("failed to flush output buffer");