Mouse input
This commit is contained in:
+14
-2
@@ -80,16 +80,28 @@ impl Element for Scroll {
|
||||
if let Some(e) = event.get::<crossterm::event::Event>() {
|
||||
match e {
|
||||
Event::Key(k) => match k.code {
|
||||
crossterm::event::KeyCode::Up => {
|
||||
crossterm::event::KeyCode::PageUp => {
|
||||
self.scroll_offset = self.scroll_offset.saturating_sub(1)
|
||||
}
|
||||
crossterm::event::KeyCode::Down => {
|
||||
crossterm::event::KeyCode::PageDown => {
|
||||
if self.scroll_offset + 1 < self.render.1 {
|
||||
self.scroll_offset += 1;
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
|
||||
Event::Mouse(m) => match m.kind {
|
||||
crossterm::event::MouseEventKind::ScrollDown => {
|
||||
if self.scroll_offset + 1 < self.render.1 {
|
||||
self.scroll_offset += 1;
|
||||
}
|
||||
}
|
||||
crossterm::event::MouseEventKind::ScrollUp => {
|
||||
self.scroll_offset = self.scroll_offset.saturating_sub(1)
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
use crate::extensions::{Extension, Context};
|
||||
use std::io::stdout;
|
||||
|
||||
use crossterm::{
|
||||
event::{
|
||||
DisableMouseCapture, EnableMouseCapture, KeyboardEnhancementFlags,
|
||||
PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags,
|
||||
},
|
||||
execute,
|
||||
};
|
||||
|
||||
use crate::extensions::{Context, Extension};
|
||||
|
||||
pub struct InputExtension;
|
||||
|
||||
@@ -6,6 +16,12 @@ impl Extension for InputExtension {
|
||||
fn init(&mut self, ctx: &Context) {
|
||||
let ctx = ctx.clone();
|
||||
crossterm::terminal::enable_raw_mode().unwrap();
|
||||
execute!(
|
||||
stdout(),
|
||||
PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES)
|
||||
)
|
||||
.unwrap();
|
||||
execute!(stdout(), EnableMouseCapture).unwrap();
|
||||
std::thread::spawn(move || loop {
|
||||
if let Ok(e) = crossterm::event::read() {
|
||||
ctx.event(&e);
|
||||
@@ -14,6 +30,8 @@ impl Extension for InputExtension {
|
||||
}
|
||||
|
||||
fn on_close(&mut self) {
|
||||
execute!(stdout(), PopKeyboardEnhancementFlags).unwrap();
|
||||
execute!(stdout(), DisableMouseCapture).unwrap();
|
||||
crossterm::terminal::disable_raw_mode().unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user