aboutsummaryrefslogtreecommitdiff
path: root/src/event/event.rs
diff options
context:
space:
mode:
authorkrolxon <krolyxon@tutanota.com>2024-06-15 00:06:35 +0530
committerkrolxon <krolyxon@tutanota.com>2024-06-15 00:06:35 +0530
commitf2b90514899af2e55f4fca9ad759029aa7511e0e (patch)
tree67375c06e03fcc7646fd82958c92f742efa8a674 /src/event/event.rs
parent5795d00831da803442d737a928922093e2750aec (diff)
change event to event_handler
Diffstat (limited to 'src/event/event.rs')
-rwxr-xr-xsrc/event/event.rs79
1 files changed, 0 insertions, 79 deletions
diff --git a/src/event/event.rs b/src/event/event.rs
deleted file mode 100755
index 439c31b..0000000
--- a/src/event/event.rs
+++ /dev/null
@@ -1,79 +0,0 @@
-use crate::app::AppResult;
-use crossterm::event::{self, Event as CrosstermEvent, KeyEvent, MouseEvent};
-use std::sync::mpsc;
-use std::thread;
-use std::time::{Duration, Instant};
-
-/// Terminal events.
-#[derive(Clone, Copy, Debug)]
-pub enum Event {
- /// Terminal tick.
- Tick,
- /// Key press.
- Key(KeyEvent),
- /// Mouse click/scroll.
- Mouse(MouseEvent),
- /// Terminal resize.
- Resize(u16, u16),
-}
-
-/// Terminal event handler.
-#[allow(dead_code)]
-#[derive(Debug)]
-pub struct EventHandler {
- /// Event sender channel.
- sender: mpsc::Sender<Event>,
- /// Event receiver channel.
- receiver: mpsc::Receiver<Event>,
- /// Event handler thread.
- handler: thread::JoinHandle<()>,
-}
-
-impl EventHandler {
- /// Constructs a new instance of [`EventHandler`].
- pub fn new(tick_rate: u64) -> Self {
- let tick_rate = Duration::from_millis(tick_rate);
- let (sender, receiver) = mpsc::channel();
- let handler = {
- let sender = sender.clone();
- thread::spawn(move || {
- let mut last_tick = Instant::now();
- loop {
- let timeout = tick_rate
- .checked_sub(last_tick.elapsed())
- .unwrap_or(tick_rate);
-
- if event::poll(timeout).expect("failed to poll new events") {
- match event::read().expect("unable to read event") {
- CrosstermEvent::Key(e) => sender.send(Event::Key(e)),
- CrosstermEvent::Mouse(e) => sender.send(Event::Mouse(e)),
- CrosstermEvent::Resize(w, h) => sender.send(Event::Resize(w, h)),
- CrosstermEvent::FocusGained => Ok(()),
- CrosstermEvent::FocusLost => Ok(()),
- CrosstermEvent::Paste(_) => unimplemented!(),
- }
- .expect("failed to send terminal event")
- }
-
- if last_tick.elapsed() >= tick_rate {
- sender.send(Event::Tick).expect("failed to send tick event");
- last_tick = Instant::now();
- }
- }
- })
- };
- Self {
- sender,
- receiver,
- handler,
- }
- }
-
- /// Receive the next event from the handler thread.
- ///
- /// This function will always block the current thread if
- /// there is no data available and it's possible for more data to be sent.
- pub fn next(&self) -> AppResult<Event> {
- Ok(self.receiver.recv()?)
- }
-}