|
@@ -0,0 +1,651 @@
|
|
|
|
+use crate::geometry::{
|
|
|
|
+ ClientPoint, Coordinates, ElementPoint, LinesVector, PagePoint, PagesVector, PixelsVector,
|
|
|
|
+ ScreenPoint, WheelDelta,
|
|
|
|
+};
|
|
|
|
+use crate::input_data::{
|
|
|
|
+ decode_key_location, decode_mouse_button_set, encode_key_location, encode_mouse_button_set,
|
|
|
|
+ MouseButton, MouseButtonSet,
|
|
|
|
+};
|
|
|
|
+use dioxus_core::{NodeFactory, UiEvent};
|
|
|
|
+use euclid::UnknownUnit;
|
|
|
|
+use keyboard_types::{Code, Key, Location, Modifiers};
|
|
|
|
+use std::collections::HashMap;
|
|
|
|
+use std::convert::TryInto;
|
|
|
|
+use std::fmt::{Debug, Formatter};
|
|
|
|
+use std::str::FromStr;
|
|
|
|
+
|
|
|
|
+pub type KeyboardEvent = UiEvent<KeyboardData>;
|
|
|
|
+#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
|
|
|
|
+#[derive(Clone)]
|
|
|
|
+pub struct KeyboardData {
|
|
|
|
+ #[deprecated(
|
|
|
|
+ since = "0.3.0",
|
|
|
|
+ note = "This may not work in all environments. Use key() instead."
|
|
|
|
+ )]
|
|
|
|
+ pub char_code: u32,
|
|
|
|
+
|
|
|
|
+ /// Identify which "key" was entered.
|
|
|
|
+ #[deprecated(since = "0.3.0", note = "use key() instead")]
|
|
|
|
+ pub key: String,
|
|
|
|
+
|
|
|
|
+ /// Get the key code as an enum Variant.
|
|
|
|
+ #[deprecated(
|
|
|
|
+ since = "0.3.0",
|
|
|
|
+ note = "This may not work in all environments. Use code() instead."
|
|
|
|
+ )]
|
|
|
|
+ pub key_code: KeyCode,
|
|
|
|
+
|
|
|
|
+ /// the physical key on the keyboard
|
|
|
|
+ code: Code,
|
|
|
|
+
|
|
|
|
+ /// Indicate if the `alt` modifier key was pressed during this keyboard event
|
|
|
|
+ #[deprecated(since = "0.3.0", note = "use modifiers() instead")]
|
|
|
|
+ pub alt_key: bool,
|
|
|
|
+
|
|
|
|
+ /// Indicate if the `ctrl` modifier key was pressed during this keyboard event
|
|
|
|
+ #[deprecated(since = "0.3.0", note = "use modifiers() instead")]
|
|
|
|
+ pub ctrl_key: bool,
|
|
|
|
+
|
|
|
|
+ /// Indicate if the `meta` modifier key was pressed during this keyboard event
|
|
|
|
+ #[deprecated(since = "0.3.0", note = "use modifiers() instead")]
|
|
|
|
+ pub meta_key: bool,
|
|
|
|
+
|
|
|
|
+ /// Indicate if the `shift` modifier key was pressed during this keyboard event
|
|
|
|
+ #[deprecated(since = "0.3.0", note = "use modifiers() instead")]
|
|
|
|
+ pub shift_key: bool,
|
|
|
|
+
|
|
|
|
+ #[deprecated(since = "0.3.0", note = "use location() instead")]
|
|
|
|
+ pub location: usize,
|
|
|
|
+
|
|
|
|
+ #[deprecated(since = "0.3.0", note = "use is_auto_repeating() instead")]
|
|
|
|
+ pub repeat: bool,
|
|
|
|
+
|
|
|
|
+ #[deprecated(since = "0.3.0", note = "use code() or key() instead")]
|
|
|
|
+ pub which: usize,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+impl_event! {
|
|
|
|
+ KeyboardData;
|
|
|
|
+
|
|
|
|
+ /// onkeydown
|
|
|
|
+ onkeydown
|
|
|
|
+
|
|
|
|
+ /// onkeypress
|
|
|
|
+ onkeypress
|
|
|
|
+
|
|
|
|
+ /// onkeyup
|
|
|
|
+ onkeyup
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+impl KeyboardData {
|
|
|
|
+ pub fn new(
|
|
|
|
+ key: Key,
|
|
|
|
+ code: Code,
|
|
|
|
+ location: Location,
|
|
|
|
+ is_auto_repeating: bool,
|
|
|
|
+ modifiers: Modifiers,
|
|
|
|
+ ) -> Self {
|
|
|
|
+ #[allow(deprecated)]
|
|
|
|
+ KeyboardData {
|
|
|
|
+ char_code: key.legacy_charcode(),
|
|
|
|
+ key: key.to_string(),
|
|
|
|
+ key_code: KeyCode::from_raw_code(
|
|
|
|
+ key.legacy_keycode()
|
|
|
|
+ .try_into()
|
|
|
|
+ .expect("could not convert keycode to u8"),
|
|
|
|
+ ),
|
|
|
|
+ code,
|
|
|
|
+ alt_key: modifiers.contains(Modifiers::ALT),
|
|
|
|
+ ctrl_key: modifiers.contains(Modifiers::CONTROL),
|
|
|
|
+ meta_key: modifiers.contains(Modifiers::META),
|
|
|
|
+ shift_key: modifiers.contains(Modifiers::SHIFT),
|
|
|
|
+ location: encode_key_location(location),
|
|
|
|
+ repeat: is_auto_repeating,
|
|
|
|
+ which: key
|
|
|
|
+ .legacy_charcode()
|
|
|
|
+ .try_into()
|
|
|
|
+ .expect("could not convert charcode to usize"),
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// The value of the key pressed by the user, taking into consideration the state of modifier keys such as Shift as well as the keyboard locale and layout.
|
|
|
|
+ pub fn key(&self) -> Key {
|
|
|
|
+ #[allow(deprecated)]
|
|
|
|
+ FromStr::from_str(&self.key).expect("could not parse")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// A physical key on the keyboard (as opposed to the character generated by pressing the key). In other words, this property returns a value that isn't altered by keyboard layout or the state of the modifier keys.
|
|
|
|
+ pub fn code(&self) -> Code {
|
|
|
|
+ self.code
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// The set of modifier keys which were pressed when the event occurred
|
|
|
|
+ pub fn modifiers(&self) -> Modifiers {
|
|
|
|
+ let mut modifiers = Modifiers::empty();
|
|
|
|
+
|
|
|
|
+ #[allow(deprecated)]
|
|
|
|
+ {
|
|
|
|
+ if self.alt_key {
|
|
|
|
+ modifiers.insert(Modifiers::ALT);
|
|
|
|
+ }
|
|
|
|
+ if self.ctrl_key {
|
|
|
|
+ modifiers.insert(Modifiers::CONTROL);
|
|
|
|
+ }
|
|
|
|
+ if self.meta_key {
|
|
|
|
+ modifiers.insert(Modifiers::META);
|
|
|
|
+ }
|
|
|
|
+ if self.shift_key {
|
|
|
|
+ modifiers.insert(Modifiers::SHIFT);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ modifiers
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// The location of the key on the keyboard or other input device.
|
|
|
|
+ pub fn location(&self) -> Location {
|
|
|
|
+ #[allow(deprecated)]
|
|
|
|
+ decode_key_location(self.location)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// `true` iff the key is being held down such that it is automatically repeating.
|
|
|
|
+ pub fn is_auto_repeating(&self) -> bool {
|
|
|
|
+ #[allow(deprecated)]
|
|
|
|
+ self.repeat
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+impl Debug for KeyboardData {
|
|
|
|
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
|
|
+ f.debug_struct("KeyboardData")
|
|
|
|
+ .field("key", &self.key())
|
|
|
|
+ .field("code", &self.code())
|
|
|
|
+ .field("modifiers", &self.modifiers())
|
|
|
|
+ .field("location", &self.location())
|
|
|
|
+ .field("is_auto_repeating", &self.is_auto_repeating())
|
|
|
|
+ .finish()
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#[cfg_attr(
|
|
|
|
+ feature = "serialize",
|
|
|
|
+ derive(serde_repr::Serialize_repr, serde_repr::Deserialize_repr)
|
|
|
|
+)]
|
|
|
|
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
|
|
|
+#[repr(u8)]
|
|
|
|
+pub enum KeyCode {
|
|
|
|
+ // That key has no keycode, = 0
|
|
|
|
+ // break, = 3
|
|
|
|
+ // backspace / delete, = 8
|
|
|
|
+ // tab, = 9
|
|
|
|
+ // clear, = 12
|
|
|
|
+ // enter, = 13
|
|
|
|
+ // shift, = 16
|
|
|
|
+ // ctrl, = 17
|
|
|
|
+ // alt, = 18
|
|
|
|
+ // pause/break, = 19
|
|
|
|
+ // caps lock, = 20
|
|
|
|
+ // hangul, = 21
|
|
|
|
+ // hanja, = 25
|
|
|
|
+ // escape, = 27
|
|
|
|
+ // conversion, = 28
|
|
|
|
+ // non-conversion, = 29
|
|
|
|
+ // spacebar, = 32
|
|
|
|
+ // page up, = 33
|
|
|
|
+ // page down, = 34
|
|
|
|
+ // end, = 35
|
|
|
|
+ // home, = 36
|
|
|
|
+ // left arrow, = 37
|
|
|
|
+ // up arrow, = 38
|
|
|
|
+ // right arrow, = 39
|
|
|
|
+ // down arrow, = 40
|
|
|
|
+ // select, = 41
|
|
|
|
+ // print, = 42
|
|
|
|
+ // execute, = 43
|
|
|
|
+ // Print Screen, = 44
|
|
|
|
+ // insert, = 45
|
|
|
|
+ // delete, = 46
|
|
|
|
+ // help, = 47
|
|
|
|
+ // 0, = 48
|
|
|
|
+ // 1, = 49
|
|
|
|
+ // 2, = 50
|
|
|
|
+ // 3, = 51
|
|
|
|
+ // 4, = 52
|
|
|
|
+ // 5, = 53
|
|
|
|
+ // 6, = 54
|
|
|
|
+ // 7, = 55
|
|
|
|
+ // 8, = 56
|
|
|
|
+ // 9, = 57
|
|
|
|
+ // :, = 58
|
|
|
|
+ // semicolon (firefox), equals, = 59
|
|
|
|
+ // <, = 60
|
|
|
|
+ // equals (firefox), = 61
|
|
|
|
+ // ß, = 63
|
|
|
|
+ // @ (firefox), = 64
|
|
|
|
+ // a, = 65
|
|
|
|
+ // b, = 66
|
|
|
|
+ // c, = 67
|
|
|
|
+ // d, = 68
|
|
|
|
+ // e, = 69
|
|
|
|
+ // f, = 70
|
|
|
|
+ // g, = 71
|
|
|
|
+ // h, = 72
|
|
|
|
+ // i, = 73
|
|
|
|
+ // j, = 74
|
|
|
|
+ // k, = 75
|
|
|
|
+ // l, = 76
|
|
|
|
+ // m, = 77
|
|
|
|
+ // n, = 78
|
|
|
|
+ // o, = 79
|
|
|
|
+ // p, = 80
|
|
|
|
+ // q, = 81
|
|
|
|
+ // r, = 82
|
|
|
|
+ // s, = 83
|
|
|
|
+ // t, = 84
|
|
|
|
+ // u, = 85
|
|
|
|
+ // v, = 86
|
|
|
|
+ // w, = 87
|
|
|
|
+ // x, = 88
|
|
|
|
+ // y, = 89
|
|
|
|
+ // z, = 90
|
|
|
|
+ // Windows Key / Left ⌘ / Chromebook Search key, = 91
|
|
|
|
+ // right window key, = 92
|
|
|
|
+ // Windows Menu / Right ⌘, = 93
|
|
|
|
+ // sleep, = 95
|
|
|
|
+ // numpad 0, = 96
|
|
|
|
+ // numpad 1, = 97
|
|
|
|
+ // numpad 2, = 98
|
|
|
|
+ // numpad 3, = 99
|
|
|
|
+ // numpad 4, = 100
|
|
|
|
+ // numpad 5, = 101
|
|
|
|
+ // numpad 6, = 102
|
|
|
|
+ // numpad 7, = 103
|
|
|
|
+ // numpad 8, = 104
|
|
|
|
+ // numpad 9, = 105
|
|
|
|
+ // multiply, = 106
|
|
|
|
+ // add, = 107
|
|
|
|
+ // numpad period (firefox), = 108
|
|
|
|
+ // subtract, = 109
|
|
|
|
+ // decimal point, = 110
|
|
|
|
+ // divide, = 111
|
|
|
|
+ // f1, = 112
|
|
|
|
+ // f2, = 113
|
|
|
|
+ // f3, = 114
|
|
|
|
+ // f4, = 115
|
|
|
|
+ // f5, = 116
|
|
|
|
+ // f6, = 117
|
|
|
|
+ // f7, = 118
|
|
|
|
+ // f8, = 119
|
|
|
|
+ // f9, = 120
|
|
|
|
+ // f10, = 121
|
|
|
|
+ // f11, = 122
|
|
|
|
+ // f12, = 123
|
|
|
|
+ // f13, = 124
|
|
|
|
+ // f14, = 125
|
|
|
|
+ // f15, = 126
|
|
|
|
+ // f16, = 127
|
|
|
|
+ // f17, = 128
|
|
|
|
+ // f18, = 129
|
|
|
|
+ // f19, = 130
|
|
|
|
+ // f20, = 131
|
|
|
|
+ // f21, = 132
|
|
|
|
+ // f22, = 133
|
|
|
|
+ // f23, = 134
|
|
|
|
+ // f24, = 135
|
|
|
|
+ // f25, = 136
|
|
|
|
+ // f26, = 137
|
|
|
|
+ // f27, = 138
|
|
|
|
+ // f28, = 139
|
|
|
|
+ // f29, = 140
|
|
|
|
+ // f30, = 141
|
|
|
|
+ // f31, = 142
|
|
|
|
+ // f32, = 143
|
|
|
|
+ // num lock, = 144
|
|
|
|
+ // scroll lock, = 145
|
|
|
|
+ // airplane mode, = 151
|
|
|
|
+ // ^, = 160
|
|
|
|
+ // !, = 161
|
|
|
|
+ // ؛ (arabic semicolon), = 162
|
|
|
|
+ // #, = 163
|
|
|
|
+ // $, = 164
|
|
|
|
+ // ù, = 165
|
|
|
|
+ // page backward, = 166
|
|
|
|
+ // page forward, = 167
|
|
|
|
+ // refresh, = 168
|
|
|
|
+ // closing paren (AZERTY), = 169
|
|
|
|
+ // *, = 170
|
|
|
|
+ // ~ + * key, = 171
|
|
|
|
+ // home key, = 172
|
|
|
|
+ // minus (firefox), mute/unmute, = 173
|
|
|
|
+ // decrease volume level, = 174
|
|
|
|
+ // increase volume level, = 175
|
|
|
|
+ // next, = 176
|
|
|
|
+ // previous, = 177
|
|
|
|
+ // stop, = 178
|
|
|
|
+ // play/pause, = 179
|
|
|
|
+ // e-mail, = 180
|
|
|
|
+ // mute/unmute (firefox), = 181
|
|
|
|
+ // decrease volume level (firefox), = 182
|
|
|
|
+ // increase volume level (firefox), = 183
|
|
|
|
+ // semi-colon / ñ, = 186
|
|
|
|
+ // equal sign, = 187
|
|
|
|
+ // comma, = 188
|
|
|
|
+ // dash, = 189
|
|
|
|
+ // period, = 190
|
|
|
|
+ // forward slash / ç, = 191
|
|
|
|
+ // grave accent / ñ / æ / ö, = 192
|
|
|
|
+ // ?, / or °, = 193
|
|
|
|
+ // numpad period (chrome), = 194
|
|
|
|
+ // open bracket, = 219
|
|
|
|
+ // back slash, = 220
|
|
|
|
+ // close bracket / å, = 221
|
|
|
|
+ // single quote / ø / ä, = 222
|
|
|
|
+ // `, = 223
|
|
|
|
+ // left or right ⌘ key (firefox), = 224
|
|
|
|
+ // altgr, = 225
|
|
|
|
+ // < /git >, left back slash, = 226
|
|
|
|
+ // GNOME Compose Key, = 230
|
|
|
|
+ // ç, = 231
|
|
|
|
+ // XF86Forward, = 233
|
|
|
|
+ // XF86Back, = 234
|
|
|
|
+ // non-conversion, = 235
|
|
|
|
+ // alphanumeric, = 240
|
|
|
|
+ // hiragana/katakana, = 242
|
|
|
|
+ // half-width/full-width, = 243
|
|
|
|
+ // kanji, = 244
|
|
|
|
+ // unlock trackpad (Chrome/Edge), = 251
|
|
|
|
+ // toggle touchpad, = 255
|
|
|
|
+ NA = 0,
|
|
|
|
+ Break = 3,
|
|
|
|
+ Backspace = 8,
|
|
|
|
+ Tab = 9,
|
|
|
|
+ Clear = 12,
|
|
|
|
+ Enter = 13,
|
|
|
|
+ Shift = 16,
|
|
|
|
+ Ctrl = 17,
|
|
|
|
+ Alt = 18,
|
|
|
|
+ Pause = 19,
|
|
|
|
+ CapsLock = 20,
|
|
|
|
+ // hangul, = 21
|
|
|
|
+ // hanja, = 25
|
|
|
|
+ Escape = 27,
|
|
|
|
+ // conversion, = 28
|
|
|
|
+ // non-conversion, = 29
|
|
|
|
+ Space = 32,
|
|
|
|
+ PageUp = 33,
|
|
|
|
+ PageDown = 34,
|
|
|
|
+ End = 35,
|
|
|
|
+ Home = 36,
|
|
|
|
+ LeftArrow = 37,
|
|
|
|
+ UpArrow = 38,
|
|
|
|
+ RightArrow = 39,
|
|
|
|
+ DownArrow = 40,
|
|
|
|
+ // select, = 41
|
|
|
|
+ // print, = 42
|
|
|
|
+ // execute, = 43
|
|
|
|
+ // Print Screen, = 44
|
|
|
|
+ Insert = 45,
|
|
|
|
+ Delete = 46,
|
|
|
|
+ // help, = 47
|
|
|
|
+ Num0 = 48,
|
|
|
|
+ Num1 = 49,
|
|
|
|
+ Num2 = 50,
|
|
|
|
+ Num3 = 51,
|
|
|
|
+ Num4 = 52,
|
|
|
|
+ Num5 = 53,
|
|
|
|
+ Num6 = 54,
|
|
|
|
+ Num7 = 55,
|
|
|
|
+ Num8 = 56,
|
|
|
|
+ Num9 = 57,
|
|
|
|
+ // :, = 58
|
|
|
|
+ // semicolon (firefox), equals, = 59
|
|
|
|
+ // <, = 60
|
|
|
|
+ // equals (firefox), = 61
|
|
|
|
+ // ß, = 63
|
|
|
|
+ // @ (firefox), = 64
|
|
|
|
+ A = 65,
|
|
|
|
+ B = 66,
|
|
|
|
+ C = 67,
|
|
|
|
+ D = 68,
|
|
|
|
+ E = 69,
|
|
|
|
+ F = 70,
|
|
|
|
+ G = 71,
|
|
|
|
+ H = 72,
|
|
|
|
+ I = 73,
|
|
|
|
+ J = 74,
|
|
|
|
+ K = 75,
|
|
|
|
+ L = 76,
|
|
|
|
+ M = 77,
|
|
|
|
+ N = 78,
|
|
|
|
+ O = 79,
|
|
|
|
+ P = 80,
|
|
|
|
+ Q = 81,
|
|
|
|
+ R = 82,
|
|
|
|
+ S = 83,
|
|
|
|
+ T = 84,
|
|
|
|
+ U = 85,
|
|
|
|
+ V = 86,
|
|
|
|
+ W = 87,
|
|
|
|
+ X = 88,
|
|
|
|
+ Y = 89,
|
|
|
|
+ Z = 90,
|
|
|
|
+ LeftWindow = 91,
|
|
|
|
+ RightWindow = 92,
|
|
|
|
+ SelectKey = 93,
|
|
|
|
+ Numpad0 = 96,
|
|
|
|
+ Numpad1 = 97,
|
|
|
|
+ Numpad2 = 98,
|
|
|
|
+ Numpad3 = 99,
|
|
|
|
+ Numpad4 = 100,
|
|
|
|
+ Numpad5 = 101,
|
|
|
|
+ Numpad6 = 102,
|
|
|
|
+ Numpad7 = 103,
|
|
|
|
+ Numpad8 = 104,
|
|
|
|
+ Numpad9 = 105,
|
|
|
|
+ Multiply = 106,
|
|
|
|
+ Add = 107,
|
|
|
|
+ Subtract = 109,
|
|
|
|
+ DecimalPoint = 110,
|
|
|
|
+ Divide = 111,
|
|
|
|
+ F1 = 112,
|
|
|
|
+ F2 = 113,
|
|
|
|
+ F3 = 114,
|
|
|
|
+ F4 = 115,
|
|
|
|
+ F5 = 116,
|
|
|
|
+ F6 = 117,
|
|
|
|
+ F7 = 118,
|
|
|
|
+ F8 = 119,
|
|
|
|
+ F9 = 120,
|
|
|
|
+ F10 = 121,
|
|
|
|
+ F11 = 122,
|
|
|
|
+ F12 = 123,
|
|
|
|
+ // f13, = 124
|
|
|
|
+ // f14, = 125
|
|
|
|
+ // f15, = 126
|
|
|
|
+ // f16, = 127
|
|
|
|
+ // f17, = 128
|
|
|
|
+ // f18, = 129
|
|
|
|
+ // f19, = 130
|
|
|
|
+ // f20, = 131
|
|
|
|
+ // f21, = 132
|
|
|
|
+ // f22, = 133
|
|
|
|
+ // f23, = 134
|
|
|
|
+ // f24, = 135
|
|
|
|
+ // f25, = 136
|
|
|
|
+ // f26, = 137
|
|
|
|
+ // f27, = 138
|
|
|
|
+ // f28, = 139
|
|
|
|
+ // f29, = 140
|
|
|
|
+ // f30, = 141
|
|
|
|
+ // f31, = 142
|
|
|
|
+ // f32, = 143
|
|
|
|
+ NumLock = 144,
|
|
|
|
+ ScrollLock = 145,
|
|
|
|
+ // airplane mode, = 151
|
|
|
|
+ // ^, = 160
|
|
|
|
+ // !, = 161
|
|
|
|
+ // ؛ (arabic semicolon), = 162
|
|
|
|
+ // #, = 163
|
|
|
|
+ // $, = 164
|
|
|
|
+ // ù, = 165
|
|
|
|
+ // page backward, = 166
|
|
|
|
+ // page forward, = 167
|
|
|
|
+ // refresh, = 168
|
|
|
|
+ // closing paren (AZERTY), = 169
|
|
|
|
+ // *, = 170
|
|
|
|
+ // ~ + * key, = 171
|
|
|
|
+ // home key, = 172
|
|
|
|
+ // minus (firefox), mute/unmute, = 173
|
|
|
|
+ // decrease volume level, = 174
|
|
|
|
+ // increase volume level, = 175
|
|
|
|
+ // next, = 176
|
|
|
|
+ // previous, = 177
|
|
|
|
+ // stop, = 178
|
|
|
|
+ // play/pause, = 179
|
|
|
|
+ // e-mail, = 180
|
|
|
|
+ // mute/unmute (firefox), = 181
|
|
|
|
+ // decrease volume level (firefox), = 182
|
|
|
|
+ // increase volume level (firefox), = 183
|
|
|
|
+ Semicolon = 186,
|
|
|
|
+ EqualSign = 187,
|
|
|
|
+ Comma = 188,
|
|
|
|
+ Dash = 189,
|
|
|
|
+ Period = 190,
|
|
|
|
+ ForwardSlash = 191,
|
|
|
|
+ GraveAccent = 192,
|
|
|
|
+ // ?, / or °, = 193
|
|
|
|
+ // numpad period (chrome), = 194
|
|
|
|
+ OpenBracket = 219,
|
|
|
|
+ BackSlash = 220,
|
|
|
|
+ CloseBraket = 221,
|
|
|
|
+ SingleQuote = 222,
|
|
|
|
+ // `, = 223
|
|
|
|
+ // left or right ⌘ key (firefox), = 224
|
|
|
|
+ // altgr, = 225
|
|
|
|
+ // < /git >, left back slash, = 226
|
|
|
|
+ // GNOME Compose Key, = 230
|
|
|
|
+ // ç, = 231
|
|
|
|
+ // XF86Forward, = 233
|
|
|
|
+ // XF86Back, = 234
|
|
|
|
+ // non-conversion, = 235
|
|
|
|
+ // alphanumeric, = 240
|
|
|
|
+ // hiragana/katakana, = 242
|
|
|
|
+ // half-width/full-width, = 243
|
|
|
|
+ // kanji, = 244
|
|
|
|
+ // unlock trackpad (Chrome/Edge), = 251
|
|
|
|
+ // toggle touchpad, = 255
|
|
|
|
+ #[cfg_attr(feature = "serialize", serde(other))]
|
|
|
|
+ Unknown,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+impl KeyCode {
|
|
|
|
+ pub fn from_raw_code(i: u8) -> Self {
|
|
|
|
+ use KeyCode::*;
|
|
|
|
+ match i {
|
|
|
|
+ 8 => Backspace,
|
|
|
|
+ 9 => Tab,
|
|
|
|
+ 13 => Enter,
|
|
|
|
+ 16 => Shift,
|
|
|
|
+ 17 => Ctrl,
|
|
|
|
+ 18 => Alt,
|
|
|
|
+ 19 => Pause,
|
|
|
|
+ 20 => CapsLock,
|
|
|
|
+ 27 => Escape,
|
|
|
|
+ 33 => PageUp,
|
|
|
|
+ 34 => PageDown,
|
|
|
|
+ 35 => End,
|
|
|
|
+ 36 => Home,
|
|
|
|
+ 37 => LeftArrow,
|
|
|
|
+ 38 => UpArrow,
|
|
|
|
+ 39 => RightArrow,
|
|
|
|
+ 40 => DownArrow,
|
|
|
|
+ 45 => Insert,
|
|
|
|
+ 46 => Delete,
|
|
|
|
+ 48 => Num0,
|
|
|
|
+ 49 => Num1,
|
|
|
|
+ 50 => Num2,
|
|
|
|
+ 51 => Num3,
|
|
|
|
+ 52 => Num4,
|
|
|
|
+ 53 => Num5,
|
|
|
|
+ 54 => Num6,
|
|
|
|
+ 55 => Num7,
|
|
|
|
+ 56 => Num8,
|
|
|
|
+ 57 => Num9,
|
|
|
|
+ 65 => A,
|
|
|
|
+ 66 => B,
|
|
|
|
+ 67 => C,
|
|
|
|
+ 68 => D,
|
|
|
|
+ 69 => E,
|
|
|
|
+ 70 => F,
|
|
|
|
+ 71 => G,
|
|
|
|
+ 72 => H,
|
|
|
|
+ 73 => I,
|
|
|
|
+ 74 => J,
|
|
|
|
+ 75 => K,
|
|
|
|
+ 76 => L,
|
|
|
|
+ 77 => M,
|
|
|
|
+ 78 => N,
|
|
|
|
+ 79 => O,
|
|
|
|
+ 80 => P,
|
|
|
|
+ 81 => Q,
|
|
|
|
+ 82 => R,
|
|
|
|
+ 83 => S,
|
|
|
|
+ 84 => T,
|
|
|
|
+ 85 => U,
|
|
|
|
+ 86 => V,
|
|
|
|
+ 87 => W,
|
|
|
|
+ 88 => X,
|
|
|
|
+ 89 => Y,
|
|
|
|
+ 90 => Z,
|
|
|
|
+ 91 => LeftWindow,
|
|
|
|
+ 92 => RightWindow,
|
|
|
|
+ 93 => SelectKey,
|
|
|
|
+ 96 => Numpad0,
|
|
|
|
+ 97 => Numpad1,
|
|
|
|
+ 98 => Numpad2,
|
|
|
|
+ 99 => Numpad3,
|
|
|
|
+ 100 => Numpad4,
|
|
|
|
+ 101 => Numpad5,
|
|
|
|
+ 102 => Numpad6,
|
|
|
|
+ 103 => Numpad7,
|
|
|
|
+ 104 => Numpad8,
|
|
|
|
+ 105 => Numpad9,
|
|
|
|
+ 106 => Multiply,
|
|
|
|
+ 107 => Add,
|
|
|
|
+ 109 => Subtract,
|
|
|
|
+ 110 => DecimalPoint,
|
|
|
|
+ 111 => Divide,
|
|
|
|
+ 112 => F1,
|
|
|
|
+ 113 => F2,
|
|
|
|
+ 114 => F3,
|
|
|
|
+ 115 => F4,
|
|
|
|
+ 116 => F5,
|
|
|
|
+ 117 => F6,
|
|
|
|
+ 118 => F7,
|
|
|
|
+ 119 => F8,
|
|
|
|
+ 120 => F9,
|
|
|
|
+ 121 => F10,
|
|
|
|
+ 122 => F11,
|
|
|
|
+ 123 => F12,
|
|
|
|
+ 144 => NumLock,
|
|
|
|
+ 145 => ScrollLock,
|
|
|
|
+ 186 => Semicolon,
|
|
|
|
+ 187 => EqualSign,
|
|
|
|
+ 188 => Comma,
|
|
|
|
+ 189 => Dash,
|
|
|
|
+ 190 => Period,
|
|
|
|
+ 191 => ForwardSlash,
|
|
|
|
+ 192 => GraveAccent,
|
|
|
|
+ 219 => OpenBracket,
|
|
|
|
+ 220 => BackSlash,
|
|
|
|
+ 221 => CloseBraket,
|
|
|
|
+ 222 => SingleQuote,
|
|
|
|
+ _ => Unknown,
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // get the raw code
|
|
|
|
+ pub fn raw_code(&self) -> u32 {
|
|
|
|
+ *self as u32
|
|
|
|
+ }
|
|
|
|
+}
|