mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
clear on resize, fixing garble
This commit is contained in:
parent
bb8ab496c0
commit
be7501b08c
1 changed files with 10 additions and 5 deletions
|
|
@ -4,7 +4,7 @@ pub(crate) use crossterm::{ExecutableCommand};
|
||||||
pub use crossterm::event::{Event, KeyEvent, KeyCode, KeyModifiers};
|
pub use crossterm::event::{Event, KeyEvent, KeyCode, KeyModifiers};
|
||||||
pub use ratatui::prelude::{Rect, Style, Color, Buffer};
|
pub use ratatui::prelude::{Rect, Style, Color, Buffer};
|
||||||
pub use ratatui::style::{Stylize, Modifier};
|
pub use ratatui::style::{Stylize, Modifier};
|
||||||
use ratatui::backend::{Backend, CrosstermBackend};
|
use ratatui::backend::{Backend, CrosstermBackend, ClearType};
|
||||||
use std::io::Stdout;
|
use std::io::Stdout;
|
||||||
use crossterm::terminal::{
|
use crossterm::terminal::{
|
||||||
EnterAlternateScreen, LeaveAlternateScreen,
|
EnterAlternateScreen, LeaveAlternateScreen,
|
||||||
|
|
@ -97,17 +97,20 @@ impl Tui {
|
||||||
let exited = engine.read().unwrap().exited.clone();
|
let exited = engine.read().unwrap().exited.clone();
|
||||||
let engine = engine.clone();
|
let engine = engine.clone();
|
||||||
let state = state.clone();
|
let state = state.clone();
|
||||||
let mut buffer = Buffer::empty(
|
let size = engine.read().unwrap().backend.size().expect("get size failed");
|
||||||
engine.read().unwrap().backend.size().expect("get size failed")
|
let mut buffer = Buffer::empty(size);
|
||||||
);
|
|
||||||
spawn(move || loop {
|
spawn(move || loop {
|
||||||
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");
|
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() {
|
||||||
if buffer.area != size {
|
if buffer.area != size {
|
||||||
|
engine.write().unwrap().backend.clear_region(ClearType::All)
|
||||||
|
.expect("clear failed");
|
||||||
buffer.resize(size);
|
buffer.resize(size);
|
||||||
|
buffer.reset();
|
||||||
}
|
}
|
||||||
let mut output = TuiOutput { buffer, area: size.xywh() };
|
let mut output = TuiOutput { buffer, area: size.xywh() };
|
||||||
state.render(&mut output).expect("render failed");
|
state.render(&mut output).expect("render failed");
|
||||||
|
|
@ -118,7 +121,9 @@ impl Tui {
|
||||||
}
|
}
|
||||||
fn flip (&mut self, mut buffer: Buffer, size: ratatui::prelude::Rect) -> Buffer {
|
fn flip (&mut self, mut buffer: Buffer, size: ratatui::prelude::Rect) -> Buffer {
|
||||||
if self.buffer.area != size {
|
if self.buffer.area != size {
|
||||||
|
self.backend.clear_region(ClearType::All).unwrap();
|
||||||
self.buffer.resize(size);
|
self.buffer.resize(size);
|
||||||
|
self.buffer.reset();
|
||||||
}
|
}
|
||||||
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");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue