From 376adde1f9566f1d081010a977dfc4ce1ff20e78 Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Tue, 16 May 2023 09:44:00 +0200 Subject: [PATCH] tui: Redraw on resize --- radicle-tui/src/app/event.rs | 3 ++- radicle-tui/src/lib.rs | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/radicle-tui/src/app/event.rs b/radicle-tui/src/app/event.rs index f003f05f..5bcd188f 100644 --- a/radicle-tui/src/app/event.rs +++ b/radicle-tui/src/app/event.rs @@ -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 for Widget { fn on(&mut self, event: Event) -> Option { match event { - Event::WindowResize(_, _) => Some(Message::Tick), Event::Keyboard(KeyEvent { code: Key::Char('q'), .. diff --git a/radicle-tui/src/lib.rs b/radicle-tui/src/lib.rs index 4ffced5f..adf335d0 100644 --- a/radicle-tui/src/lib.rs +++ b/radicle-tui/src/lib.rs @@ -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(())