tui: Redraw on resize
This commit is contained in:
parent
29507b550d
commit
376adde1f9
|
|
@ -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'),
|
||||
..
|
||||
|
|
|
|||
|
|
@ -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(())
|
||||
|
|
|
|||
Loading…
Reference in New Issue