Disabling event polling -> Blocking handling

Reduces flickering
This commit is contained in:
Jarkko Toivanen 2024-08-01 02:43:59 +03:00
parent 1528866d65
commit 4c54639518
Signed by: jt
GPG key ID: 9151B109B73ECAD5

View file

@ -1,12 +1,9 @@
use crossterm::{ use crossterm::{
event::{poll, read, Event, KeyCode}, event::{read, Event, KeyCode},
terminal, ExecutableCommand, cursor, terminal, ExecutableCommand, cursor,
}; };
use std::panic; use std::panic;
use std::{ use std::io::{stdout, Result, Write, Stdout};
io::{stdout, Result, Write, Stdout},
time::Duration,
};
#[derive(Default)] #[derive(Default)]
@ -37,6 +34,7 @@ fn main() -> Result<()> {
impl Nuudel { impl Nuudel {
pub fn run(&mut self, stdout: &mut Stdout) -> Result<()> { pub fn run(&mut self, stdout: &mut Stdout) -> Result<()> {
self.draw_terminal(stdout)?;
while !self.quitting { while !self.quitting {
self.handle_events()?; self.handle_events()?;
self.draw_terminal(stdout)?; self.draw_terminal(stdout)?;
@ -61,39 +59,37 @@ impl Nuudel {
} }
fn handle_events(&mut self) -> Result<()> { fn handle_events(&mut self) -> Result<()> {
if poll(Duration::from_secs(0))? { match read()? {
match read()? { Event::Key(event) => match event.code {
Event::Key(event) => match event.code { KeyCode::Char('q') => {
KeyCode::Char('q') => { self.quit();
self.quit(); },
}, KeyCode::Char('a') => {
KeyCode::Char('a') => { print!("");
print!(""); },
}, KeyCode::Left => {
KeyCode::Left => { if self.cursorx > 0 {
if self.cursorx > 0 { self.cursorx -= 1;
self.cursorx -= 1;
self.cursorx = self.cursorx.clamp(0, terminal::size()?.0-1);
}
},
KeyCode::Right => {
self.cursorx += 1;
self.cursorx = self.cursorx.clamp(0, terminal::size()?.0-1); self.cursorx = self.cursorx.clamp(0, terminal::size()?.0-1);
}, }
KeyCode::Up => { },
if self.cursory > 0 { KeyCode::Right => {
self.cursory -= 1; self.cursorx += 1;
} self.cursorx = self.cursorx.clamp(0, terminal::size()?.0-1);
self.cursory = self.cursory.clamp(0, terminal::size()?.1-1); },
}, KeyCode::Up => {
KeyCode::Down => { if self.cursory > 0 {
self.cursory += 1; self.cursory -= 1;
self.cursory = self.cursory.clamp(0, terminal::size()?.1-1); }
}, self.cursory = self.cursory.clamp(0, terminal::size()?.1-1);
_ => {} },
KeyCode::Down => {
self.cursory += 1;
self.cursory = self.cursory.clamp(0, terminal::size()?.1-1);
}, },
_ => {} _ => {}
} },
_ => {}
} }
Ok(()) Ok(())
} }
@ -131,8 +127,6 @@ impl Nuudel {
stdout.execute(cursor::MoveTo(self.cursorx, self.cursory))?; stdout.execute(cursor::MoveTo(self.cursorx, self.cursory))?;
stdout.execute(cursor::Show)?; stdout.execute(cursor::Show)?;
std::thread::sleep(Duration::from_millis(16));
Ok(()) Ok(())
} }
} }