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 /// 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 /// passed around in the app, the following handlers need to be implemented for
/// each component used. /// each component used.
///
/// TODO: should handle `Event::WindowResize`, which is not emitted by `termion`.
impl tuirealm::Component<Message, NoUserEvent> for Widget<GlobalListener> { impl tuirealm::Component<Message, NoUserEvent> for Widget<GlobalListener> {
fn on(&mut self, event: Event<NoUserEvent>) -> Option<Message> { fn on(&mut self, event: Event<NoUserEvent>) -> Option<Message> {
match event { match event {
Event::WindowResize(_, _) => Some(Message::Tick),
Event::Keyboard(KeyEvent { Event::Keyboard(KeyEvent {
code: Key::Char('q'), code: Key::Char('q'),
.. ..

View File

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