This commit is contained in:
2025-06-29 11:20:36 -05:00
parent cff2e315ca
commit af719d83db
13 changed files with 90 additions and 586 deletions
-48
View File
@@ -1,48 +0,0 @@
use std::sync::Arc;
use crossterm::event::KeyEvent;
use crate::{
events::{Close, Event, EventManager},
extensions::Extension,
Screen,
};
impl Event for KeyEvent {
fn as_any(&self) -> &dyn std::any::Any {
self
}
}
pub trait KeyPressEventHandler {
fn on_keypress(&mut self, events: &Arc<EventManager>, event: &KeyEvent);
}
pub struct KeyPressExtension;
impl Extension for KeyPressExtension {
fn init(&mut self, _: &mut Screen, events: &Arc<EventManager>) {
crossterm::terminal::enable_raw_mode().unwrap();
crate::utils::clear().unwrap();
crate::utils::hide_cursor().unwrap();
events.on(|_, _: &Close| {
crossterm::terminal::disable_raw_mode().unwrap();
crate::utils::show_cursor().unwrap();
crate::utils::clear().unwrap();
});
}
fn tick_start(&mut self, _: &mut Screen, _: &Arc<EventManager>) {}
fn tick_end(&mut self, _: &mut Screen, events: &Arc<EventManager>) {
if crossterm::event::poll(std::time::Duration::from_millis(13)).unwrap() {
match crossterm::event::read().unwrap() {
crossterm::event::Event::Key(e) => {
events.dispatch(e);
}
_ => {}
}
}
}
}
-43
View File
@@ -1,43 +0,0 @@
pub mod keypress;
pub mod tick_rate;
use std::sync::Arc;
use crate::{events::EventManager, Screen};
pub trait Extension {
fn init(&mut self, screen: &mut Screen, events: &Arc<EventManager>);
fn tick_start(&mut self, screen: &mut Screen, events: &Arc<EventManager>);
fn tick_end(&mut self, screen: &mut Screen, events: &Arc<EventManager>);
}
pub struct ExtensionManager(Vec<Box<dyn Extension>>);
impl Extension for ExtensionManager {
fn init(&mut self, screen: &mut Screen, events: &Arc<EventManager>) {
for ext in &mut self.0 {
ext.init(screen, events);
}
}
fn tick_start(&mut self, screen: &mut Screen, events: &Arc<EventManager>) {
for ext in &mut self.0 {
ext.tick_start(screen, events);
}
}
fn tick_end(&mut self, screen: &mut Screen, events: &Arc<EventManager>) {
for ext in &mut self.0 {
ext.tick_end(screen, events);
}
}
}
impl ExtensionManager {
pub fn new() -> ExtensionManager {
ExtensionManager(Vec::new())
}
pub fn add<E: Extension + 'static>(&mut self, extension: E) {
self.0.push(Box::new(extension));
}
}
-15
View File
@@ -1,15 +0,0 @@
use std::sync::Arc;
use crate::{events::EventManager, extensions::Extension};
pub struct TickRate(pub u8);
impl Extension for TickRate {
fn init(&mut self, _: &mut crate::Screen, _: &Arc<EventManager>) {}
fn tick_end(&mut self, _: &mut crate::Screen, _: &Arc<EventManager>) {
std::thread::sleep(std::time::Duration::from_millis(1000 / self.0 as u64));
}
fn tick_start(&mut self, _: &mut crate::Screen, _: &Arc<EventManager>) {}
}