tui: Redraw on resize

This commit is contained in:
Erik Kundt 2023-05-16 09:44:00 +02:00 committed by Alexis Sellier
parent 29507b550d
commit 376adde1f9
No known key found for this signature in database
2 changed files with 9 additions and 2 deletions

View File

@ -18,10 +18,11 @@ use super::{HomeMessage, Message, PatchMessage};
/// Since the framework does not know the type of messages that are being
/// passed around in the app, the following handlers need to be implemented for
/// each component used.
///
/// TODO: should handle `Event::WindowResize`, which is not emitted by `termion`.
impl tuirealm::Component<Message, NoUserEvent> for Widget<GlobalListener> {
fn on(&mut self, event: Event<NoUserEvent>) -> Option<Message> {
match event {
Event::WindowResize(_, _) => Some(Message::Tick),
Event::Keyboard(KeyEvent {
code: Key::Char('q'),
..

View File

@ -4,6 +4,7 @@ use std::time::Duration;
use anyhow::Result;
use tuirealm::terminal::TerminalBridge;
use tuirealm::tui::layout::Rect;
use tuirealm::Frame;
use tuirealm::{Application, EventListenerCfg, NoUserEvent};
@ -73,18 +74,23 @@ impl Window {
Message: Eq,
{
let mut update = true;
let mut resize = false;
let mut size = Rect::default();
let mut app = Application::init(
EventListenerCfg::default().default_input_listener(Duration::from_millis(interval)),
);
tui.init(&mut app)?;
while !tui.quit() {
if update {
if update || resize {
self.terminal
.raw_mut()
.draw(|frame| tui.view(&mut app, frame))?;
}
update = tui.update(&mut app)?;
resize = size != self.terminal.raw().size()?;
size = self.terminal.raw().size()?;
}
Ok(())