1use 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#[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#[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}