vtui_core/
input.rs

1use crate::events::{
2    KeyPress, KeyRelease, KeyRepeat, Message, MouseDown, MouseDrag, MouseHover, MouseScroll,
3    MouseUp, Resize,
4};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum ModifierKeyCode {
8    Shift,
9    Ctrl,
10    Alt,
11    Super,
12    Hyper,
13    Meta,
14    IsoLevel3Shift,
15    IsoLevel5Shift,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq)]
19pub enum ModifierKeyDirection {
20    Left,
21    Right,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub enum MouseButton {
26    Left,
27    Right,
28    Middle,
29}
30
31#[derive(Debug, Clone, Copy, PartialEq, Eq)]
32pub enum MouseScrollDirection {
33    Up,
34    Down,
35    Left,
36    Right,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq)]
40pub enum MediaKeyCode {
41    Play,
42    Pause,
43    PlayPause,
44    Reverse,
45    Stop,
46    FastForward,
47    Rewind,
48    TrackNext,
49    TrackPrevious,
50    Record,
51    LowerVolume,
52    RaiseVolume,
53    MuteVolume,
54}
55
56#[derive(Debug, Clone, Copy, PartialEq, Eq)]
57pub enum KeyCode {
58    Backspace,
59    Enter,
60    Left,
61    Right,
62    Up,
63    Down,
64    Home,
65    End,
66    PageUp,
67    PageDown,
68    Tab,
69    Delete,
70    Insert,
71    F(u8),
72    Char(char),
73    Esc,
74    CapsLock,
75    ScrollLock,
76    NumLock,
77    PrintScreen,
78    Pause,
79    Menu,
80    KeypadBegin,
81    Media(MediaKeyCode),
82    Modifier(ModifierKeyCode, ModifierKeyDirection),
83}
84
85pub enum Input {
86    MouseDown {
87        x: u16,
88        y: u16,
89        button: MouseButton,
90    },
91    MouseUp {
92        x: u16,
93        y: u16,
94        button: MouseButton,
95    },
96    MouseHover {
97        x: u16,
98        y: u16,
99    },
100    MouseDrag {
101        x: u16,
102        y: u16,
103        button: MouseButton,
104    },
105    MouseScroll {
106        x: u16,
107        y: u16,
108        direction: MouseScrollDirection,
109    },
110    KeyPress {
111        key: KeyCode,
112    },
113    KeyRepeat {
114        key: KeyCode,
115    },
116    KeyRelease {
117        key: KeyCode,
118    },
119    Resize {
120        width: u16,
121        height: u16,
122    },
123}
124
125impl Input {
126    pub fn to_message(self) -> Message {
127        match self {
128            Input::MouseDown { x, y, button } => Message::new(MouseDown { x, y, button }),
129            Input::MouseUp { x, y, button } => Message::new(MouseUp { x, y, button }),
130            Input::MouseHover { x, y } => Message::new(MouseHover { x, y }),
131            Input::MouseDrag { x, y, button } => Message::new(MouseDrag { x, y, button }),
132            Input::MouseScroll { x, y, direction } => Message::new(MouseScroll { x, y, direction }),
133            Input::KeyPress { key } => Message::new(KeyPress { key }),
134            Input::KeyRepeat { key } => Message::new(KeyRepeat { key }),
135            Input::KeyRelease { key } => Message::new(KeyRelease { key }),
136            Input::Resize { width, height } => Message::new(Resize { width, height }),
137        }
138    }
139}