1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use crossterm::{
self,
event::{
KeyCode, KeyModifiers,
},
};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Event {
Key(crossterm::event::KeyEvent),
Click(u16, u16),
RightClick(u16, u16),
DoubleClick(u16, u16),
Resize(u16, u16),
Wheel(i32),
}
impl Event {
pub fn from_crossterm_event(
crossterm_event: crossterm::Result<crossterm::event::Event>
) -> Option<Event> {
match crossterm_event {
Ok(crossterm::event::Event::Key(mut key)) => {
if key.code==KeyCode::Char('\r') || key.code==KeyCode::Char('\n') {
key.code = KeyCode::Enter;
}
Some(Event::Key(key))
}
Ok(crossterm::event::Event::Mouse(crossterm::event::MouseEvent::Up(button, x, y, ..))) => {
match button {
crossterm::event::MouseButton::Left => Some(Event::Click(x, y)),
crossterm::event::MouseButton::Right => Some(Event::RightClick(x, y)),
_ => None
}
}
Ok(crossterm::event::Event::Resize(w, h)) => {
Some(Event::Resize(w, h))
}
Ok(crossterm::event::Event::Mouse(crossterm::event::MouseEvent::ScrollUp(..))) => {
Some(Event::Wheel(-1))
}
Ok(crossterm::event::Event::Mouse(crossterm::event::MouseEvent::ScrollDown(..))) => {
Some(Event::Wheel(1))
}
_ => None,
}
}
pub const fn crtl_key(code: KeyCode) -> Self {
Event::Key(
crossterm::event::KeyEvent {
code,
modifiers: KeyModifiers::CONTROL,
}
)
}
pub const fn simple_key(code: KeyCode) -> Self {
Event::Key(
crossterm::event::KeyEvent {
code,
modifiers: KeyModifiers::empty(),
}
)
}
}