Mouse input

This commit is contained in:
2025-11-01 15:30:03 +01:00
parent 72e8df007e
commit 23edb6c917
2 changed files with 33 additions and 3 deletions
+14 -2
View File
@@ -80,16 +80,28 @@ impl Element for Scroll {
if let Some(e) = event.get::<crossterm::event::Event>() { if let Some(e) = event.get::<crossterm::event::Event>() {
match e { match e {
Event::Key(k) => match k.code { Event::Key(k) => match k.code {
crossterm::event::KeyCode::Up => { crossterm::event::KeyCode::PageUp => {
self.scroll_offset = self.scroll_offset.saturating_sub(1) 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 { if self.scroll_offset + 1 < self.render.1 {
self.scroll_offset += 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)
}
_ => {}
},
_ => {} _ => {}
} }
} }
+19 -1
View File
@@ -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; pub struct InputExtension;
@@ -6,6 +16,12 @@ impl Extension for InputExtension {
fn init(&mut self, ctx: &Context) { fn init(&mut self, ctx: &Context) {
let ctx = ctx.clone(); let ctx = ctx.clone();
crossterm::terminal::enable_raw_mode().unwrap(); crossterm::terminal::enable_raw_mode().unwrap();
execute!(
stdout(),
PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES)
)
.unwrap();
execute!(stdout(), EnableMouseCapture).unwrap();
std::thread::spawn(move || loop { std::thread::spawn(move || loop {
if let Ok(e) = crossterm::event::read() { if let Ok(e) = crossterm::event::read() {
ctx.event(&e); ctx.event(&e);
@@ -14,6 +30,8 @@ impl Extension for InputExtension {
} }
fn on_close(&mut self) { fn on_close(&mut self) {
execute!(stdout(), PopKeyboardEnhancementFlags).unwrap();
execute!(stdout(), DisableMouseCapture).unwrap();
crossterm::terminal::disable_raw_mode().unwrap(); crossterm::terminal::disable_raw_mode().unwrap();
} }
} }