From 3042e9e3a87c11f43a49d3c8bef0162350107882 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Wed, 18 Sep 2024 21:58:42 +0300 Subject: [PATCH] partial fix for resize --- crates/tek_core/src/tui.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/crates/tek_core/src/tui.rs b/crates/tek_core/src/tui.rs index 463b05c8..9035c3ed 100644 --- a/crates/tek_core/src/tui.rs +++ b/crates/tek_core/src/tui.rs @@ -82,16 +82,13 @@ impl Tui { exited.store(true, Ordering::Relaxed); }, _ => { - if let Err(e) = state.write().unwrap().handle(&TuiInput { - event, - exited: exited.clone() - }) { + let exited = exited.clone(); + if let Err(e) = state.write().unwrap().handle(&TuiInput { event, exited }) { panic!("{e}") } } } } - //engine.read().unwrap().handle(&mut *state.write().unwrap()).expect("handle failed"); }) } fn spawn_render_thread + Sized + 'static> ( @@ -107,19 +104,22 @@ impl Tui { if exited.fetch_and(true, Ordering::Relaxed) { break } + let size = engine.read().unwrap().backend.size().expect("get size failed"); 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 }; + let mut output = TuiOutput { buffer, area: size.xywh() }; 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); }) } - //pub fn buffer (&mut self) -> &mut Buffer { - //&mut self.buffers[self.buffer] - //} - fn flip (&mut self, mut buffer: Buffer) -> Buffer { + fn flip (&mut self, mut buffer: Buffer, size: ratatui::prelude::Rect) -> Buffer { + if buffer.area != size { + buffer.resize(size); + } + if self.buffer.area != size { + self.buffer.resize(size); + } let updates = self.buffer.diff(&buffer); self.backend.draw(updates.into_iter()).expect("failed to render"); self.backend.flush().expect("failed to flush output buffer");