1use crate::{OH_NativeXComponent_KeyAction, OH_NativeXComponent_KeyCode};
2use keyboard_types::{Code, KeyState};
3
4impl From<OH_NativeXComponent_KeyCode> for Code {
5 fn from(code: OH_NativeXComponent_KeyCode) -> Self {
6 use OH_NativeXComponent_KeyCode as OH_KeyCode;
7 match code {
8 OH_KeyCode::KEY_BACKSLASH => Code::Backslash,
10 OH_KeyCode::KEY_LEFT_BRACKET => Code::BracketLeft,
11 OH_KeyCode::KEY_RIGHT_BRACKET => Code::BracketRight,
12 OH_KeyCode::KEY_COMMA => Code::Comma,
13 OH_KeyCode::KEY_0 => Code::Digit0,
14 OH_KeyCode::KEY_1 => Code::Digit1,
15 OH_KeyCode::KEY_2 => Code::Digit2,
16 OH_KeyCode::KEY_3 => Code::Digit3,
17 OH_KeyCode::KEY_4 => Code::Digit4,
18 OH_KeyCode::KEY_5 => Code::Digit5,
19 OH_KeyCode::KEY_6 => Code::Digit6,
20 OH_KeyCode::KEY_7 => Code::Digit7,
21 OH_KeyCode::KEY_8 => Code::Digit8,
22 OH_KeyCode::KEY_9 => Code::Digit9,
23
24 OH_KeyCode::KEY_EQUALS => Code::Equal,
25 OH_KeyCode::KEY_RO => Code::IntlRo,
26 OH_KeyCode::KEY_YEN => Code::IntlYen,
27
28 OH_KeyCode::KEY_A => Code::KeyA,
29 OH_KeyCode::KEY_B => Code::KeyB,
30 OH_KeyCode::KEY_C => Code::KeyC,
31 OH_KeyCode::KEY_D => Code::KeyD,
32 OH_KeyCode::KEY_E => Code::KeyE,
33 OH_KeyCode::KEY_F => Code::KeyF,
34 OH_KeyCode::KEY_G => Code::KeyG,
35 OH_KeyCode::KEY_H => Code::KeyH,
36 OH_KeyCode::KEY_I => Code::KeyI,
37 OH_KeyCode::KEY_J => Code::KeyJ,
38 OH_KeyCode::KEY_K => Code::KeyK,
39 OH_KeyCode::KEY_L => Code::KeyL,
40 OH_KeyCode::KEY_M => Code::KeyM,
41 OH_KeyCode::KEY_N => Code::KeyN,
42 OH_KeyCode::KEY_O => Code::KeyO,
43 OH_KeyCode::KEY_P => Code::KeyP,
44 OH_KeyCode::KEY_Q => Code::KeyQ,
45 OH_KeyCode::KEY_R => Code::KeyR,
46 OH_KeyCode::KEY_S => Code::KeyS,
47 OH_KeyCode::KEY_T => Code::KeyT,
48 OH_KeyCode::KEY_U => Code::KeyU,
49 OH_KeyCode::KEY_V => Code::KeyV,
50 OH_KeyCode::KEY_W => Code::KeyW,
51 OH_KeyCode::KEY_X => Code::KeyX,
52 OH_KeyCode::KEY_Y => Code::KeyY,
53 OH_KeyCode::KEY_Z => Code::KeyZ,
54
55 OH_KeyCode::KEY_MINUS => Code::Minus,
56 OH_KeyCode::KEY_PERIOD => Code::Period,
57 OH_KeyCode::KEY_SEMICOLON => Code::Semicolon,
59 OH_KeyCode::KEY_SLASH => Code::Slash,
60 OH_KeyCode::KEY_ALT_LEFT => Code::AltLeft,
61 OH_KeyCode::KEY_ALT_RIGHT => Code::AltRight,
62 OH_KeyCode::KEY_DEL => Code::Backspace,
63 OH_KeyCode::KEY_CAPS_LOCK => Code::CapsLock,
64 OH_KeyCode::KEY_MENU => Code::ContextMenu,
66 OH_KeyCode::KEY_CTRL_LEFT => Code::ControlLeft,
67 OH_KeyCode::KEY_CTRL_RIGHT => Code::ControlRight,
68 OH_KeyCode::KEY_ENTER => Code::Enter,
69 OH_KeyCode::KEY_META_LEFT => Code::MetaLeft,
70 OH_KeyCode::KEY_META_RIGHT => Code::MetaRight,
71 OH_KeyCode::KEY_SHIFT_LEFT => Code::ShiftLeft,
72 OH_KeyCode::KEY_SHIFT_RIGHT => Code::ShiftRight,
73 OH_KeyCode::KEY_SPACE => Code::Space,
74 OH_KeyCode::KEY_TAB => Code::Tab,
75 OH_KeyCode::KEY_FORWARD_DEL => Code::Delete,
79 OH_KeyCode::KEY_HELP => Code::Help,
81 OH_KeyCode::KEY_HOME => Code::Home,
82 OH_KeyCode::KEY_INSERT => Code::Insert,
83 OH_KeyCode::KEY_PAGE_DOWN => Code::PageDown,
84 OH_KeyCode::KEY_PAGE_UP => Code::PageUp,
85 OH_KeyCode::KEY_DPAD_DOWN => Code::ArrowDown,
87 OH_KeyCode::KEY_DPAD_UP => Code::ArrowUp,
88 OH_KeyCode::KEY_DPAD_LEFT => Code::ArrowLeft,
89 OH_KeyCode::KEY_DPAD_RIGHT => Code::ArrowRight,
90
91 OH_KeyCode::KEY_NUM_LOCK => Code::NumLock,
92 OH_KeyCode::KEY_NUMPAD_0 => Code::Numpad0,
93 OH_KeyCode::KEY_NUMPAD_1 => Code::Numpad1,
94 OH_KeyCode::KEY_NUMPAD_2 => Code::Numpad2,
95 OH_KeyCode::KEY_NUMPAD_3 => Code::Numpad3,
96 OH_KeyCode::KEY_NUMPAD_4 => Code::Numpad4,
97 OH_KeyCode::KEY_NUMPAD_5 => Code::Numpad5,
98 OH_KeyCode::KEY_NUMPAD_6 => Code::Numpad6,
99 OH_KeyCode::KEY_NUMPAD_7 => Code::Numpad7,
100 OH_KeyCode::KEY_NUMPAD_8 => Code::Numpad8,
101 OH_KeyCode::KEY_NUMPAD_9 => Code::Numpad9,
102 OH_KeyCode::KEY_NUMPAD_ADD => Code::NumpadAdd,
103 OH_KeyCode::KEY_NUMPAD_COMMA => Code::NumpadComma,
104 OH_KeyCode::KEY_NUMPAD_DIVIDE => Code::NumpadDivide,
105 OH_KeyCode::KEY_NUMPAD_DOT => Code::NumpadDecimal,
106 OH_KeyCode::KEY_NUMPAD_ENTER => Code::NumpadEnter,
107 OH_KeyCode::KEY_NUMPAD_EQUALS => Code::NumpadEqual,
108 OH_KeyCode::KEY_NUMPAD_LEFT_PAREN => Code::NumpadParenLeft,
109 OH_KeyCode::KEY_NUMPAD_RIGHT_PAREN => Code::NumpadParenRight,
110 OH_KeyCode::KEY_NUMPAD_MULTIPLY => Code::NumpadMultiply,
111 OH_KeyCode::KEY_NUMPAD_SUBTRACT => Code::NumpadSubtract,
113
114 OH_KeyCode::KEY_ESCAPE => Code::Escape,
115 OH_KeyCode::KEY_FN => Code::Fn,
116 OH_KeyCode::KEY_PRINT => Code::PrintScreen,
118 OH_KeyCode::KEY_SCROLL_LOCK => Code::ScrollLock,
119 OH_KeyCode::KEY_PLAYPAUSE => Code::Pause,
120 OH_KeyCode::KEY_MEDIA_EJECT => Code::Eject,
122 OH_KeyCode::KEY_MEDIA_PLAY_PAUSE => Code::MediaPlayPause,
124 OH_KeyCode::KEY_MEDIA_PAUSE => Code::MediaPause,
125 OH_KeyCode::KEY_MEDIA_PLAY => Code::MediaPlay,
126 OH_KeyCode::KEY_MEDIA_NEXT => Code::MediaTrackNext,
127 OH_KeyCode::KEY_MEDIA_PREVIOUS => Code::MediaTrackPrevious,
128 OH_KeyCode::KEY_MEDIA_STOP => Code::MediaStop,
129
130 OH_KeyCode::KEY_POWER => Code::Power,
131 OH_KeyCode::KEY_SLEEP => Code::Sleep,
132
133 OH_KeyCode::KEY_VOLUME_DOWN => Code::AudioVolumeDown,
134 OH_KeyCode::KEY_VOLUME_UP => Code::AudioVolumeUp,
135 OH_KeyCode::KEY_VOLUME_MUTE => Code::AudioVolumeMute,
136
137 OH_KeyCode::KEY_WAKEUP => Code::WakeUp,
138 OH_KeyCode::KEY_SUSPEND => Code::Suspend,
140 OH_KeyCode::KEY_AGAIN => Code::Again,
141 OH_KeyCode::KEY_COPY => Code::Copy,
142 OH_KeyCode::KEY_CUT => Code::Cut,
143 OH_KeyCode::KEY_FIND => Code::Find,
144 OH_KeyCode::KEY_OPEN => Code::Open,
145 OH_KeyCode::KEY_PASTE => Code::Paste,
146 OH_KeyCode::KEY_PROPS => Code::Props,
147 OH_KeyCode::KEY_UNDO => Code::Undo,
149 OH_KeyCode::KEY_HIRAGANA => Code::Hiragana,
150 OH_KeyCode::KEY_KATAKANA => Code::Katakana,
151 OH_KeyCode::KEY_F1 => Code::F1,
152 OH_KeyCode::KEY_F2 => Code::F2,
153 OH_KeyCode::KEY_F3 => Code::F3,
154 OH_KeyCode::KEY_F4 => Code::F4,
155 OH_KeyCode::KEY_F5 => Code::F5,
156 OH_KeyCode::KEY_F6 => Code::F6,
157 OH_KeyCode::KEY_F7 => Code::F7,
158 OH_KeyCode::KEY_F8 => Code::F8,
159 OH_KeyCode::KEY_F9 => Code::F9,
160 OH_KeyCode::KEY_F10 => Code::F10,
161 OH_KeyCode::KEY_F11 => Code::F11,
162 OH_KeyCode::KEY_F12 => Code::F12,
163 OH_KeyCode::KEY_F13 => Code::F13,
164 OH_KeyCode::KEY_F14 => Code::F14,
165 OH_KeyCode::KEY_F15 => Code::F15,
166 OH_KeyCode::KEY_F16 => Code::F16,
167 OH_KeyCode::KEY_F17 => Code::F17,
168 OH_KeyCode::KEY_F18 => Code::F18,
169 OH_KeyCode::KEY_F19 => Code::F19,
170 OH_KeyCode::KEY_F20 => Code::F20,
171 OH_KeyCode::KEY_F21 => Code::F21,
172 OH_KeyCode::KEY_F22 => Code::F22,
173 OH_KeyCode::KEY_F23 => Code::F23,
174 OH_KeyCode::KEY_F24 => Code::F24,
175 OH_KeyCode::KEY_BRIGHTNESS_DOWN => Code::BrightnessDown,
176 OH_KeyCode::KEY_BRIGHTNESS_UP => Code::BrightnessUp,
177 OH_KeyCode::KEY_MUTE => Code::MicrophoneMuteToggle,
180 OH_KeyCode::KEY_APPSELECT => Code::SelectTask,
181 OH_KeyCode::KEY_CYCLEWINDOWS => Code::ShowAllWindows,
183 OH_KeyCode::KEY_UNKNOWN => Code::Unidentified,
185 _ => Code::Unidentified,
186 }
187 }
188}
189
190pub struct UnknownKeyState {}
191
192impl TryFrom<OH_NativeXComponent_KeyAction> for KeyState {
193 type Error = UnknownKeyState;
194
195 fn try_from(value: OH_NativeXComponent_KeyAction) -> Result<Self, Self::Error> {
196 use OH_NativeXComponent_KeyAction as KeyAction;
197 match value {
198 KeyAction::OH_NATIVEXCOMPONENT_KEY_ACTION_UP => Ok(KeyState::Up),
199 KeyAction::OH_NATIVEXCOMPONENT_KEY_ACTION_DOWN => Ok(KeyState::Down),
200 _ => Err(UnknownKeyState {}),
201 }
202 }
203}