few changes
This commit is contained in:
@@ -0,0 +1,56 @@
|
|||||||
|
use crate::Frame;
|
||||||
|
|
||||||
|
pub struct Console(Frame);
|
||||||
|
|
||||||
|
pub enum Event {
|
||||||
|
Key(crossterm::event::KeyEvent),
|
||||||
|
Resize(u16, u16),
|
||||||
|
Mouse(crossterm::event::MouseEvent),
|
||||||
|
Paste(String),
|
||||||
|
FocusGained,
|
||||||
|
FocusLost,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init() -> crate::Result<Console> {
|
||||||
|
crossterm::terminal::enable_raw_mode()?;
|
||||||
|
crate::utils::clear()?;
|
||||||
|
crate::utils::hide_cursor()?;
|
||||||
|
Ok(Console(Frame::new(crossterm::terminal::size()?)))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn end() -> crate::Result<()> {
|
||||||
|
crossterm::terminal::disable_raw_mode()?;
|
||||||
|
crate::utils::clear()?;
|
||||||
|
crate::utils::show_cursor()
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Console {
|
||||||
|
pub fn draw<F>(&self, mut f: F) -> crate::Result<()>
|
||||||
|
where
|
||||||
|
F: FnMut(&Frame) -> crate::Result<()>,
|
||||||
|
{
|
||||||
|
crate::utils::clear()?;
|
||||||
|
f(&self.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn read() -> crate::Result<Event> {
|
||||||
|
let event = crossterm::event::read()?;
|
||||||
|
|
||||||
|
Ok(match event {
|
||||||
|
crossterm::event::Event::Key(k) => Event::Key(k),
|
||||||
|
crossterm::event::Event::Resize(w, h) => Event::Resize(w, h),
|
||||||
|
crossterm::event::Event::FocusGained => Event::FocusGained,
|
||||||
|
crossterm::event::Event::FocusLost => Event::FocusLost,
|
||||||
|
crossterm::event::Event::Mouse(m) => Event::Mouse(m),
|
||||||
|
crossterm::event::Event::Paste(p) => Event::Paste(p),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn try_read() -> Option<Event> {
|
||||||
|
if crossterm::event::poll(std::time::Duration::ZERO).unwrap_or(false) {
|
||||||
|
read().ok()
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user