diff --git a/src/app/app.rs b/src/app/app.rs index 2824de1..a4928b3 100644 --- a/src/app/app.rs +++ b/src/app/app.rs @@ -12,11 +12,13 @@ use ratatui::{ }; use std::{ io::Result, - sync::mpsc::{self, Receiver}, + sync::mpsc::{self, Receiver, RecvTimeoutError}, + time::Duration, }; pub enum Event { Input(KeyEvent), + Resize(u16, u16), } pub struct App { @@ -80,12 +82,16 @@ impl App { while !self.exit { terminal.draw(|frame: &mut Frame<'_>| self.draw(frame))?; - let event: Event = match rx.recv() { + let event = match rx.recv_timeout(Duration::from_millis(100)) { Ok(ev) => ev, + Err(RecvTimeoutError::Timeout) => { + continue; + } Err(_) => break, }; match event { Event::Input(key_event) => self.handle_key_event(key_event)?, + Event::Resize(_, _) => {} } } @@ -117,13 +123,19 @@ impl App { pub fn handle_input_events(tx: mpsc::Sender) { loop { match event::read() { - Ok(ev) => { - if let event::Event::Key(key_event) = ev { + Ok(ev) => match ev { + event::Event::Key(key_event) => { if tx.send(Event::Input(key_event)).is_err() { break; } } - } + event::Event::Resize(cols, rows) => { + if tx.send(Event::Resize(cols, rows)).is_err() { + break; + } + } + _ => {} + }, Err(_) => { continue; } diff --git a/src/app/widgets/keybindings.rs b/src/app/widgets/keybindings.rs index 71bdd8d..fc196cd 100644 --- a/src/app/widgets/keybindings.rs +++ b/src/app/widgets/keybindings.rs @@ -30,7 +30,7 @@ impl Widget for KeybindingsWidget { block.render(area, buf); - let base: u16 = if count == 0 { 0 } else { 10 }; + let base: u16 = if count == 0 { 0 } else { 100u16 / count }; let constraints: Vec = vec![Constraint::Percentage(base); count as usize]; diff --git a/src/app/widgets/main_menu.rs b/src/app/widgets/main_menu.rs index 8be5c26..ac239a4 100644 --- a/src/app/widgets/main_menu.rs +++ b/src/app/widgets/main_menu.rs @@ -27,8 +27,7 @@ fn view_options() -> Vec<(usize, String)> { } pub fn main_menu_widget(app: &App, area: Rect, buf: &mut Buffer) { - let vertical_layout: Layout = - Layout::vertical([Constraint::Percentage(92), Constraint::Percentage(8)]); + let vertical_layout: Layout = Layout::vertical([Constraint::Fill(1), Constraint::Length(4)]); let [main_menu_area, keybindings_area] = vertical_layout.areas(area);