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
use crate::*;
pub(crate) struct KeyboardState {
scankeys: [bool; 300],
vkeys: [bool; 300],
}
impl KeyboardState {
pub fn modifiers(&self) -> KeyboardModifiers {
KeyboardModifiers {
shift: self.vkeys[VirtualKey::LeftShift as usize]
|| self.vkeys[VirtualKey::RightShift as usize],
ctrl: self.vkeys[VirtualKey::LeftControl as usize],
alt: self.vkeys[VirtualKey::LeftAlt as usize]
|| self.vkeys[VirtualKey::RightAlt as usize],
}
}
pub fn key_down(&mut self, scancode: Scancode, vkey: Option<VirtualKey>) {
self.scankeys[scancode as usize] = true;
if let Some(vkey) = vkey {
self.vkeys[vkey as usize] = true;
}
}
pub fn key_up(&mut self, scancode: Scancode, vkey: Option<VirtualKey>) {
self.scankeys[scancode as usize] = false;
if let Some(vkey) = vkey {
self.vkeys[vkey as usize] = false;
}
}
pub fn is_key_down(&self, scancode: Scancode) -> bool {
self.scankeys[scancode as usize]
}
pub fn is_vkey_down(&self, vkey: VirtualKey) -> bool {
self.vkeys[vkey as usize]
}
}
impl Default for KeyboardState {
fn default() -> Self {
KeyboardState {
scankeys: [false; 300],
vkeys: [false; 300],
}
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct KeyboardModifiers {
pub shift: bool,
pub ctrl: bool,
pub alt: bool,
}