Feat: early mouse support

This commit is contained in:
2026-02-14 16:26:29 +01:00
parent b2871ac251
commit 10ca567ac5
23 changed files with 1256 additions and 285 deletions

View File

@@ -1,14 +1,16 @@
mod engine_page;
pub(crate) mod engine_page;
mod help_page;
mod main_page;
mod modal;
mod options_page;
mod mouse;
pub(crate) mod options_page;
mod panel;
mod patterns_page;
use arc_swap::ArcSwap;
use crossbeam_channel::Sender;
use crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyModifiers};
use crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyModifiers, MouseEvent};
use ratatui::layout::Rect;
use std::sync::atomic::{AtomicBool, AtomicI64};
use std::sync::Arc;
use std::time::{Duration, Instant};
@@ -17,7 +19,7 @@ use crate::app::App;
use crate::commands::AppCommand;
use crate::engine::{AudioCommand, LinkState, SeqCommand, SequencerSnapshot};
use crate::page::Page;
use crate::state::{Modal, PanelFocus};
use crate::state::{MinimapMode, Modal, PanelFocus};
pub enum InputResult {
Continue,
@@ -40,6 +42,10 @@ impl<'a> InputContext<'a> {
}
}
pub fn handle_mouse(ctx: &mut InputContext, mouse: MouseEvent, term: Rect) {
mouse::handle_mouse(ctx, mouse, term);
}
pub fn handle_key(ctx: &mut InputContext, key: KeyEvent) -> InputResult {
if handle_live_keys(ctx, &key) {
return InputResult::Continue;
@@ -54,7 +60,7 @@ pub fn handle_key(ctx: &mut InputContext, key: KeyEvent) -> InputResult {
key.code,
KeyCode::Left | KeyCode::Right | KeyCode::Up | KeyCode::Down
);
if ctx.app.ui.minimap_until.is_some() && !(ctrl && is_arrow) {
if !(matches!(ctx.app.ui.minimap, MinimapMode::Hidden) || ctrl && is_arrow) {
ctx.dispatch(AppCommand::ClearMinimap);
}
@@ -91,25 +97,25 @@ fn handle_normal_input(ctx: &mut InputContext, key: KeyEvent) -> InputResult {
}
if ctrl {
let minimap_timeout = Some(Instant::now() + Duration::from_millis(250));
let minimap_timed = MinimapMode::Timed(Instant::now() + Duration::from_millis(250));
match key.code {
KeyCode::Left => {
ctx.app.ui.minimap_until = minimap_timeout;
ctx.app.ui.minimap = minimap_timed;
ctx.dispatch(AppCommand::PageLeft);
return InputResult::Continue;
}
KeyCode::Right => {
ctx.app.ui.minimap_until = minimap_timeout;
ctx.app.ui.minimap = minimap_timed;
ctx.dispatch(AppCommand::PageRight);
return InputResult::Continue;
}
KeyCode::Up => {
ctx.app.ui.minimap_until = minimap_timeout;
ctx.app.ui.minimap = minimap_timed;
ctx.dispatch(AppCommand::PageUp);
return InputResult::Continue;
}
KeyCode::Down => {
ctx.app.ui.minimap_until = minimap_timeout;
ctx.app.ui.minimap = minimap_timed;
ctx.dispatch(AppCommand::PageDown);
return InputResult::Continue;
}
@@ -126,7 +132,7 @@ fn handle_normal_input(ctx: &mut InputContext, key: KeyEvent) -> InputResult {
KeyCode::F(6) => Some(Page::Engine),
_ => None,
} {
ctx.app.ui.minimap_until = Some(Instant::now() + Duration::from_millis(250));
ctx.app.ui.minimap = MinimapMode::Timed(Instant::now() + Duration::from_millis(250));
ctx.dispatch(AppCommand::GoToPage(page));
return InputResult::Continue;
}