servoshell/desktop/
keyutils.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use keyboard_types::{Code, Key, KeyState, Location, Modifiers, NamedKey};
6use servo::KeyboardEvent;
7use winit::event::{ElementState, KeyEvent};
8use winit::keyboard::{
9    Key as WinitKey, KeyCode, KeyLocation as WinitKeyLocation, ModifiersState,
10    NamedKey as WinitNamedKey, PhysicalKey,
11};
12
13// Some shortcuts use Cmd on Mac and Control on other systems.
14#[cfg(target_os = "macos")]
15pub const CMD_OR_CONTROL: Modifiers = Modifiers::META;
16#[cfg(not(target_os = "macos"))]
17pub const CMD_OR_CONTROL: Modifiers = Modifiers::CONTROL;
18
19// Some shortcuts use Cmd on Mac and Alt on other systems.
20#[cfg(target_os = "macos")]
21pub const CMD_OR_ALT: Modifiers = Modifiers::META;
22#[cfg(not(target_os = "macos"))]
23pub const CMD_OR_ALT: Modifiers = Modifiers::ALT;
24
25trait FromWinitKeyEvent {
26    fn from_winit_key_event(key_event: &KeyEvent) -> Self;
27}
28
29#[allow(deprecated)]
30impl FromWinitKeyEvent for Key {
31    fn from_winit_key_event(key_event: &KeyEvent) -> Self {
32        let named_key = match key_event.logical_key {
33            WinitKey::Named(named_key) => named_key,
34            WinitKey::Character(ref string) => return Key::Character(string.to_string()),
35            WinitKey::Unidentified(_) | WinitKey::Dead(_) => {
36                return Key::Named(NamedKey::Unidentified);
37            },
38        };
39
40        match named_key {
41            WinitNamedKey::AVRInput => Key::Named(NamedKey::AVRInput),
42            WinitNamedKey::AVRPower => Key::Named(NamedKey::AVRPower),
43            WinitNamedKey::Accept => Key::Named(NamedKey::Accept),
44            WinitNamedKey::Again => Key::Named(NamedKey::Again),
45            WinitNamedKey::AllCandidates => Key::Named(NamedKey::AllCandidates),
46            WinitNamedKey::Alphanumeric => Key::Named(NamedKey::Alphanumeric),
47            WinitNamedKey::Alt => Key::Named(NamedKey::Alt),
48            WinitNamedKey::AltGraph => Key::Named(NamedKey::AltGraph),
49            WinitNamedKey::AppSwitch => Key::Named(NamedKey::AppSwitch),
50            WinitNamedKey::ArrowDown => Key::Named(NamedKey::ArrowDown),
51            WinitNamedKey::ArrowLeft => Key::Named(NamedKey::ArrowLeft),
52            WinitNamedKey::ArrowRight => Key::Named(NamedKey::ArrowRight),
53            WinitNamedKey::ArrowUp => Key::Named(NamedKey::ArrowUp),
54            WinitNamedKey::Attn => Key::Named(NamedKey::Attn),
55            WinitNamedKey::AudioBalanceLeft => Key::Named(NamedKey::AudioBalanceLeft),
56            WinitNamedKey::AudioBalanceRight => Key::Named(NamedKey::AudioBalanceRight),
57            WinitNamedKey::AudioBassBoostDown => Key::Named(NamedKey::AudioBassBoostDown),
58            WinitNamedKey::AudioBassBoostToggle => Key::Named(NamedKey::AudioBassBoostToggle),
59            WinitNamedKey::AudioBassBoostUp => Key::Named(NamedKey::AudioBassBoostUp),
60            WinitNamedKey::AudioFaderFront => Key::Named(NamedKey::AudioFaderFront),
61            WinitNamedKey::AudioFaderRear => Key::Named(NamedKey::AudioFaderRear),
62            WinitNamedKey::AudioSurroundModeNext => Key::Named(NamedKey::AudioSurroundModeNext),
63            WinitNamedKey::AudioTrebleDown => Key::Named(NamedKey::AudioTrebleDown),
64            WinitNamedKey::AudioTrebleUp => Key::Named(NamedKey::AudioTrebleUp),
65            WinitNamedKey::AudioVolumeDown => Key::Named(NamedKey::AudioVolumeDown),
66            WinitNamedKey::AudioVolumeMute => Key::Named(NamedKey::AudioVolumeMute),
67            WinitNamedKey::AudioVolumeUp => Key::Named(NamedKey::AudioVolumeUp),
68            WinitNamedKey::Backspace => Key::Named(NamedKey::Backspace),
69            WinitNamedKey::BrightnessDown => Key::Named(NamedKey::BrightnessDown),
70            WinitNamedKey::BrightnessUp => Key::Named(NamedKey::BrightnessUp),
71            WinitNamedKey::BrowserBack => Key::Named(NamedKey::BrowserBack),
72            WinitNamedKey::BrowserFavorites => Key::Named(NamedKey::BrowserFavorites),
73            WinitNamedKey::BrowserForward => Key::Named(NamedKey::BrowserForward),
74            WinitNamedKey::BrowserHome => Key::Named(NamedKey::BrowserHome),
75            WinitNamedKey::BrowserRefresh => Key::Named(NamedKey::BrowserRefresh),
76            WinitNamedKey::BrowserSearch => Key::Named(NamedKey::BrowserSearch),
77            WinitNamedKey::BrowserStop => Key::Named(NamedKey::BrowserStop),
78            WinitNamedKey::Call => Key::Named(NamedKey::Call),
79            WinitNamedKey::Camera => Key::Named(NamedKey::Camera),
80            WinitNamedKey::CameraFocus => Key::Named(NamedKey::CameraFocus),
81            WinitNamedKey::Cancel => Key::Named(NamedKey::Cancel),
82            WinitNamedKey::CapsLock => Key::Named(NamedKey::CapsLock),
83            WinitNamedKey::ChannelDown => Key::Named(NamedKey::ChannelDown),
84            WinitNamedKey::ChannelUp => Key::Named(NamedKey::ChannelUp),
85            WinitNamedKey::Clear => Key::Named(NamedKey::Clear),
86            WinitNamedKey::Close => Key::Named(NamedKey::Close),
87            WinitNamedKey::ClosedCaptionToggle => Key::Named(NamedKey::ClosedCaptionToggle),
88            WinitNamedKey::CodeInput => Key::Named(NamedKey::CodeInput),
89            WinitNamedKey::ColorF0Red => Key::Named(NamedKey::ColorF0Red),
90            WinitNamedKey::ColorF1Green => Key::Named(NamedKey::ColorF1Green),
91            WinitNamedKey::ColorF2Yellow => Key::Named(NamedKey::ColorF2Yellow),
92            WinitNamedKey::ColorF3Blue => Key::Named(NamedKey::ColorF3Blue),
93            WinitNamedKey::ColorF4Grey => Key::Named(NamedKey::ColorF4Grey),
94            WinitNamedKey::ColorF5Brown => Key::Named(NamedKey::ColorF5Brown),
95            WinitNamedKey::Compose => Key::Named(NamedKey::Compose),
96            WinitNamedKey::ContextMenu => Key::Named(NamedKey::ContextMenu),
97            WinitNamedKey::Control => Key::Named(NamedKey::Control),
98            WinitNamedKey::Convert => Key::Named(NamedKey::Convert),
99            WinitNamedKey::Copy => Key::Named(NamedKey::Copy),
100            WinitNamedKey::CrSel => Key::Named(NamedKey::CrSel),
101            WinitNamedKey::Cut => Key::Named(NamedKey::Cut),
102            WinitNamedKey::DVR => Key::Named(NamedKey::DVR),
103            WinitNamedKey::Delete => Key::Named(NamedKey::Delete),
104            WinitNamedKey::Dimmer => Key::Named(NamedKey::Dimmer),
105            WinitNamedKey::DisplaySwap => Key::Named(NamedKey::DisplaySwap),
106            WinitNamedKey::Eisu => Key::Named(NamedKey::Eisu),
107            WinitNamedKey::Eject => Key::Named(NamedKey::Eject),
108            WinitNamedKey::End => Key::Named(NamedKey::End),
109            WinitNamedKey::EndCall => Key::Named(NamedKey::EndCall),
110            WinitNamedKey::Enter => Key::Named(NamedKey::Enter),
111            WinitNamedKey::EraseEof => Key::Named(NamedKey::EraseEof),
112            WinitNamedKey::Escape => Key::Named(NamedKey::Escape),
113            WinitNamedKey::ExSel => Key::Named(NamedKey::ExSel),
114            WinitNamedKey::Execute => Key::Named(NamedKey::Execute),
115            WinitNamedKey::Exit => Key::Named(NamedKey::Exit),
116            WinitNamedKey::F1 => Key::Named(NamedKey::F1),
117            WinitNamedKey::F10 => Key::Named(NamedKey::F10),
118            WinitNamedKey::F11 => Key::Named(NamedKey::F11),
119            WinitNamedKey::F12 => Key::Named(NamedKey::F12),
120            WinitNamedKey::F13 => Key::Named(NamedKey::F13),
121            WinitNamedKey::F14 => Key::Named(NamedKey::F14),
122            WinitNamedKey::F15 => Key::Named(NamedKey::F15),
123            WinitNamedKey::F16 => Key::Named(NamedKey::F16),
124            WinitNamedKey::F17 => Key::Named(NamedKey::F17),
125            WinitNamedKey::F18 => Key::Named(NamedKey::F18),
126            WinitNamedKey::F19 => Key::Named(NamedKey::F19),
127            WinitNamedKey::F2 => Key::Named(NamedKey::F2),
128            WinitNamedKey::F20 => Key::Named(NamedKey::F20),
129            WinitNamedKey::F21 => Key::Named(NamedKey::F21),
130            WinitNamedKey::F22 => Key::Named(NamedKey::F22),
131            WinitNamedKey::F23 => Key::Named(NamedKey::F23),
132            WinitNamedKey::F24 => Key::Named(NamedKey::F24),
133            WinitNamedKey::F25 => Key::Named(NamedKey::F25),
134            WinitNamedKey::F26 => Key::Named(NamedKey::F26),
135            WinitNamedKey::F27 => Key::Named(NamedKey::F27),
136            WinitNamedKey::F28 => Key::Named(NamedKey::F28),
137            WinitNamedKey::F29 => Key::Named(NamedKey::F29),
138            WinitNamedKey::F3 => Key::Named(NamedKey::F3),
139            WinitNamedKey::F30 => Key::Named(NamedKey::F30),
140            WinitNamedKey::F31 => Key::Named(NamedKey::F31),
141            WinitNamedKey::F32 => Key::Named(NamedKey::F32),
142            WinitNamedKey::F33 => Key::Named(NamedKey::F33),
143            WinitNamedKey::F34 => Key::Named(NamedKey::F34),
144            WinitNamedKey::F35 => Key::Named(NamedKey::F35),
145            WinitNamedKey::F4 => Key::Named(NamedKey::F4),
146            WinitNamedKey::F5 => Key::Named(NamedKey::F5),
147            WinitNamedKey::F6 => Key::Named(NamedKey::F6),
148            WinitNamedKey::F7 => Key::Named(NamedKey::F7),
149            WinitNamedKey::F8 => Key::Named(NamedKey::F8),
150            WinitNamedKey::F9 => Key::Named(NamedKey::F9),
151            WinitNamedKey::FavoriteClear0 => Key::Named(NamedKey::FavoriteClear0),
152            WinitNamedKey::FavoriteClear1 => Key::Named(NamedKey::FavoriteClear1),
153            WinitNamedKey::FavoriteClear2 => Key::Named(NamedKey::FavoriteClear2),
154            WinitNamedKey::FavoriteClear3 => Key::Named(NamedKey::FavoriteClear3),
155            WinitNamedKey::FavoriteRecall0 => Key::Named(NamedKey::FavoriteRecall0),
156            WinitNamedKey::FavoriteRecall1 => Key::Named(NamedKey::FavoriteRecall1),
157            WinitNamedKey::FavoriteRecall2 => Key::Named(NamedKey::FavoriteRecall2),
158            WinitNamedKey::FavoriteRecall3 => Key::Named(NamedKey::FavoriteRecall3),
159            WinitNamedKey::FavoriteStore0 => Key::Named(NamedKey::FavoriteStore0),
160            WinitNamedKey::FavoriteStore1 => Key::Named(NamedKey::FavoriteStore1),
161            WinitNamedKey::FavoriteStore2 => Key::Named(NamedKey::FavoriteStore2),
162            WinitNamedKey::FavoriteStore3 => Key::Named(NamedKey::FavoriteStore3),
163            WinitNamedKey::FinalMode => Key::Named(NamedKey::FinalMode),
164            WinitNamedKey::Find => Key::Named(NamedKey::Find),
165            WinitNamedKey::Fn => Key::Named(NamedKey::Fn),
166            WinitNamedKey::FnLock => Key::Named(NamedKey::FnLock),
167            WinitNamedKey::GoBack => Key::Named(NamedKey::GoBack),
168            WinitNamedKey::GoHome => Key::Named(NamedKey::GoHome),
169            WinitNamedKey::GroupFirst => Key::Named(NamedKey::GroupFirst),
170            WinitNamedKey::GroupLast => Key::Named(NamedKey::GroupLast),
171            WinitNamedKey::GroupNext => Key::Named(NamedKey::GroupNext),
172            WinitNamedKey::GroupPrevious => Key::Named(NamedKey::GroupPrevious),
173            WinitNamedKey::Guide => Key::Named(NamedKey::Guide),
174            WinitNamedKey::GuideNextDay => Key::Named(NamedKey::GuideNextDay),
175            WinitNamedKey::GuidePreviousDay => Key::Named(NamedKey::GuidePreviousDay),
176            WinitNamedKey::HangulMode => Key::Named(NamedKey::HangulMode),
177            WinitNamedKey::HanjaMode => Key::Named(NamedKey::HanjaMode),
178            WinitNamedKey::Hankaku => Key::Named(NamedKey::Hankaku),
179            WinitNamedKey::HeadsetHook => Key::Named(NamedKey::HeadsetHook),
180            WinitNamedKey::Help => Key::Named(NamedKey::Help),
181            WinitNamedKey::Hibernate => Key::Named(NamedKey::Hibernate),
182            WinitNamedKey::Hiragana => Key::Named(NamedKey::Hiragana),
183            WinitNamedKey::HiraganaKatakana => Key::Named(NamedKey::HiraganaKatakana),
184            WinitNamedKey::Home => Key::Named(NamedKey::Home),
185            WinitNamedKey::Hyper => Key::Named(NamedKey::Hyper),
186            WinitNamedKey::Info => Key::Named(NamedKey::Info),
187            WinitNamedKey::Insert => Key::Named(NamedKey::Insert),
188            WinitNamedKey::InstantReplay => Key::Named(NamedKey::InstantReplay),
189            WinitNamedKey::JunjaMode => Key::Named(NamedKey::JunjaMode),
190            WinitNamedKey::KanaMode => Key::Named(NamedKey::KanaMode),
191            WinitNamedKey::KanjiMode => Key::Named(NamedKey::KanjiMode),
192            WinitNamedKey::Katakana => Key::Named(NamedKey::Katakana),
193            WinitNamedKey::Key11 => Key::Named(NamedKey::Key11),
194            WinitNamedKey::Key12 => Key::Named(NamedKey::Key12),
195            WinitNamedKey::LastNumberRedial => Key::Named(NamedKey::LastNumberRedial),
196            WinitNamedKey::LaunchApplication1 => Key::Named(NamedKey::LaunchApplication1),
197            WinitNamedKey::LaunchApplication2 => Key::Named(NamedKey::LaunchApplication2),
198            WinitNamedKey::LaunchCalendar => Key::Named(NamedKey::LaunchCalendar),
199            WinitNamedKey::LaunchContacts => Key::Named(NamedKey::LaunchContacts),
200            WinitNamedKey::LaunchMail => Key::Named(NamedKey::LaunchMail),
201            WinitNamedKey::LaunchMediaPlayer => Key::Named(NamedKey::LaunchMediaPlayer),
202            WinitNamedKey::LaunchMusicPlayer => Key::Named(NamedKey::LaunchMusicPlayer),
203            WinitNamedKey::LaunchPhone => Key::Named(NamedKey::LaunchPhone),
204            WinitNamedKey::LaunchScreenSaver => Key::Named(NamedKey::LaunchScreenSaver),
205            WinitNamedKey::LaunchSpreadsheet => Key::Named(NamedKey::LaunchSpreadsheet),
206            WinitNamedKey::LaunchWebBrowser => Key::Named(NamedKey::LaunchWebBrowser),
207            WinitNamedKey::LaunchWebCam => Key::Named(NamedKey::LaunchWebCam),
208            WinitNamedKey::LaunchWordProcessor => Key::Named(NamedKey::LaunchWordProcessor),
209            WinitNamedKey::Link => Key::Named(NamedKey::Link),
210            WinitNamedKey::ListProgram => Key::Named(NamedKey::ListProgram),
211            WinitNamedKey::LiveContent => Key::Named(NamedKey::LiveContent),
212            WinitNamedKey::Lock => Key::Named(NamedKey::Lock),
213            WinitNamedKey::LogOff => Key::Named(NamedKey::LogOff),
214            WinitNamedKey::MailForward => Key::Named(NamedKey::MailForward),
215            WinitNamedKey::MailReply => Key::Named(NamedKey::MailReply),
216            WinitNamedKey::MailSend => Key::Named(NamedKey::MailSend),
217            WinitNamedKey::MannerMode => Key::Named(NamedKey::MannerMode),
218            WinitNamedKey::MediaApps => Key::Named(NamedKey::MediaApps),
219            WinitNamedKey::MediaAudioTrack => Key::Named(NamedKey::MediaAudioTrack),
220            WinitNamedKey::MediaClose => Key::Named(NamedKey::MediaClose),
221            WinitNamedKey::MediaFastForward => Key::Named(NamedKey::MediaFastForward),
222            WinitNamedKey::MediaLast => Key::Named(NamedKey::MediaLast),
223            WinitNamedKey::MediaPause => Key::Named(NamedKey::MediaPause),
224            WinitNamedKey::MediaPlay => Key::Named(NamedKey::MediaPlay),
225            WinitNamedKey::MediaPlayPause => Key::Named(NamedKey::MediaPlayPause),
226            WinitNamedKey::MediaRecord => Key::Named(NamedKey::MediaRecord),
227            WinitNamedKey::MediaRewind => Key::Named(NamedKey::MediaRewind),
228            WinitNamedKey::MediaSkipBackward => Key::Named(NamedKey::MediaSkipBackward),
229            WinitNamedKey::MediaSkipForward => Key::Named(NamedKey::MediaSkipForward),
230            WinitNamedKey::MediaStepBackward => Key::Named(NamedKey::MediaStepBackward),
231            WinitNamedKey::MediaStepForward => Key::Named(NamedKey::MediaStepForward),
232            WinitNamedKey::MediaStop => Key::Named(NamedKey::MediaStop),
233            WinitNamedKey::MediaTopMenu => Key::Named(NamedKey::MediaTopMenu),
234            WinitNamedKey::MediaTrackNext => Key::Named(NamedKey::MediaTrackNext),
235            WinitNamedKey::MediaTrackPrevious => Key::Named(NamedKey::MediaTrackPrevious),
236            WinitNamedKey::Meta => Key::Named(NamedKey::Meta),
237            WinitNamedKey::MicrophoneToggle => Key::Named(NamedKey::MicrophoneToggle),
238            WinitNamedKey::MicrophoneVolumeDown => Key::Named(NamedKey::MicrophoneVolumeDown),
239            WinitNamedKey::MicrophoneVolumeMute => Key::Named(NamedKey::MicrophoneVolumeMute),
240            WinitNamedKey::MicrophoneVolumeUp => Key::Named(NamedKey::MicrophoneVolumeUp),
241            WinitNamedKey::ModeChange => Key::Named(NamedKey::ModeChange),
242            WinitNamedKey::NavigateIn => Key::Named(NamedKey::NavigateIn),
243            WinitNamedKey::NavigateNext => Key::Named(NamedKey::NavigateNext),
244            WinitNamedKey::NavigateOut => Key::Named(NamedKey::NavigateOut),
245            WinitNamedKey::NavigatePrevious => Key::Named(NamedKey::NavigatePrevious),
246            WinitNamedKey::New => Key::Named(NamedKey::New),
247            WinitNamedKey::NextCandidate => Key::Named(NamedKey::NextCandidate),
248            WinitNamedKey::NextFavoriteChannel => Key::Named(NamedKey::NextFavoriteChannel),
249            WinitNamedKey::NextUserProfile => Key::Named(NamedKey::NextUserProfile),
250            WinitNamedKey::NonConvert => Key::Named(NamedKey::NonConvert),
251            WinitNamedKey::Notification => Key::Named(NamedKey::Notification),
252            WinitNamedKey::NumLock => Key::Named(NamedKey::NumLock),
253            WinitNamedKey::OnDemand => Key::Named(NamedKey::OnDemand),
254            WinitNamedKey::Open => Key::Named(NamedKey::Open),
255            WinitNamedKey::PageDown => Key::Named(NamedKey::PageDown),
256            WinitNamedKey::PageUp => Key::Named(NamedKey::PageUp),
257            WinitNamedKey::Pairing => Key::Named(NamedKey::Pairing),
258            WinitNamedKey::Paste => Key::Named(NamedKey::Paste),
259            WinitNamedKey::Pause => Key::Named(NamedKey::Pause),
260            WinitNamedKey::PinPDown => Key::Named(NamedKey::PinPDown),
261            WinitNamedKey::PinPMove => Key::Named(NamedKey::PinPMove),
262            WinitNamedKey::PinPToggle => Key::Named(NamedKey::PinPToggle),
263            WinitNamedKey::PinPUp => Key::Named(NamedKey::PinPUp),
264            WinitNamedKey::Play => Key::Named(NamedKey::Play),
265            WinitNamedKey::PlaySpeedDown => Key::Named(NamedKey::PlaySpeedDown),
266            WinitNamedKey::PlaySpeedReset => Key::Named(NamedKey::PlaySpeedReset),
267            WinitNamedKey::PlaySpeedUp => Key::Named(NamedKey::PlaySpeedUp),
268            WinitNamedKey::Power => Key::Named(NamedKey::Power),
269            WinitNamedKey::PowerOff => Key::Named(NamedKey::PowerOff),
270            WinitNamedKey::PreviousCandidate => Key::Named(NamedKey::PreviousCandidate),
271            WinitNamedKey::Print => Key::Named(NamedKey::Print),
272            WinitNamedKey::PrintScreen => Key::Named(NamedKey::PrintScreen),
273            WinitNamedKey::Process => Key::Named(NamedKey::Process),
274            WinitNamedKey::Props => Key::Named(NamedKey::Props),
275            WinitNamedKey::RandomToggle => Key::Named(NamedKey::RandomToggle),
276            WinitNamedKey::RcLowBattery => Key::Named(NamedKey::RcLowBattery),
277            WinitNamedKey::RecordSpeedNext => Key::Named(NamedKey::RecordSpeedNext),
278            WinitNamedKey::Redo => Key::Named(NamedKey::Redo),
279            WinitNamedKey::RfBypass => Key::Named(NamedKey::RfBypass),
280            WinitNamedKey::Romaji => Key::Named(NamedKey::Romaji),
281            WinitNamedKey::STBInput => Key::Named(NamedKey::STBInput),
282            WinitNamedKey::STBPower => Key::Named(NamedKey::STBPower),
283            WinitNamedKey::Save => Key::Named(NamedKey::Save),
284            WinitNamedKey::ScanChannelsToggle => Key::Named(NamedKey::ScanChannelsToggle),
285            WinitNamedKey::ScreenModeNext => Key::Named(NamedKey::ScreenModeNext),
286            WinitNamedKey::ScrollLock => Key::Named(NamedKey::ScrollLock),
287            WinitNamedKey::Select => Key::Named(NamedKey::Select),
288            WinitNamedKey::Settings => Key::Named(NamedKey::Settings),
289            WinitNamedKey::Shift => Key::Named(NamedKey::Shift),
290            WinitNamedKey::SingleCandidate => Key::Named(NamedKey::SingleCandidate),
291            WinitNamedKey::Soft1 => Key::Named(NamedKey::Soft1),
292            WinitNamedKey::Soft2 => Key::Named(NamedKey::Soft2),
293            WinitNamedKey::Soft3 => Key::Named(NamedKey::Soft3),
294            WinitNamedKey::Soft4 => Key::Named(NamedKey::Soft4),
295            WinitNamedKey::Space => Key::Character(" ".to_string()),
296            WinitNamedKey::SpeechCorrectionList => Key::Named(NamedKey::SpeechCorrectionList),
297            WinitNamedKey::SpeechInputToggle => Key::Named(NamedKey::SpeechInputToggle),
298            WinitNamedKey::SpellCheck => Key::Named(NamedKey::SpellCheck),
299            WinitNamedKey::SplitScreenToggle => Key::Named(NamedKey::SplitScreenToggle),
300            WinitNamedKey::Standby => Key::Named(NamedKey::Standby),
301            WinitNamedKey::Subtitle => Key::Named(NamedKey::Subtitle),
302            WinitNamedKey::Super => Key::Named(NamedKey::Super),
303            WinitNamedKey::Symbol => Key::Named(NamedKey::Symbol),
304            WinitNamedKey::SymbolLock => Key::Named(NamedKey::SymbolLock),
305            WinitNamedKey::TV => Key::Named(NamedKey::TV),
306            WinitNamedKey::TV3DMode => Key::Named(NamedKey::TV3DMode),
307            WinitNamedKey::TVAntennaCable => Key::Named(NamedKey::TVAntennaCable),
308            WinitNamedKey::TVAudioDescription => Key::Named(NamedKey::TVAudioDescription),
309            WinitNamedKey::TVAudioDescriptionMixDown => {
310                Key::Named(NamedKey::TVAudioDescriptionMixDown)
311            },
312            WinitNamedKey::TVAudioDescriptionMixUp => Key::Named(NamedKey::TVAudioDescriptionMixUp),
313            WinitNamedKey::TVContentsMenu => Key::Named(NamedKey::TVContentsMenu),
314            WinitNamedKey::TVDataService => Key::Named(NamedKey::TVDataService),
315            WinitNamedKey::TVInput => Key::Named(NamedKey::TVInput),
316            WinitNamedKey::TVInputComponent1 => Key::Named(NamedKey::TVInputComponent1),
317            WinitNamedKey::TVInputComponent2 => Key::Named(NamedKey::TVInputComponent2),
318            WinitNamedKey::TVInputComposite1 => Key::Named(NamedKey::TVInputComposite1),
319            WinitNamedKey::TVInputComposite2 => Key::Named(NamedKey::TVInputComposite2),
320            WinitNamedKey::TVInputHDMI1 => Key::Named(NamedKey::TVInputHDMI1),
321            WinitNamedKey::TVInputHDMI2 => Key::Named(NamedKey::TVInputHDMI2),
322            WinitNamedKey::TVInputHDMI3 => Key::Named(NamedKey::TVInputHDMI3),
323            WinitNamedKey::TVInputHDMI4 => Key::Named(NamedKey::TVInputHDMI4),
324            WinitNamedKey::TVInputVGA1 => Key::Named(NamedKey::TVInputVGA1),
325            WinitNamedKey::TVMediaContext => Key::Named(NamedKey::TVMediaContext),
326            WinitNamedKey::TVNetwork => Key::Named(NamedKey::TVNetwork),
327            WinitNamedKey::TVNumberEntry => Key::Named(NamedKey::TVNumberEntry),
328            WinitNamedKey::TVPower => Key::Named(NamedKey::TVPower),
329            WinitNamedKey::TVRadioService => Key::Named(NamedKey::TVRadioService),
330            WinitNamedKey::TVSatellite => Key::Named(NamedKey::TVSatellite),
331            WinitNamedKey::TVSatelliteBS => Key::Named(NamedKey::TVSatelliteBS),
332            WinitNamedKey::TVSatelliteCS => Key::Named(NamedKey::TVSatelliteCS),
333            WinitNamedKey::TVSatelliteToggle => Key::Named(NamedKey::TVSatelliteToggle),
334            WinitNamedKey::TVTerrestrialAnalog => Key::Named(NamedKey::TVTerrestrialAnalog),
335            WinitNamedKey::TVTerrestrialDigital => Key::Named(NamedKey::TVTerrestrialDigital),
336            WinitNamedKey::TVTimer => Key::Named(NamedKey::TVTimer),
337            WinitNamedKey::Tab => Key::Named(NamedKey::Tab),
338            WinitNamedKey::Teletext => Key::Named(NamedKey::Teletext),
339            WinitNamedKey::Undo => Key::Named(NamedKey::Undo),
340            WinitNamedKey::VideoModeNext => Key::Named(NamedKey::VideoModeNext),
341            WinitNamedKey::VoiceDial => Key::Named(NamedKey::VoiceDial),
342            WinitNamedKey::WakeUp => Key::Named(NamedKey::WakeUp),
343            WinitNamedKey::Wink => Key::Named(NamedKey::Wink),
344            WinitNamedKey::Zenkaku => Key::Named(NamedKey::Zenkaku),
345            WinitNamedKey::ZenkakuHankaku => Key::Named(NamedKey::ZenkakuHankaku),
346            WinitNamedKey::ZoomIn => Key::Named(NamedKey::ZoomIn),
347            WinitNamedKey::ZoomOut => Key::Named(NamedKey::ZoomOut),
348            WinitNamedKey::ZoomToggle => Key::Named(NamedKey::ZoomToggle),
349            _ => Key::Named(NamedKey::Unidentified),
350        }
351    }
352}
353
354impl FromWinitKeyEvent for Location {
355    fn from_winit_key_event(key_event: &KeyEvent) -> Self {
356        match key_event.location {
357            WinitKeyLocation::Left => Location::Left,
358            WinitKeyLocation::Numpad => Location::Numpad,
359            WinitKeyLocation::Right => Location::Right,
360            WinitKeyLocation::Standard => Location::Standard,
361        }
362    }
363}
364
365#[allow(deprecated)]
366impl FromWinitKeyEvent for Code {
367    fn from_winit_key_event(key_event: &KeyEvent) -> Self {
368        let key_code = match key_event.physical_key {
369            PhysicalKey::Code(key_code) => key_code,
370            PhysicalKey::Unidentified(_os_code) => return Code::Unidentified,
371        };
372
373        match key_code {
374            KeyCode::Abort => Code::Abort,
375            KeyCode::Again => Code::Again,
376            KeyCode::AltLeft => Code::AltLeft,
377            KeyCode::AltRight => Code::AltRight,
378            KeyCode::ArrowDown => Code::ArrowDown,
379            KeyCode::ArrowLeft => Code::ArrowLeft,
380            KeyCode::ArrowRight => Code::ArrowRight,
381            KeyCode::ArrowUp => Code::ArrowUp,
382            KeyCode::AudioVolumeDown => Code::AudioVolumeDown,
383            KeyCode::AudioVolumeMute => Code::AudioVolumeMute,
384            KeyCode::AudioVolumeUp => Code::AudioVolumeUp,
385            KeyCode::Backquote => Code::Backquote,
386            KeyCode::Backslash => Code::Backslash,
387            KeyCode::Backspace => Code::Backspace,
388            KeyCode::BracketLeft => Code::BracketLeft,
389            KeyCode::BracketRight => Code::BracketRight,
390            KeyCode::BrowserBack => Code::BrowserBack,
391            KeyCode::BrowserFavorites => Code::BrowserFavorites,
392            KeyCode::BrowserForward => Code::BrowserForward,
393            KeyCode::BrowserHome => Code::BrowserHome,
394            KeyCode::BrowserRefresh => Code::BrowserRefresh,
395            KeyCode::BrowserSearch => Code::BrowserSearch,
396            KeyCode::BrowserStop => Code::BrowserStop,
397            KeyCode::CapsLock => Code::CapsLock,
398            KeyCode::Comma => Code::Comma,
399            KeyCode::ContextMenu => Code::ContextMenu,
400            KeyCode::ControlLeft => Code::ControlLeft,
401            KeyCode::ControlRight => Code::ControlRight,
402            KeyCode::Convert => Code::Convert,
403            KeyCode::Copy => Code::Copy,
404            KeyCode::Cut => Code::Cut,
405            KeyCode::Delete => Code::Delete,
406            KeyCode::Digit0 => Code::Digit0,
407            KeyCode::Digit1 => Code::Digit1,
408            KeyCode::Digit2 => Code::Digit2,
409            KeyCode::Digit3 => Code::Digit3,
410            KeyCode::Digit4 => Code::Digit4,
411            KeyCode::Digit5 => Code::Digit5,
412            KeyCode::Digit6 => Code::Digit6,
413            KeyCode::Digit7 => Code::Digit7,
414            KeyCode::Digit8 => Code::Digit8,
415            KeyCode::Digit9 => Code::Digit9,
416            KeyCode::Eject => Code::Eject,
417            KeyCode::End => Code::End,
418            KeyCode::Enter => Code::Enter,
419            KeyCode::Equal => Code::Equal,
420            KeyCode::Escape => Code::Escape,
421            KeyCode::F1 => Code::F1,
422            KeyCode::F10 => Code::F10,
423            KeyCode::F11 => Code::F11,
424            KeyCode::F12 => Code::F12,
425            KeyCode::F13 => Code::F13,
426            KeyCode::F14 => Code::F14,
427            KeyCode::F15 => Code::F15,
428            KeyCode::F16 => Code::F16,
429            KeyCode::F17 => Code::F17,
430            KeyCode::F18 => Code::F18,
431            KeyCode::F19 => Code::F19,
432            KeyCode::F2 => Code::F2,
433            KeyCode::F20 => Code::F20,
434            KeyCode::F21 => Code::F21,
435            KeyCode::F22 => Code::F22,
436            KeyCode::F23 => Code::F23,
437            KeyCode::F24 => Code::F24,
438            KeyCode::F25 => Code::F25,
439            KeyCode::F26 => Code::F26,
440            KeyCode::F27 => Code::F27,
441            KeyCode::F28 => Code::F28,
442            KeyCode::F29 => Code::F29,
443            KeyCode::F3 => Code::F3,
444            KeyCode::F30 => Code::F30,
445            KeyCode::F31 => Code::F31,
446            KeyCode::F32 => Code::F32,
447            KeyCode::F33 => Code::F33,
448            KeyCode::F34 => Code::F34,
449            KeyCode::F35 => Code::F35,
450            KeyCode::F4 => Code::F4,
451            KeyCode::F5 => Code::F5,
452            KeyCode::F6 => Code::F6,
453            KeyCode::F7 => Code::F7,
454            KeyCode::F8 => Code::F8,
455            KeyCode::F9 => Code::F9,
456            KeyCode::Find => Code::Find,
457            KeyCode::Fn => Code::Fn,
458            KeyCode::FnLock => Code::FnLock,
459            KeyCode::Help => Code::Help,
460            KeyCode::Hiragana => Code::Hiragana,
461            KeyCode::Home => Code::Home,
462            KeyCode::Hyper => Code::Hyper,
463            KeyCode::Insert => Code::Insert,
464            KeyCode::IntlBackslash => Code::IntlBackslash,
465            KeyCode::IntlRo => Code::IntlRo,
466            KeyCode::IntlYen => Code::IntlYen,
467            KeyCode::KanaMode => Code::KanaMode,
468            KeyCode::Katakana => Code::Katakana,
469            KeyCode::KeyA => Code::KeyA,
470            KeyCode::KeyB => Code::KeyB,
471            KeyCode::KeyC => Code::KeyC,
472            KeyCode::KeyD => Code::KeyD,
473            KeyCode::KeyE => Code::KeyE,
474            KeyCode::KeyF => Code::KeyF,
475            KeyCode::KeyG => Code::KeyG,
476            KeyCode::KeyH => Code::KeyH,
477            KeyCode::KeyI => Code::KeyI,
478            KeyCode::KeyJ => Code::KeyJ,
479            KeyCode::KeyK => Code::KeyK,
480            KeyCode::KeyL => Code::KeyL,
481            KeyCode::KeyM => Code::KeyM,
482            KeyCode::KeyN => Code::KeyN,
483            KeyCode::KeyO => Code::KeyO,
484            KeyCode::KeyP => Code::KeyP,
485            KeyCode::KeyQ => Code::KeyQ,
486            KeyCode::KeyR => Code::KeyR,
487            KeyCode::KeyS => Code::KeyS,
488            KeyCode::KeyT => Code::KeyT,
489            KeyCode::KeyU => Code::KeyU,
490            KeyCode::KeyV => Code::KeyV,
491            KeyCode::KeyW => Code::KeyW,
492            KeyCode::KeyX => Code::KeyX,
493            KeyCode::KeyY => Code::KeyY,
494            KeyCode::KeyZ => Code::KeyZ,
495            KeyCode::Lang1 => Code::Lang1,
496            KeyCode::Lang2 => Code::Lang2,
497            KeyCode::Lang3 => Code::Lang3,
498            KeyCode::Lang4 => Code::Lang4,
499            KeyCode::Lang5 => Code::Lang5,
500            KeyCode::LaunchApp1 => Code::LaunchApp1,
501            KeyCode::LaunchApp2 => Code::LaunchApp2,
502            KeyCode::LaunchMail => Code::LaunchMail,
503            KeyCode::MediaPlayPause => Code::MediaPlayPause,
504            KeyCode::MediaSelect => Code::MediaSelect,
505            KeyCode::MediaStop => Code::MediaStop,
506            KeyCode::MediaTrackNext => Code::MediaTrackNext,
507            KeyCode::MediaTrackPrevious => Code::MediaTrackPrevious,
508            KeyCode::Meta => Code::Super,
509            KeyCode::Minus => Code::Minus,
510            KeyCode::NonConvert => Code::NonConvert,
511            KeyCode::NumLock => Code::NumLock,
512            KeyCode::Numpad0 => Code::Numpad0,
513            KeyCode::Numpad1 => Code::Numpad1,
514            KeyCode::Numpad2 => Code::Numpad2,
515            KeyCode::Numpad3 => Code::Numpad3,
516            KeyCode::Numpad4 => Code::Numpad4,
517            KeyCode::Numpad5 => Code::Numpad5,
518            KeyCode::Numpad6 => Code::Numpad6,
519            KeyCode::Numpad7 => Code::Numpad7,
520            KeyCode::Numpad8 => Code::Numpad8,
521            KeyCode::Numpad9 => Code::Numpad9,
522            KeyCode::NumpadAdd => Code::NumpadAdd,
523            KeyCode::NumpadBackspace => Code::NumpadBackspace,
524            KeyCode::NumpadClear => Code::NumpadClear,
525            KeyCode::NumpadClearEntry => Code::NumpadClearEntry,
526            KeyCode::NumpadComma => Code::NumpadComma,
527            KeyCode::NumpadDecimal => Code::NumpadDecimal,
528            KeyCode::NumpadDivide => Code::NumpadDivide,
529            KeyCode::NumpadEnter => Code::NumpadEnter,
530            KeyCode::NumpadEqual => Code::NumpadEqual,
531            KeyCode::NumpadHash => Code::NumpadHash,
532            KeyCode::NumpadMemoryAdd => Code::NumpadMemoryAdd,
533            KeyCode::NumpadMemoryClear => Code::NumpadMemoryClear,
534            KeyCode::NumpadMemoryRecall => Code::NumpadMemoryRecall,
535            KeyCode::NumpadMemoryStore => Code::NumpadMemoryStore,
536            KeyCode::NumpadMemorySubtract => Code::NumpadMemorySubtract,
537            KeyCode::NumpadMultiply => Code::NumpadMultiply,
538            KeyCode::NumpadParenLeft => Code::NumpadParenLeft,
539            KeyCode::NumpadParenRight => Code::NumpadParenRight,
540            KeyCode::NumpadStar => Code::NumpadStar,
541            KeyCode::NumpadSubtract => Code::NumpadSubtract,
542            KeyCode::Open => Code::Open,
543            KeyCode::PageDown => Code::PageDown,
544            KeyCode::PageUp => Code::PageUp,
545            KeyCode::Paste => Code::Paste,
546            KeyCode::Pause => Code::Pause,
547            KeyCode::Period => Code::Period,
548            KeyCode::Power => Code::Power,
549            KeyCode::PrintScreen => Code::PrintScreen,
550            KeyCode::Props => Code::Props,
551            KeyCode::Quote => Code::Quote,
552            KeyCode::Resume => Code::Resume,
553            KeyCode::ScrollLock => Code::ScrollLock,
554            KeyCode::Select => Code::Select,
555            KeyCode::Semicolon => Code::Semicolon,
556            KeyCode::ShiftLeft => Code::ShiftLeft,
557            KeyCode::ShiftRight => Code::ShiftRight,
558            KeyCode::Slash => Code::Slash,
559            KeyCode::Sleep => Code::Sleep,
560            KeyCode::Space => Code::Space,
561            KeyCode::SuperLeft => Code::MetaLeft,
562            KeyCode::SuperRight => Code::MetaRight,
563            KeyCode::Suspend => Code::Suspend,
564            KeyCode::Tab => Code::Tab,
565            KeyCode::Turbo => Code::Turbo,
566            KeyCode::Undo => Code::Undo,
567            KeyCode::WakeUp => Code::WakeUp,
568            _ => Code::Unidentified,
569        }
570    }
571}
572
573impl FromWinitKeyEvent for KeyState {
574    fn from_winit_key_event(key_event: &KeyEvent) -> Self {
575        match key_event.state {
576            ElementState::Pressed => KeyState::Down,
577            ElementState::Released => KeyState::Up,
578        }
579    }
580}
581
582fn keyboard_modifiers_from_winit_modifiers(mods: ModifiersState) -> Modifiers {
583    let mut modifiers = Modifiers::empty();
584    modifiers.set(Modifiers::CONTROL, mods.control_key());
585    modifiers.set(Modifiers::SHIFT, mods.shift_key());
586    modifiers.set(Modifiers::ALT, mods.alt_key());
587    modifiers.set(Modifiers::META, mods.super_key());
588    modifiers
589}
590
591pub fn keyboard_event_from_winit(key_event: &KeyEvent, state: ModifiersState) -> KeyboardEvent {
592    KeyboardEvent::new_without_event(
593        KeyState::from_winit_key_event(key_event),
594        Key::from_winit_key_event(key_event),
595        Code::from_winit_key_event(key_event),
596        Location::from_winit_key_event(key_event),
597        keyboard_modifiers_from_winit_modifiers(state),
598        false,
599        false,
600    )
601}