Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
tui: Redraw on resize
Erik Kundt committed 2 years ago
commit 376adde1f9566f1d081010a977dfc4ce1ff20e78
parent 29507b550d6dcea5082baf1f5049ef93b8cc34a8
2 files changed +9 -2
modified 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<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'),
                ..
modified 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(())