Skip to main content

bevy_winit/
converters.rs

1//! Helpers for mapping between winit and bevy types
2use bevy_ecs::entity::Entity;
3use bevy_input::{
4    keyboard::{KeyCode, KeyboardInput, NativeKeyCode},
5    mouse::MouseButton,
6    touch::{ForceTouch, TouchInput, TouchPhase},
7    ButtonState,
8};
9use bevy_math::{CompassOctant, Vec2};
10use bevy_window::SystemCursorIcon;
11use bevy_window::{EnabledButtons, WindowLevel, WindowTheme};
12use winit::keyboard::{Key, NamedKey, NativeKey};
13
14#[cfg(target_os = "ios")]
15use bevy_window::ScreenEdge;
16
17/// Converts a [`winit::event::KeyEvent`] and a window [`Entity`] to a Bevy [`KeyboardInput`]
18pub fn convert_keyboard_input(
19    keyboard_input: &winit::event::KeyEvent,
20    window: Entity,
21) -> KeyboardInput {
22    KeyboardInput {
23        state: convert_element_state(keyboard_input.state),
24        key_code: convert_physical_key_code(keyboard_input.physical_key),
25        logical_key: convert_logical_key(&keyboard_input.logical_key),
26        text: keyboard_input.text.clone(),
27        repeat: keyboard_input.repeat,
28        window,
29    }
30}
31
32/// Converts a [`winit::event::ElementState`] to a Bevy [`ButtonState`]
33pub fn convert_element_state(element_state: winit::event::ElementState) -> ButtonState {
34    match element_state {
35        winit::event::ElementState::Pressed => ButtonState::Pressed,
36        winit::event::ElementState::Released => ButtonState::Released,
37    }
38}
39
40/// Converts a [`winit::event::MouseButton`] to a Bevy [`MouseButton`]
41pub fn convert_mouse_button(mouse_button: winit::event::MouseButton) -> MouseButton {
42    match mouse_button {
43        winit::event::MouseButton::Left => MouseButton::Left,
44        winit::event::MouseButton::Right => MouseButton::Right,
45        winit::event::MouseButton::Middle => MouseButton::Middle,
46        winit::event::MouseButton::Back => MouseButton::Back,
47        winit::event::MouseButton::Forward => MouseButton::Forward,
48        winit::event::MouseButton::Other(val) => MouseButton::Other(val),
49    }
50}
51
52/// Converts a [`winit::event::TouchPhase`] to a Bevy [`TouchPhase`].
53pub fn convert_touch_phase(phase: winit::event::TouchPhase) -> TouchPhase {
54    match phase {
55        winit::event::TouchPhase::Started => TouchPhase::Started,
56        winit::event::TouchPhase::Moved => TouchPhase::Moved,
57        winit::event::TouchPhase::Ended => TouchPhase::Ended,
58        winit::event::TouchPhase::Cancelled => TouchPhase::Canceled,
59    }
60}
61
62/// Converts a [`winit::event::Touch`], [`winit::dpi::LogicalPosition<f64>`] and window [`Entity`] to a Bevy [`TouchInput`]
63pub fn convert_touch_input(
64    touch_input: winit::event::Touch,
65    location: winit::dpi::LogicalPosition<f64>,
66    window_entity: Entity,
67) -> TouchInput {
68    TouchInput {
69        phase: convert_touch_phase(touch_input.phase),
70        position: Vec2::new(location.x as f32, location.y as f32),
71        window: window_entity,
72        force: touch_input.force.map(|f| match f {
73            winit::event::Force::Calibrated {
74                force,
75                max_possible_force,
76                altitude_angle,
77            } => ForceTouch::Calibrated {
78                force,
79                max_possible_force,
80                altitude_angle,
81            },
82            winit::event::Force::Normalized(x) => ForceTouch::Normalized(x),
83        }),
84        id: touch_input.id,
85    }
86}
87
88/// Converts a [`winit::keyboard::NativeKeyCode`] to a Bevy [`NativeKeyCode`]
89pub fn convert_physical_native_key_code(
90    native_key_code: winit::keyboard::NativeKeyCode,
91) -> NativeKeyCode {
92    match native_key_code {
93        winit::keyboard::NativeKeyCode::Unidentified => NativeKeyCode::Unidentified,
94        winit::keyboard::NativeKeyCode::Android(scan_code) => NativeKeyCode::Android(scan_code),
95        winit::keyboard::NativeKeyCode::MacOS(scan_code) => NativeKeyCode::MacOS(scan_code),
96        winit::keyboard::NativeKeyCode::Windows(scan_code) => NativeKeyCode::Windows(scan_code),
97        winit::keyboard::NativeKeyCode::Xkb(key_code) => NativeKeyCode::Xkb(key_code),
98    }
99}
100/// Converts a [`winit::keyboard::PhysicalKey`] to a Bevy [`KeyCode`]
101pub fn convert_physical_key_code(virtual_key_code: winit::keyboard::PhysicalKey) -> KeyCode {
102    match virtual_key_code {
103        winit::keyboard::PhysicalKey::Unidentified(native_key_code) => {
104            KeyCode::Unidentified(convert_physical_native_key_code(native_key_code))
105        }
106        winit::keyboard::PhysicalKey::Code(code) => match code {
107            winit::keyboard::KeyCode::Backquote => KeyCode::Backquote,
108            winit::keyboard::KeyCode::Backslash => KeyCode::Backslash,
109            winit::keyboard::KeyCode::BracketLeft => KeyCode::BracketLeft,
110            winit::keyboard::KeyCode::BracketRight => KeyCode::BracketRight,
111            winit::keyboard::KeyCode::Comma => KeyCode::Comma,
112            winit::keyboard::KeyCode::Digit0 => KeyCode::Digit0,
113            winit::keyboard::KeyCode::Digit1 => KeyCode::Digit1,
114            winit::keyboard::KeyCode::Digit2 => KeyCode::Digit2,
115            winit::keyboard::KeyCode::Digit3 => KeyCode::Digit3,
116            winit::keyboard::KeyCode::Digit4 => KeyCode::Digit4,
117            winit::keyboard::KeyCode::Digit5 => KeyCode::Digit5,
118            winit::keyboard::KeyCode::Digit6 => KeyCode::Digit6,
119            winit::keyboard::KeyCode::Digit7 => KeyCode::Digit7,
120            winit::keyboard::KeyCode::Digit8 => KeyCode::Digit8,
121            winit::keyboard::KeyCode::Digit9 => KeyCode::Digit9,
122            winit::keyboard::KeyCode::Equal => KeyCode::Equal,
123            winit::keyboard::KeyCode::IntlBackslash => KeyCode::IntlBackslash,
124            winit::keyboard::KeyCode::IntlRo => KeyCode::IntlRo,
125            winit::keyboard::KeyCode::IntlYen => KeyCode::IntlYen,
126            winit::keyboard::KeyCode::KeyA => KeyCode::KeyA,
127            winit::keyboard::KeyCode::KeyB => KeyCode::KeyB,
128            winit::keyboard::KeyCode::KeyC => KeyCode::KeyC,
129            winit::keyboard::KeyCode::KeyD => KeyCode::KeyD,
130            winit::keyboard::KeyCode::KeyE => KeyCode::KeyE,
131            winit::keyboard::KeyCode::KeyF => KeyCode::KeyF,
132            winit::keyboard::KeyCode::KeyG => KeyCode::KeyG,
133            winit::keyboard::KeyCode::KeyH => KeyCode::KeyH,
134            winit::keyboard::KeyCode::KeyI => KeyCode::KeyI,
135            winit::keyboard::KeyCode::KeyJ => KeyCode::KeyJ,
136            winit::keyboard::KeyCode::KeyK => KeyCode::KeyK,
137            winit::keyboard::KeyCode::KeyL => KeyCode::KeyL,
138            winit::keyboard::KeyCode::KeyM => KeyCode::KeyM,
139            winit::keyboard::KeyCode::KeyN => KeyCode::KeyN,
140            winit::keyboard::KeyCode::KeyO => KeyCode::KeyO,
141            winit::keyboard::KeyCode::KeyP => KeyCode::KeyP,
142            winit::keyboard::KeyCode::KeyQ => KeyCode::KeyQ,
143            winit::keyboard::KeyCode::KeyR => KeyCode::KeyR,
144            winit::keyboard::KeyCode::KeyS => KeyCode::KeyS,
145            winit::keyboard::KeyCode::KeyT => KeyCode::KeyT,
146            winit::keyboard::KeyCode::KeyU => KeyCode::KeyU,
147            winit::keyboard::KeyCode::KeyV => KeyCode::KeyV,
148            winit::keyboard::KeyCode::KeyW => KeyCode::KeyW,
149            winit::keyboard::KeyCode::KeyX => KeyCode::KeyX,
150            winit::keyboard::KeyCode::KeyY => KeyCode::KeyY,
151            winit::keyboard::KeyCode::KeyZ => KeyCode::KeyZ,
152            winit::keyboard::KeyCode::Minus => KeyCode::Minus,
153            winit::keyboard::KeyCode::Period => KeyCode::Period,
154            winit::keyboard::KeyCode::Quote => KeyCode::Quote,
155            winit::keyboard::KeyCode::Semicolon => KeyCode::Semicolon,
156            winit::keyboard::KeyCode::Slash => KeyCode::Slash,
157            winit::keyboard::KeyCode::AltLeft => KeyCode::AltLeft,
158            winit::keyboard::KeyCode::AltRight => KeyCode::AltRight,
159            winit::keyboard::KeyCode::Backspace => KeyCode::Backspace,
160            winit::keyboard::KeyCode::CapsLock => KeyCode::CapsLock,
161            winit::keyboard::KeyCode::ContextMenu => KeyCode::ContextMenu,
162            winit::keyboard::KeyCode::ControlLeft => KeyCode::ControlLeft,
163            winit::keyboard::KeyCode::ControlRight => KeyCode::ControlRight,
164            winit::keyboard::KeyCode::Enter => KeyCode::Enter,
165            winit::keyboard::KeyCode::SuperLeft => KeyCode::SuperLeft,
166            winit::keyboard::KeyCode::SuperRight => KeyCode::SuperRight,
167            winit::keyboard::KeyCode::ShiftLeft => KeyCode::ShiftLeft,
168            winit::keyboard::KeyCode::ShiftRight => KeyCode::ShiftRight,
169            winit::keyboard::KeyCode::Space => KeyCode::Space,
170            winit::keyboard::KeyCode::Tab => KeyCode::Tab,
171            winit::keyboard::KeyCode::Convert => KeyCode::Convert,
172            winit::keyboard::KeyCode::KanaMode => KeyCode::KanaMode,
173            winit::keyboard::KeyCode::Lang1 => KeyCode::Lang1,
174            winit::keyboard::KeyCode::Lang2 => KeyCode::Lang2,
175            winit::keyboard::KeyCode::Lang3 => KeyCode::Lang3,
176            winit::keyboard::KeyCode::Lang4 => KeyCode::Lang4,
177            winit::keyboard::KeyCode::Lang5 => KeyCode::Lang5,
178            winit::keyboard::KeyCode::NonConvert => KeyCode::NonConvert,
179            winit::keyboard::KeyCode::Delete => KeyCode::Delete,
180            winit::keyboard::KeyCode::End => KeyCode::End,
181            winit::keyboard::KeyCode::Help => KeyCode::Help,
182            winit::keyboard::KeyCode::Home => KeyCode::Home,
183            winit::keyboard::KeyCode::Insert => KeyCode::Insert,
184            winit::keyboard::KeyCode::PageDown => KeyCode::PageDown,
185            winit::keyboard::KeyCode::PageUp => KeyCode::PageUp,
186            winit::keyboard::KeyCode::ArrowDown => KeyCode::ArrowDown,
187            winit::keyboard::KeyCode::ArrowLeft => KeyCode::ArrowLeft,
188            winit::keyboard::KeyCode::ArrowRight => KeyCode::ArrowRight,
189            winit::keyboard::KeyCode::ArrowUp => KeyCode::ArrowUp,
190            winit::keyboard::KeyCode::NumLock => KeyCode::NumLock,
191            winit::keyboard::KeyCode::Numpad0 => KeyCode::Numpad0,
192            winit::keyboard::KeyCode::Numpad1 => KeyCode::Numpad1,
193            winit::keyboard::KeyCode::Numpad2 => KeyCode::Numpad2,
194            winit::keyboard::KeyCode::Numpad3 => KeyCode::Numpad3,
195            winit::keyboard::KeyCode::Numpad4 => KeyCode::Numpad4,
196            winit::keyboard::KeyCode::Numpad5 => KeyCode::Numpad5,
197            winit::keyboard::KeyCode::Numpad6 => KeyCode::Numpad6,
198            winit::keyboard::KeyCode::Numpad7 => KeyCode::Numpad7,
199            winit::keyboard::KeyCode::Numpad8 => KeyCode::Numpad8,
200            winit::keyboard::KeyCode::Numpad9 => KeyCode::Numpad9,
201            winit::keyboard::KeyCode::NumpadAdd => KeyCode::NumpadAdd,
202            winit::keyboard::KeyCode::NumpadBackspace => KeyCode::NumpadBackspace,
203            winit::keyboard::KeyCode::NumpadClear => KeyCode::NumpadClear,
204            winit::keyboard::KeyCode::NumpadClearEntry => KeyCode::NumpadClearEntry,
205            winit::keyboard::KeyCode::NumpadComma => KeyCode::NumpadComma,
206            winit::keyboard::KeyCode::NumpadDecimal => KeyCode::NumpadDecimal,
207            winit::keyboard::KeyCode::NumpadDivide => KeyCode::NumpadDivide,
208            winit::keyboard::KeyCode::NumpadEnter => KeyCode::NumpadEnter,
209            winit::keyboard::KeyCode::NumpadEqual => KeyCode::NumpadEqual,
210            winit::keyboard::KeyCode::NumpadHash => KeyCode::NumpadHash,
211            winit::keyboard::KeyCode::NumpadMemoryAdd => KeyCode::NumpadMemoryAdd,
212            winit::keyboard::KeyCode::NumpadMemoryClear => KeyCode::NumpadMemoryClear,
213            winit::keyboard::KeyCode::NumpadMemoryRecall => KeyCode::NumpadMemoryRecall,
214            winit::keyboard::KeyCode::NumpadMemoryStore => KeyCode::NumpadMemoryStore,
215            winit::keyboard::KeyCode::NumpadMemorySubtract => KeyCode::NumpadMemorySubtract,
216            winit::keyboard::KeyCode::NumpadMultiply => KeyCode::NumpadMultiply,
217            winit::keyboard::KeyCode::NumpadParenLeft => KeyCode::NumpadParenLeft,
218            winit::keyboard::KeyCode::NumpadParenRight => KeyCode::NumpadParenRight,
219            winit::keyboard::KeyCode::NumpadStar => KeyCode::NumpadStar,
220            winit::keyboard::KeyCode::NumpadSubtract => KeyCode::NumpadSubtract,
221            winit::keyboard::KeyCode::Escape => KeyCode::Escape,
222            winit::keyboard::KeyCode::Fn => KeyCode::Fn,
223            winit::keyboard::KeyCode::FnLock => KeyCode::FnLock,
224            winit::keyboard::KeyCode::PrintScreen => KeyCode::PrintScreen,
225            winit::keyboard::KeyCode::ScrollLock => KeyCode::ScrollLock,
226            winit::keyboard::KeyCode::Pause => KeyCode::Pause,
227            winit::keyboard::KeyCode::BrowserBack => KeyCode::BrowserBack,
228            winit::keyboard::KeyCode::BrowserFavorites => KeyCode::BrowserFavorites,
229            winit::keyboard::KeyCode::BrowserForward => KeyCode::BrowserForward,
230            winit::keyboard::KeyCode::BrowserHome => KeyCode::BrowserHome,
231            winit::keyboard::KeyCode::BrowserRefresh => KeyCode::BrowserRefresh,
232            winit::keyboard::KeyCode::BrowserSearch => KeyCode::BrowserSearch,
233            winit::keyboard::KeyCode::BrowserStop => KeyCode::BrowserStop,
234            winit::keyboard::KeyCode::Eject => KeyCode::Eject,
235            winit::keyboard::KeyCode::LaunchApp1 => KeyCode::LaunchApp1,
236            winit::keyboard::KeyCode::LaunchApp2 => KeyCode::LaunchApp2,
237            winit::keyboard::KeyCode::LaunchMail => KeyCode::LaunchMail,
238            winit::keyboard::KeyCode::MediaPlayPause => KeyCode::MediaPlayPause,
239            winit::keyboard::KeyCode::MediaSelect => KeyCode::MediaSelect,
240            winit::keyboard::KeyCode::MediaStop => KeyCode::MediaStop,
241            winit::keyboard::KeyCode::MediaTrackNext => KeyCode::MediaTrackNext,
242            winit::keyboard::KeyCode::MediaTrackPrevious => KeyCode::MediaTrackPrevious,
243            winit::keyboard::KeyCode::Power => KeyCode::Power,
244            winit::keyboard::KeyCode::Sleep => KeyCode::Sleep,
245            winit::keyboard::KeyCode::AudioVolumeDown => KeyCode::AudioVolumeDown,
246            winit::keyboard::KeyCode::AudioVolumeMute => KeyCode::AudioVolumeMute,
247            winit::keyboard::KeyCode::AudioVolumeUp => KeyCode::AudioVolumeUp,
248            winit::keyboard::KeyCode::WakeUp => KeyCode::WakeUp,
249            winit::keyboard::KeyCode::Meta => KeyCode::Meta,
250            winit::keyboard::KeyCode::Hyper => KeyCode::Hyper,
251            winit::keyboard::KeyCode::Turbo => KeyCode::Turbo,
252            winit::keyboard::KeyCode::Abort => KeyCode::Abort,
253            winit::keyboard::KeyCode::Resume => KeyCode::Resume,
254            winit::keyboard::KeyCode::Suspend => KeyCode::Suspend,
255            winit::keyboard::KeyCode::Again => KeyCode::Again,
256            winit::keyboard::KeyCode::Copy => KeyCode::Copy,
257            winit::keyboard::KeyCode::Cut => KeyCode::Cut,
258            winit::keyboard::KeyCode::Find => KeyCode::Find,
259            winit::keyboard::KeyCode::Open => KeyCode::Open,
260            winit::keyboard::KeyCode::Paste => KeyCode::Paste,
261            winit::keyboard::KeyCode::Props => KeyCode::Props,
262            winit::keyboard::KeyCode::Select => KeyCode::Select,
263            winit::keyboard::KeyCode::Undo => KeyCode::Undo,
264            winit::keyboard::KeyCode::Hiragana => KeyCode::Hiragana,
265            winit::keyboard::KeyCode::Katakana => KeyCode::Katakana,
266            winit::keyboard::KeyCode::F1 => KeyCode::F1,
267            winit::keyboard::KeyCode::F2 => KeyCode::F2,
268            winit::keyboard::KeyCode::F3 => KeyCode::F3,
269            winit::keyboard::KeyCode::F4 => KeyCode::F4,
270            winit::keyboard::KeyCode::F5 => KeyCode::F5,
271            winit::keyboard::KeyCode::F6 => KeyCode::F6,
272            winit::keyboard::KeyCode::F7 => KeyCode::F7,
273            winit::keyboard::KeyCode::F8 => KeyCode::F8,
274            winit::keyboard::KeyCode::F9 => KeyCode::F9,
275            winit::keyboard::KeyCode::F10 => KeyCode::F10,
276            winit::keyboard::KeyCode::F11 => KeyCode::F11,
277            winit::keyboard::KeyCode::F12 => KeyCode::F12,
278            winit::keyboard::KeyCode::F13 => KeyCode::F13,
279            winit::keyboard::KeyCode::F14 => KeyCode::F14,
280            winit::keyboard::KeyCode::F15 => KeyCode::F15,
281            winit::keyboard::KeyCode::F16 => KeyCode::F16,
282            winit::keyboard::KeyCode::F17 => KeyCode::F17,
283            winit::keyboard::KeyCode::F18 => KeyCode::F18,
284            winit::keyboard::KeyCode::F19 => KeyCode::F19,
285            winit::keyboard::KeyCode::F20 => KeyCode::F20,
286            winit::keyboard::KeyCode::F21 => KeyCode::F21,
287            winit::keyboard::KeyCode::F22 => KeyCode::F22,
288            winit::keyboard::KeyCode::F23 => KeyCode::F23,
289            winit::keyboard::KeyCode::F24 => KeyCode::F24,
290            winit::keyboard::KeyCode::F25 => KeyCode::F25,
291            winit::keyboard::KeyCode::F26 => KeyCode::F26,
292            winit::keyboard::KeyCode::F27 => KeyCode::F27,
293            winit::keyboard::KeyCode::F28 => KeyCode::F28,
294            winit::keyboard::KeyCode::F29 => KeyCode::F29,
295            winit::keyboard::KeyCode::F30 => KeyCode::F30,
296            winit::keyboard::KeyCode::F31 => KeyCode::F31,
297            winit::keyboard::KeyCode::F32 => KeyCode::F32,
298            winit::keyboard::KeyCode::F33 => KeyCode::F33,
299            winit::keyboard::KeyCode::F34 => KeyCode::F34,
300            winit::keyboard::KeyCode::F35 => KeyCode::F35,
301            _ => KeyCode::Unidentified(NativeKeyCode::Unidentified),
302        },
303    }
304}
305
306///Converts a [`winit::keyboard::Key`] to a Bevy [`bevy_input::keyboard::Key`]
307pub fn convert_logical_key(logical_key_code: &Key) -> bevy_input::keyboard::Key {
308    match logical_key_code {
309        Key::Character(s) => bevy_input::keyboard::Key::Character(s.clone()),
310        Key::Unidentified(nk) => bevy_input::keyboard::Key::Unidentified(convert_native_key(nk)),
311        Key::Dead(c) => bevy_input::keyboard::Key::Dead(c.to_owned()),
312        Key::Named(NamedKey::Alt) => bevy_input::keyboard::Key::Alt,
313        Key::Named(NamedKey::AltGraph) => bevy_input::keyboard::Key::AltGraph,
314        Key::Named(NamedKey::CapsLock) => bevy_input::keyboard::Key::CapsLock,
315        Key::Named(NamedKey::Control) => bevy_input::keyboard::Key::Control,
316        Key::Named(NamedKey::Fn) => bevy_input::keyboard::Key::Fn,
317        Key::Named(NamedKey::FnLock) => bevy_input::keyboard::Key::FnLock,
318        Key::Named(NamedKey::NumLock) => bevy_input::keyboard::Key::NumLock,
319        Key::Named(NamedKey::ScrollLock) => bevy_input::keyboard::Key::ScrollLock,
320        Key::Named(NamedKey::Shift) => bevy_input::keyboard::Key::Shift,
321        Key::Named(NamedKey::Symbol) => bevy_input::keyboard::Key::Symbol,
322        Key::Named(NamedKey::SymbolLock) => bevy_input::keyboard::Key::SymbolLock,
323        Key::Named(NamedKey::Meta) => bevy_input::keyboard::Key::Meta,
324        Key::Named(NamedKey::Hyper) => bevy_input::keyboard::Key::Hyper,
325        Key::Named(NamedKey::Super) => bevy_input::keyboard::Key::Super,
326        Key::Named(NamedKey::Enter) => bevy_input::keyboard::Key::Enter,
327        Key::Named(NamedKey::Tab) => bevy_input::keyboard::Key::Tab,
328        Key::Named(NamedKey::Space) => bevy_input::keyboard::Key::Space,
329        Key::Named(NamedKey::ArrowDown) => bevy_input::keyboard::Key::ArrowDown,
330        Key::Named(NamedKey::ArrowLeft) => bevy_input::keyboard::Key::ArrowLeft,
331        Key::Named(NamedKey::ArrowRight) => bevy_input::keyboard::Key::ArrowRight,
332        Key::Named(NamedKey::ArrowUp) => bevy_input::keyboard::Key::ArrowUp,
333        Key::Named(NamedKey::End) => bevy_input::keyboard::Key::End,
334        Key::Named(NamedKey::Home) => bevy_input::keyboard::Key::Home,
335        Key::Named(NamedKey::PageDown) => bevy_input::keyboard::Key::PageDown,
336        Key::Named(NamedKey::PageUp) => bevy_input::keyboard::Key::PageUp,
337        Key::Named(NamedKey::Backspace) => bevy_input::keyboard::Key::Backspace,
338        Key::Named(NamedKey::Clear) => bevy_input::keyboard::Key::Clear,
339        Key::Named(NamedKey::Copy) => bevy_input::keyboard::Key::Copy,
340        Key::Named(NamedKey::CrSel) => bevy_input::keyboard::Key::CrSel,
341        Key::Named(NamedKey::Cut) => bevy_input::keyboard::Key::Cut,
342        Key::Named(NamedKey::Delete) => bevy_input::keyboard::Key::Delete,
343        Key::Named(NamedKey::EraseEof) => bevy_input::keyboard::Key::EraseEof,
344        Key::Named(NamedKey::ExSel) => bevy_input::keyboard::Key::ExSel,
345        Key::Named(NamedKey::Insert) => bevy_input::keyboard::Key::Insert,
346        Key::Named(NamedKey::Paste) => bevy_input::keyboard::Key::Paste,
347        Key::Named(NamedKey::Redo) => bevy_input::keyboard::Key::Redo,
348        Key::Named(NamedKey::Undo) => bevy_input::keyboard::Key::Undo,
349        Key::Named(NamedKey::Accept) => bevy_input::keyboard::Key::Accept,
350        Key::Named(NamedKey::Again) => bevy_input::keyboard::Key::Again,
351        Key::Named(NamedKey::Attn) => bevy_input::keyboard::Key::Attn,
352        Key::Named(NamedKey::Cancel) => bevy_input::keyboard::Key::Cancel,
353        Key::Named(NamedKey::ContextMenu) => bevy_input::keyboard::Key::ContextMenu,
354        Key::Named(NamedKey::Escape) => bevy_input::keyboard::Key::Escape,
355        Key::Named(NamedKey::Execute) => bevy_input::keyboard::Key::Execute,
356        Key::Named(NamedKey::Find) => bevy_input::keyboard::Key::Find,
357        Key::Named(NamedKey::Help) => bevy_input::keyboard::Key::Help,
358        Key::Named(NamedKey::Pause) => bevy_input::keyboard::Key::Pause,
359        Key::Named(NamedKey::Play) => bevy_input::keyboard::Key::Play,
360        Key::Named(NamedKey::Props) => bevy_input::keyboard::Key::Props,
361        Key::Named(NamedKey::Select) => bevy_input::keyboard::Key::Select,
362        Key::Named(NamedKey::ZoomIn) => bevy_input::keyboard::Key::ZoomIn,
363        Key::Named(NamedKey::ZoomOut) => bevy_input::keyboard::Key::ZoomOut,
364        Key::Named(NamedKey::BrightnessDown) => bevy_input::keyboard::Key::BrightnessDown,
365        Key::Named(NamedKey::BrightnessUp) => bevy_input::keyboard::Key::BrightnessUp,
366        Key::Named(NamedKey::Eject) => bevy_input::keyboard::Key::Eject,
367        Key::Named(NamedKey::LogOff) => bevy_input::keyboard::Key::LogOff,
368        Key::Named(NamedKey::Power) => bevy_input::keyboard::Key::Power,
369        Key::Named(NamedKey::PowerOff) => bevy_input::keyboard::Key::PowerOff,
370        Key::Named(NamedKey::PrintScreen) => bevy_input::keyboard::Key::PrintScreen,
371        Key::Named(NamedKey::Hibernate) => bevy_input::keyboard::Key::Hibernate,
372        Key::Named(NamedKey::Standby) => bevy_input::keyboard::Key::Standby,
373        Key::Named(NamedKey::WakeUp) => bevy_input::keyboard::Key::WakeUp,
374        Key::Named(NamedKey::AllCandidates) => bevy_input::keyboard::Key::AllCandidates,
375        Key::Named(NamedKey::Alphanumeric) => bevy_input::keyboard::Key::Alphanumeric,
376        Key::Named(NamedKey::CodeInput) => bevy_input::keyboard::Key::CodeInput,
377        Key::Named(NamedKey::Compose) => bevy_input::keyboard::Key::Compose,
378        Key::Named(NamedKey::Convert) => bevy_input::keyboard::Key::Convert,
379        Key::Named(NamedKey::FinalMode) => bevy_input::keyboard::Key::FinalMode,
380        Key::Named(NamedKey::GroupFirst) => bevy_input::keyboard::Key::GroupFirst,
381        Key::Named(NamedKey::GroupLast) => bevy_input::keyboard::Key::GroupLast,
382        Key::Named(NamedKey::GroupNext) => bevy_input::keyboard::Key::GroupNext,
383        Key::Named(NamedKey::GroupPrevious) => bevy_input::keyboard::Key::GroupPrevious,
384        Key::Named(NamedKey::ModeChange) => bevy_input::keyboard::Key::ModeChange,
385        Key::Named(NamedKey::NextCandidate) => bevy_input::keyboard::Key::NextCandidate,
386        Key::Named(NamedKey::NonConvert) => bevy_input::keyboard::Key::NonConvert,
387        Key::Named(NamedKey::PreviousCandidate) => bevy_input::keyboard::Key::PreviousCandidate,
388        Key::Named(NamedKey::Process) => bevy_input::keyboard::Key::Process,
389        Key::Named(NamedKey::SingleCandidate) => bevy_input::keyboard::Key::SingleCandidate,
390        Key::Named(NamedKey::HangulMode) => bevy_input::keyboard::Key::HangulMode,
391        Key::Named(NamedKey::HanjaMode) => bevy_input::keyboard::Key::HanjaMode,
392        Key::Named(NamedKey::JunjaMode) => bevy_input::keyboard::Key::JunjaMode,
393        Key::Named(NamedKey::Eisu) => bevy_input::keyboard::Key::Eisu,
394        Key::Named(NamedKey::Hankaku) => bevy_input::keyboard::Key::Hankaku,
395        Key::Named(NamedKey::Hiragana) => bevy_input::keyboard::Key::Hiragana,
396        Key::Named(NamedKey::HiraganaKatakana) => bevy_input::keyboard::Key::HiraganaKatakana,
397        Key::Named(NamedKey::KanaMode) => bevy_input::keyboard::Key::KanaMode,
398        Key::Named(NamedKey::KanjiMode) => bevy_input::keyboard::Key::KanjiMode,
399        Key::Named(NamedKey::Katakana) => bevy_input::keyboard::Key::Katakana,
400        Key::Named(NamedKey::Romaji) => bevy_input::keyboard::Key::Romaji,
401        Key::Named(NamedKey::Zenkaku) => bevy_input::keyboard::Key::Zenkaku,
402        Key::Named(NamedKey::ZenkakuHankaku) => bevy_input::keyboard::Key::ZenkakuHankaku,
403        Key::Named(NamedKey::Soft1) => bevy_input::keyboard::Key::Soft1,
404        Key::Named(NamedKey::Soft2) => bevy_input::keyboard::Key::Soft2,
405        Key::Named(NamedKey::Soft3) => bevy_input::keyboard::Key::Soft3,
406        Key::Named(NamedKey::Soft4) => bevy_input::keyboard::Key::Soft4,
407        Key::Named(NamedKey::ChannelDown) => bevy_input::keyboard::Key::ChannelDown,
408        Key::Named(NamedKey::ChannelUp) => bevy_input::keyboard::Key::ChannelUp,
409        Key::Named(NamedKey::Close) => bevy_input::keyboard::Key::Close,
410        Key::Named(NamedKey::MailForward) => bevy_input::keyboard::Key::MailForward,
411        Key::Named(NamedKey::MailReply) => bevy_input::keyboard::Key::MailReply,
412        Key::Named(NamedKey::MailSend) => bevy_input::keyboard::Key::MailSend,
413        Key::Named(NamedKey::MediaClose) => bevy_input::keyboard::Key::MediaClose,
414        Key::Named(NamedKey::MediaFastForward) => bevy_input::keyboard::Key::MediaFastForward,
415        Key::Named(NamedKey::MediaPause) => bevy_input::keyboard::Key::MediaPause,
416        Key::Named(NamedKey::MediaPlay) => bevy_input::keyboard::Key::MediaPlay,
417        Key::Named(NamedKey::MediaPlayPause) => bevy_input::keyboard::Key::MediaPlayPause,
418        Key::Named(NamedKey::MediaRecord) => bevy_input::keyboard::Key::MediaRecord,
419        Key::Named(NamedKey::MediaRewind) => bevy_input::keyboard::Key::MediaRewind,
420        Key::Named(NamedKey::MediaStop) => bevy_input::keyboard::Key::MediaStop,
421        Key::Named(NamedKey::MediaTrackNext) => bevy_input::keyboard::Key::MediaTrackNext,
422        Key::Named(NamedKey::MediaTrackPrevious) => bevy_input::keyboard::Key::MediaTrackPrevious,
423        Key::Named(NamedKey::New) => bevy_input::keyboard::Key::New,
424        Key::Named(NamedKey::Open) => bevy_input::keyboard::Key::Open,
425        Key::Named(NamedKey::Print) => bevy_input::keyboard::Key::Print,
426        Key::Named(NamedKey::Save) => bevy_input::keyboard::Key::Save,
427        Key::Named(NamedKey::SpellCheck) => bevy_input::keyboard::Key::SpellCheck,
428        Key::Named(NamedKey::Key11) => bevy_input::keyboard::Key::Key11,
429        Key::Named(NamedKey::Key12) => bevy_input::keyboard::Key::Key12,
430        Key::Named(NamedKey::AudioBalanceLeft) => bevy_input::keyboard::Key::AudioBalanceLeft,
431        Key::Named(NamedKey::AudioBalanceRight) => bevy_input::keyboard::Key::AudioBalanceRight,
432        Key::Named(NamedKey::AudioBassBoostDown) => bevy_input::keyboard::Key::AudioBassBoostDown,
433        Key::Named(NamedKey::AudioBassBoostToggle) => {
434            bevy_input::keyboard::Key::AudioBassBoostToggle
435        }
436        Key::Named(NamedKey::AudioBassBoostUp) => bevy_input::keyboard::Key::AudioBassBoostUp,
437        Key::Named(NamedKey::AudioFaderFront) => bevy_input::keyboard::Key::AudioFaderFront,
438        Key::Named(NamedKey::AudioFaderRear) => bevy_input::keyboard::Key::AudioFaderRear,
439        Key::Named(NamedKey::AudioSurroundModeNext) => {
440            bevy_input::keyboard::Key::AudioSurroundModeNext
441        }
442        Key::Named(NamedKey::AudioTrebleDown) => bevy_input::keyboard::Key::AudioTrebleDown,
443        Key::Named(NamedKey::AudioTrebleUp) => bevy_input::keyboard::Key::AudioTrebleUp,
444        Key::Named(NamedKey::AudioVolumeDown) => bevy_input::keyboard::Key::AudioVolumeDown,
445        Key::Named(NamedKey::AudioVolumeUp) => bevy_input::keyboard::Key::AudioVolumeUp,
446        Key::Named(NamedKey::AudioVolumeMute) => bevy_input::keyboard::Key::AudioVolumeMute,
447        Key::Named(NamedKey::MicrophoneToggle) => bevy_input::keyboard::Key::MicrophoneToggle,
448        Key::Named(NamedKey::MicrophoneVolumeDown) => {
449            bevy_input::keyboard::Key::MicrophoneVolumeDown
450        }
451        Key::Named(NamedKey::MicrophoneVolumeUp) => bevy_input::keyboard::Key::MicrophoneVolumeUp,
452        Key::Named(NamedKey::MicrophoneVolumeMute) => {
453            bevy_input::keyboard::Key::MicrophoneVolumeMute
454        }
455        Key::Named(NamedKey::SpeechCorrectionList) => {
456            bevy_input::keyboard::Key::SpeechCorrectionList
457        }
458        Key::Named(NamedKey::SpeechInputToggle) => bevy_input::keyboard::Key::SpeechInputToggle,
459        Key::Named(NamedKey::LaunchApplication1) => bevy_input::keyboard::Key::LaunchApplication1,
460        Key::Named(NamedKey::LaunchApplication2) => bevy_input::keyboard::Key::LaunchApplication2,
461        Key::Named(NamedKey::LaunchCalendar) => bevy_input::keyboard::Key::LaunchCalendar,
462        Key::Named(NamedKey::LaunchContacts) => bevy_input::keyboard::Key::LaunchContacts,
463        Key::Named(NamedKey::LaunchMail) => bevy_input::keyboard::Key::LaunchMail,
464        Key::Named(NamedKey::LaunchMediaPlayer) => bevy_input::keyboard::Key::LaunchMediaPlayer,
465        Key::Named(NamedKey::LaunchMusicPlayer) => bevy_input::keyboard::Key::LaunchMusicPlayer,
466        Key::Named(NamedKey::LaunchPhone) => bevy_input::keyboard::Key::LaunchPhone,
467        Key::Named(NamedKey::LaunchScreenSaver) => bevy_input::keyboard::Key::LaunchScreenSaver,
468        Key::Named(NamedKey::LaunchSpreadsheet) => bevy_input::keyboard::Key::LaunchSpreadsheet,
469        Key::Named(NamedKey::LaunchWebBrowser) => bevy_input::keyboard::Key::LaunchWebBrowser,
470        Key::Named(NamedKey::LaunchWebCam) => bevy_input::keyboard::Key::LaunchWebCam,
471        Key::Named(NamedKey::LaunchWordProcessor) => bevy_input::keyboard::Key::LaunchWordProcessor,
472        Key::Named(NamedKey::BrowserBack) => bevy_input::keyboard::Key::BrowserBack,
473        Key::Named(NamedKey::BrowserFavorites) => bevy_input::keyboard::Key::BrowserFavorites,
474        Key::Named(NamedKey::BrowserForward) => bevy_input::keyboard::Key::BrowserForward,
475        Key::Named(NamedKey::BrowserHome) => bevy_input::keyboard::Key::BrowserHome,
476        Key::Named(NamedKey::BrowserRefresh) => bevy_input::keyboard::Key::BrowserRefresh,
477        Key::Named(NamedKey::BrowserSearch) => bevy_input::keyboard::Key::BrowserSearch,
478        Key::Named(NamedKey::BrowserStop) => bevy_input::keyboard::Key::BrowserStop,
479        Key::Named(NamedKey::AppSwitch) => bevy_input::keyboard::Key::AppSwitch,
480        Key::Named(NamedKey::Call) => bevy_input::keyboard::Key::Call,
481        Key::Named(NamedKey::Camera) => bevy_input::keyboard::Key::Camera,
482        Key::Named(NamedKey::CameraFocus) => bevy_input::keyboard::Key::CameraFocus,
483        Key::Named(NamedKey::EndCall) => bevy_input::keyboard::Key::EndCall,
484        Key::Named(NamedKey::GoBack) => bevy_input::keyboard::Key::GoBack,
485        Key::Named(NamedKey::GoHome) => bevy_input::keyboard::Key::GoHome,
486        Key::Named(NamedKey::HeadsetHook) => bevy_input::keyboard::Key::HeadsetHook,
487        Key::Named(NamedKey::LastNumberRedial) => bevy_input::keyboard::Key::LastNumberRedial,
488        Key::Named(NamedKey::Notification) => bevy_input::keyboard::Key::Notification,
489        Key::Named(NamedKey::MannerMode) => bevy_input::keyboard::Key::MannerMode,
490        Key::Named(NamedKey::VoiceDial) => bevy_input::keyboard::Key::VoiceDial,
491        Key::Named(NamedKey::TV) => bevy_input::keyboard::Key::TV,
492        Key::Named(NamedKey::TV3DMode) => bevy_input::keyboard::Key::TV3DMode,
493        Key::Named(NamedKey::TVAntennaCable) => bevy_input::keyboard::Key::TVAntennaCable,
494        Key::Named(NamedKey::TVAudioDescription) => bevy_input::keyboard::Key::TVAudioDescription,
495        Key::Named(NamedKey::TVAudioDescriptionMixDown) => {
496            bevy_input::keyboard::Key::TVAudioDescriptionMixDown
497        }
498        Key::Named(NamedKey::TVAudioDescriptionMixUp) => {
499            bevy_input::keyboard::Key::TVAudioDescriptionMixUp
500        }
501        Key::Named(NamedKey::TVContentsMenu) => bevy_input::keyboard::Key::TVContentsMenu,
502        Key::Named(NamedKey::TVDataService) => bevy_input::keyboard::Key::TVDataService,
503        Key::Named(NamedKey::TVInput) => bevy_input::keyboard::Key::TVInput,
504        Key::Named(NamedKey::TVInputComponent1) => bevy_input::keyboard::Key::TVInputComponent1,
505        Key::Named(NamedKey::TVInputComponent2) => bevy_input::keyboard::Key::TVInputComponent2,
506        Key::Named(NamedKey::TVInputComposite1) => bevy_input::keyboard::Key::TVInputComposite1,
507        Key::Named(NamedKey::TVInputComposite2) => bevy_input::keyboard::Key::TVInputComposite2,
508        Key::Named(NamedKey::TVInputHDMI1) => bevy_input::keyboard::Key::TVInputHDMI1,
509        Key::Named(NamedKey::TVInputHDMI2) => bevy_input::keyboard::Key::TVInputHDMI2,
510        Key::Named(NamedKey::TVInputHDMI3) => bevy_input::keyboard::Key::TVInputHDMI3,
511        Key::Named(NamedKey::TVInputHDMI4) => bevy_input::keyboard::Key::TVInputHDMI4,
512        Key::Named(NamedKey::TVInputVGA1) => bevy_input::keyboard::Key::TVInputVGA1,
513        Key::Named(NamedKey::TVMediaContext) => bevy_input::keyboard::Key::TVMediaContext,
514        Key::Named(NamedKey::TVNetwork) => bevy_input::keyboard::Key::TVNetwork,
515        Key::Named(NamedKey::TVNumberEntry) => bevy_input::keyboard::Key::TVNumberEntry,
516        Key::Named(NamedKey::TVPower) => bevy_input::keyboard::Key::TVPower,
517        Key::Named(NamedKey::TVRadioService) => bevy_input::keyboard::Key::TVRadioService,
518        Key::Named(NamedKey::TVSatellite) => bevy_input::keyboard::Key::TVSatellite,
519        Key::Named(NamedKey::TVSatelliteBS) => bevy_input::keyboard::Key::TVSatelliteBS,
520        Key::Named(NamedKey::TVSatelliteCS) => bevy_input::keyboard::Key::TVSatelliteCS,
521        Key::Named(NamedKey::TVSatelliteToggle) => bevy_input::keyboard::Key::TVSatelliteToggle,
522        Key::Named(NamedKey::TVTerrestrialAnalog) => bevy_input::keyboard::Key::TVTerrestrialAnalog,
523        Key::Named(NamedKey::TVTerrestrialDigital) => {
524            bevy_input::keyboard::Key::TVTerrestrialDigital
525        }
526        Key::Named(NamedKey::TVTimer) => bevy_input::keyboard::Key::TVTimer,
527        Key::Named(NamedKey::AVRInput) => bevy_input::keyboard::Key::AVRInput,
528        Key::Named(NamedKey::AVRPower) => bevy_input::keyboard::Key::AVRPower,
529        Key::Named(NamedKey::ColorF0Red) => bevy_input::keyboard::Key::ColorF0Red,
530        Key::Named(NamedKey::ColorF1Green) => bevy_input::keyboard::Key::ColorF1Green,
531        Key::Named(NamedKey::ColorF2Yellow) => bevy_input::keyboard::Key::ColorF2Yellow,
532        Key::Named(NamedKey::ColorF3Blue) => bevy_input::keyboard::Key::ColorF3Blue,
533        Key::Named(NamedKey::ColorF4Grey) => bevy_input::keyboard::Key::ColorF4Grey,
534        Key::Named(NamedKey::ColorF5Brown) => bevy_input::keyboard::Key::ColorF5Brown,
535        Key::Named(NamedKey::ClosedCaptionToggle) => bevy_input::keyboard::Key::ClosedCaptionToggle,
536        Key::Named(NamedKey::Dimmer) => bevy_input::keyboard::Key::Dimmer,
537        Key::Named(NamedKey::DisplaySwap) => bevy_input::keyboard::Key::DisplaySwap,
538        Key::Named(NamedKey::DVR) => bevy_input::keyboard::Key::DVR,
539        Key::Named(NamedKey::Exit) => bevy_input::keyboard::Key::Exit,
540        Key::Named(NamedKey::FavoriteClear0) => bevy_input::keyboard::Key::FavoriteClear0,
541        Key::Named(NamedKey::FavoriteClear1) => bevy_input::keyboard::Key::FavoriteClear1,
542        Key::Named(NamedKey::FavoriteClear2) => bevy_input::keyboard::Key::FavoriteClear2,
543        Key::Named(NamedKey::FavoriteClear3) => bevy_input::keyboard::Key::FavoriteClear3,
544        Key::Named(NamedKey::FavoriteRecall0) => bevy_input::keyboard::Key::FavoriteRecall0,
545        Key::Named(NamedKey::FavoriteRecall1) => bevy_input::keyboard::Key::FavoriteRecall1,
546        Key::Named(NamedKey::FavoriteRecall2) => bevy_input::keyboard::Key::FavoriteRecall2,
547        Key::Named(NamedKey::FavoriteRecall3) => bevy_input::keyboard::Key::FavoriteRecall3,
548        Key::Named(NamedKey::FavoriteStore0) => bevy_input::keyboard::Key::FavoriteStore0,
549        Key::Named(NamedKey::FavoriteStore1) => bevy_input::keyboard::Key::FavoriteStore1,
550        Key::Named(NamedKey::FavoriteStore2) => bevy_input::keyboard::Key::FavoriteStore2,
551        Key::Named(NamedKey::FavoriteStore3) => bevy_input::keyboard::Key::FavoriteStore3,
552        Key::Named(NamedKey::Guide) => bevy_input::keyboard::Key::Guide,
553        Key::Named(NamedKey::GuideNextDay) => bevy_input::keyboard::Key::GuideNextDay,
554        Key::Named(NamedKey::GuidePreviousDay) => bevy_input::keyboard::Key::GuidePreviousDay,
555        Key::Named(NamedKey::Info) => bevy_input::keyboard::Key::Info,
556        Key::Named(NamedKey::InstantReplay) => bevy_input::keyboard::Key::InstantReplay,
557        Key::Named(NamedKey::Link) => bevy_input::keyboard::Key::Link,
558        Key::Named(NamedKey::ListProgram) => bevy_input::keyboard::Key::ListProgram,
559        Key::Named(NamedKey::LiveContent) => bevy_input::keyboard::Key::LiveContent,
560        Key::Named(NamedKey::Lock) => bevy_input::keyboard::Key::Lock,
561        Key::Named(NamedKey::MediaApps) => bevy_input::keyboard::Key::MediaApps,
562        Key::Named(NamedKey::MediaAudioTrack) => bevy_input::keyboard::Key::MediaAudioTrack,
563        Key::Named(NamedKey::MediaLast) => bevy_input::keyboard::Key::MediaLast,
564        Key::Named(NamedKey::MediaSkipBackward) => bevy_input::keyboard::Key::MediaSkipBackward,
565        Key::Named(NamedKey::MediaSkipForward) => bevy_input::keyboard::Key::MediaSkipForward,
566        Key::Named(NamedKey::MediaStepBackward) => bevy_input::keyboard::Key::MediaStepBackward,
567        Key::Named(NamedKey::MediaStepForward) => bevy_input::keyboard::Key::MediaStepForward,
568        Key::Named(NamedKey::MediaTopMenu) => bevy_input::keyboard::Key::MediaTopMenu,
569        Key::Named(NamedKey::NavigateIn) => bevy_input::keyboard::Key::NavigateIn,
570        Key::Named(NamedKey::NavigateNext) => bevy_input::keyboard::Key::NavigateNext,
571        Key::Named(NamedKey::NavigateOut) => bevy_input::keyboard::Key::NavigateOut,
572        Key::Named(NamedKey::NavigatePrevious) => bevy_input::keyboard::Key::NavigatePrevious,
573        Key::Named(NamedKey::NextFavoriteChannel) => bevy_input::keyboard::Key::NextFavoriteChannel,
574        Key::Named(NamedKey::NextUserProfile) => bevy_input::keyboard::Key::NextUserProfile,
575        Key::Named(NamedKey::OnDemand) => bevy_input::keyboard::Key::OnDemand,
576        Key::Named(NamedKey::Pairing) => bevy_input::keyboard::Key::Pairing,
577        Key::Named(NamedKey::PinPDown) => bevy_input::keyboard::Key::PinPDown,
578        Key::Named(NamedKey::PinPMove) => bevy_input::keyboard::Key::PinPMove,
579        Key::Named(NamedKey::PinPToggle) => bevy_input::keyboard::Key::PinPToggle,
580        Key::Named(NamedKey::PinPUp) => bevy_input::keyboard::Key::PinPUp,
581        Key::Named(NamedKey::PlaySpeedDown) => bevy_input::keyboard::Key::PlaySpeedDown,
582        Key::Named(NamedKey::PlaySpeedReset) => bevy_input::keyboard::Key::PlaySpeedReset,
583        Key::Named(NamedKey::PlaySpeedUp) => bevy_input::keyboard::Key::PlaySpeedUp,
584        Key::Named(NamedKey::RandomToggle) => bevy_input::keyboard::Key::RandomToggle,
585        Key::Named(NamedKey::RcLowBattery) => bevy_input::keyboard::Key::RcLowBattery,
586        Key::Named(NamedKey::RecordSpeedNext) => bevy_input::keyboard::Key::RecordSpeedNext,
587        Key::Named(NamedKey::RfBypass) => bevy_input::keyboard::Key::RfBypass,
588        Key::Named(NamedKey::ScanChannelsToggle) => bevy_input::keyboard::Key::ScanChannelsToggle,
589        Key::Named(NamedKey::ScreenModeNext) => bevy_input::keyboard::Key::ScreenModeNext,
590        Key::Named(NamedKey::Settings) => bevy_input::keyboard::Key::Settings,
591        Key::Named(NamedKey::SplitScreenToggle) => bevy_input::keyboard::Key::SplitScreenToggle,
592        Key::Named(NamedKey::STBInput) => bevy_input::keyboard::Key::STBInput,
593        Key::Named(NamedKey::STBPower) => bevy_input::keyboard::Key::STBPower,
594        Key::Named(NamedKey::Subtitle) => bevy_input::keyboard::Key::Subtitle,
595        Key::Named(NamedKey::Teletext) => bevy_input::keyboard::Key::Teletext,
596        Key::Named(NamedKey::VideoModeNext) => bevy_input::keyboard::Key::VideoModeNext,
597        Key::Named(NamedKey::Wink) => bevy_input::keyboard::Key::Wink,
598        Key::Named(NamedKey::ZoomToggle) => bevy_input::keyboard::Key::ZoomToggle,
599        Key::Named(NamedKey::F1) => bevy_input::keyboard::Key::F1,
600        Key::Named(NamedKey::F2) => bevy_input::keyboard::Key::F2,
601        Key::Named(NamedKey::F3) => bevy_input::keyboard::Key::F3,
602        Key::Named(NamedKey::F4) => bevy_input::keyboard::Key::F4,
603        Key::Named(NamedKey::F5) => bevy_input::keyboard::Key::F5,
604        Key::Named(NamedKey::F6) => bevy_input::keyboard::Key::F6,
605        Key::Named(NamedKey::F7) => bevy_input::keyboard::Key::F7,
606        Key::Named(NamedKey::F8) => bevy_input::keyboard::Key::F8,
607        Key::Named(NamedKey::F9) => bevy_input::keyboard::Key::F9,
608        Key::Named(NamedKey::F10) => bevy_input::keyboard::Key::F10,
609        Key::Named(NamedKey::F11) => bevy_input::keyboard::Key::F11,
610        Key::Named(NamedKey::F12) => bevy_input::keyboard::Key::F12,
611        Key::Named(NamedKey::F13) => bevy_input::keyboard::Key::F13,
612        Key::Named(NamedKey::F14) => bevy_input::keyboard::Key::F14,
613        Key::Named(NamedKey::F15) => bevy_input::keyboard::Key::F15,
614        Key::Named(NamedKey::F16) => bevy_input::keyboard::Key::F16,
615        Key::Named(NamedKey::F17) => bevy_input::keyboard::Key::F17,
616        Key::Named(NamedKey::F18) => bevy_input::keyboard::Key::F18,
617        Key::Named(NamedKey::F19) => bevy_input::keyboard::Key::F19,
618        Key::Named(NamedKey::F20) => bevy_input::keyboard::Key::F20,
619        Key::Named(NamedKey::F21) => bevy_input::keyboard::Key::F21,
620        Key::Named(NamedKey::F22) => bevy_input::keyboard::Key::F22,
621        Key::Named(NamedKey::F23) => bevy_input::keyboard::Key::F23,
622        Key::Named(NamedKey::F24) => bevy_input::keyboard::Key::F24,
623        Key::Named(NamedKey::F25) => bevy_input::keyboard::Key::F25,
624        Key::Named(NamedKey::F26) => bevy_input::keyboard::Key::F26,
625        Key::Named(NamedKey::F27) => bevy_input::keyboard::Key::F27,
626        Key::Named(NamedKey::F28) => bevy_input::keyboard::Key::F28,
627        Key::Named(NamedKey::F29) => bevy_input::keyboard::Key::F29,
628        Key::Named(NamedKey::F30) => bevy_input::keyboard::Key::F30,
629        Key::Named(NamedKey::F31) => bevy_input::keyboard::Key::F31,
630        Key::Named(NamedKey::F32) => bevy_input::keyboard::Key::F32,
631        Key::Named(NamedKey::F33) => bevy_input::keyboard::Key::F33,
632        Key::Named(NamedKey::F34) => bevy_input::keyboard::Key::F34,
633        Key::Named(NamedKey::F35) => bevy_input::keyboard::Key::F35,
634        _ => todo!(),
635    }
636}
637
638///Converts a [`winit::keyboard::NativeKey`] to a Bevy [`NativeKey`](bevy_input::keyboard::NativeKey)
639pub fn convert_native_key(native_key: &NativeKey) -> bevy_input::keyboard::NativeKey {
640    match native_key {
641        NativeKey::Unidentified => bevy_input::keyboard::NativeKey::Unidentified,
642        NativeKey::Android(v) => bevy_input::keyboard::NativeKey::Android(*v),
643        NativeKey::MacOS(v) => bevy_input::keyboard::NativeKey::MacOS(*v),
644        NativeKey::Windows(v) => bevy_input::keyboard::NativeKey::Windows(*v),
645        NativeKey::Xkb(v) => bevy_input::keyboard::NativeKey::Xkb(*v),
646        NativeKey::Web(v) => bevy_input::keyboard::NativeKey::Web(v.clone()),
647    }
648}
649
650/// Converts a Bevy [`SystemCursorIcon`] to a [`winit::window::CursorIcon`].
651pub fn convert_system_cursor_icon(cursor_icon: SystemCursorIcon) -> winit::window::CursorIcon {
652    match cursor_icon {
653        SystemCursorIcon::Crosshair => winit::window::CursorIcon::Crosshair,
654        SystemCursorIcon::Pointer => winit::window::CursorIcon::Pointer,
655        SystemCursorIcon::Move => winit::window::CursorIcon::Move,
656        SystemCursorIcon::Text => winit::window::CursorIcon::Text,
657        SystemCursorIcon::Wait => winit::window::CursorIcon::Wait,
658        SystemCursorIcon::Help => winit::window::CursorIcon::Help,
659        SystemCursorIcon::Progress => winit::window::CursorIcon::Progress,
660        SystemCursorIcon::NotAllowed => winit::window::CursorIcon::NotAllowed,
661        SystemCursorIcon::ContextMenu => winit::window::CursorIcon::ContextMenu,
662        SystemCursorIcon::Cell => winit::window::CursorIcon::Cell,
663        SystemCursorIcon::VerticalText => winit::window::CursorIcon::VerticalText,
664        SystemCursorIcon::Alias => winit::window::CursorIcon::Alias,
665        SystemCursorIcon::Copy => winit::window::CursorIcon::Copy,
666        SystemCursorIcon::NoDrop => winit::window::CursorIcon::NoDrop,
667        SystemCursorIcon::Grab => winit::window::CursorIcon::Grab,
668        SystemCursorIcon::Grabbing => winit::window::CursorIcon::Grabbing,
669        SystemCursorIcon::AllScroll => winit::window::CursorIcon::AllScroll,
670        SystemCursorIcon::ZoomIn => winit::window::CursorIcon::ZoomIn,
671        SystemCursorIcon::ZoomOut => winit::window::CursorIcon::ZoomOut,
672        SystemCursorIcon::EResize => winit::window::CursorIcon::EResize,
673        SystemCursorIcon::NResize => winit::window::CursorIcon::NResize,
674        SystemCursorIcon::NeResize => winit::window::CursorIcon::NeResize,
675        SystemCursorIcon::NwResize => winit::window::CursorIcon::NwResize,
676        SystemCursorIcon::SResize => winit::window::CursorIcon::SResize,
677        SystemCursorIcon::SeResize => winit::window::CursorIcon::SeResize,
678        SystemCursorIcon::SwResize => winit::window::CursorIcon::SwResize,
679        SystemCursorIcon::WResize => winit::window::CursorIcon::WResize,
680        SystemCursorIcon::EwResize => winit::window::CursorIcon::EwResize,
681        SystemCursorIcon::NsResize => winit::window::CursorIcon::NsResize,
682        SystemCursorIcon::NeswResize => winit::window::CursorIcon::NeswResize,
683        SystemCursorIcon::NwseResize => winit::window::CursorIcon::NwseResize,
684        SystemCursorIcon::ColResize => winit::window::CursorIcon::ColResize,
685        SystemCursorIcon::RowResize => winit::window::CursorIcon::RowResize,
686        _ => winit::window::CursorIcon::Default,
687    }
688}
689
690/// Converts a Bevy [`WindowLevel`] to a [`winit::window::WindowLevel`]
691pub fn convert_window_level(window_level: WindowLevel) -> winit::window::WindowLevel {
692    match window_level {
693        WindowLevel::AlwaysOnBottom => winit::window::WindowLevel::AlwaysOnBottom,
694        WindowLevel::Normal => winit::window::WindowLevel::Normal,
695        WindowLevel::AlwaysOnTop => winit::window::WindowLevel::AlwaysOnTop,
696    }
697}
698
699/// Converts a [`winit::window::Theme`] to a Bevy [`WindowTheme`]
700pub fn convert_winit_theme(theme: winit::window::Theme) -> WindowTheme {
701    match theme {
702        winit::window::Theme::Light => WindowTheme::Light,
703        winit::window::Theme::Dark => WindowTheme::Dark,
704    }
705}
706
707/// Converts a Bevy [`WindowTheme`] to a [`winit::window::Theme`]
708pub fn convert_window_theme(theme: WindowTheme) -> winit::window::Theme {
709    match theme {
710        WindowTheme::Light => winit::window::Theme::Light,
711        WindowTheme::Dark => winit::window::Theme::Dark,
712    }
713}
714
715/// Converts a Bevy [`EnabledButtons`] to a [`winit::window::WindowButtons`]
716pub fn convert_enabled_buttons(enabled_buttons: EnabledButtons) -> winit::window::WindowButtons {
717    let mut window_buttons = winit::window::WindowButtons::empty();
718    if enabled_buttons.minimize {
719        window_buttons.insert(winit::window::WindowButtons::MINIMIZE);
720    }
721    if enabled_buttons.maximize {
722        window_buttons.insert(winit::window::WindowButtons::MAXIMIZE);
723    }
724    if enabled_buttons.close {
725        window_buttons.insert(winit::window::WindowButtons::CLOSE);
726    }
727    window_buttons
728}
729
730/// Converts a Bevy [`CompassOctant`] to a [`winit::window::ResizeDirection`]
731pub fn convert_resize_direction(resize_direction: CompassOctant) -> winit::window::ResizeDirection {
732    match resize_direction {
733        CompassOctant::West => winit::window::ResizeDirection::West,
734        CompassOctant::North => winit::window::ResizeDirection::North,
735        CompassOctant::East => winit::window::ResizeDirection::East,
736        CompassOctant::South => winit::window::ResizeDirection::South,
737        CompassOctant::NorthWest => winit::window::ResizeDirection::NorthWest,
738        CompassOctant::NorthEast => winit::window::ResizeDirection::NorthEast,
739        CompassOctant::SouthWest => winit::window::ResizeDirection::SouthWest,
740        CompassOctant::SouthEast => winit::window::ResizeDirection::SouthEast,
741    }
742}
743
744#[cfg(target_os = "ios")]
745/// Converts a [`bevy_window::ScreenEdge`] to a [`winit::platform::ios::ScreenEdge`].
746pub(crate) fn convert_screen_edge(edge: ScreenEdge) -> winit::platform::ios::ScreenEdge {
747    match edge {
748        ScreenEdge::None => winit::platform::ios::ScreenEdge::NONE,
749        ScreenEdge::Top => winit::platform::ios::ScreenEdge::TOP,
750        ScreenEdge::Bottom => winit::platform::ios::ScreenEdge::BOTTOM,
751        ScreenEdge::Left => winit::platform::ios::ScreenEdge::LEFT,
752        ScreenEdge::Right => winit::platform::ios::ScreenEdge::RIGHT,
753        ScreenEdge::All => winit::platform::ios::ScreenEdge::ALL,
754    }
755}