xcomponent_sys/
keyboard_types_compat.rs

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_BACK / code::Backquote ?
9            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            // Quote?
58            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            // todo: double check
65            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            // Code::Convert
76            // Lang1-5
77            // NonConvert
78            OH_KeyCode::KEY_FORWARD_DEL => Code::Delete,
79            // Code::End
80            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            // todo: not sure about dpad -> arrow
86            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_PLUSMINUS => Code::Numpad
112            OH_KeyCode::KEY_NUMPAD_SUBTRACT => Code::NumpadSubtract,
113
114            OH_KeyCode::KEY_ESCAPE => Code::Escape,
115            OH_KeyCode::KEY_FN => Code::Fn,
116            // apparently no fn lock
117            OH_KeyCode::KEY_PRINT => Code::PrintScreen,
118            OH_KeyCode::KEY_SCROLL_LOCK => Code::ScrollLock,
119            OH_KeyCode::KEY_PLAYPAUSE => Code::Pause,
120            // Code Browser*
121            OH_KeyCode::KEY_MEDIA_EJECT => Code::Eject,
122            // Code Launch*
123            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            // Hyper, Super, Turbo, Abort, Resume
139            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            // Select
148            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            // DisplayToggleIntExt?
178            // OH_KeyCode::KEY_KBD_LAYOUT_NEXT => Code::KeyboardLayoutSelect
179            OH_KeyCode::KEY_MUTE => Code::MicrophoneMuteToggle,
180            OH_KeyCode::KEY_APPSELECT => Code::SelectTask,
181            // todo: verify
182            OH_KeyCode::KEY_CYCLEWINDOWS => Code::ShowAllWindows,
183            // OH_KeyCode::KEY_ZOOMIN => Code::
184            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}