freya_winit/
winit_mappings.rs

1use freya_core::prelude::{
2    Force,
3    MouseButton,
4    TouchPhase,
5};
6use keyboard_types::Code;
7pub use keyboard_types::{
8    Key,
9    Modifiers,
10};
11
12pub fn map_winit_mouse_button(event: winit::event::MouseButton) -> MouseButton {
13    match event {
14        winit::event::MouseButton::Left => MouseButton::Left,
15        winit::event::MouseButton::Right => MouseButton::Right,
16        winit::event::MouseButton::Middle => MouseButton::Middle,
17        winit::event::MouseButton::Back => MouseButton::Back,
18        winit::event::MouseButton::Forward => MouseButton::Forward,
19        winit::event::MouseButton::Other(o) => MouseButton::Other(o),
20    }
21}
22
23// Return the equivalent of Winit `ModifiersState` in keyboard_types
24pub fn map_winit_modifiers(modifiers: winit::keyboard::ModifiersState) -> Modifiers {
25    let mut new_modifiers = Modifiers::empty();
26    if modifiers.alt_key() {
27        new_modifiers.toggle(Modifiers::ALT);
28    }
29    if modifiers.control_key() {
30        new_modifiers.toggle(Modifiers::CONTROL);
31    }
32    if modifiers.shift_key() {
33        new_modifiers.toggle(Modifiers::SHIFT);
34    }
35    if modifiers.super_key() {
36        new_modifiers.toggle(Modifiers::META);
37    }
38    new_modifiers
39}
40
41/// Return the equivalent Winit's `Key` in keyboard_types
42pub fn map_winit_key(key: &winit::keyboard::Key) -> Key {
43    match key {
44        winit::keyboard::Key::Character(c) => Key::Character(c.to_string()),
45        winit::keyboard::Key::Named(named_key) => match named_key {
46            winit::keyboard::NamedKey::Space => Key::Character(" ".to_string()),
47            winit::keyboard::NamedKey::Delete => Key::Delete,
48            winit::keyboard::NamedKey::Backspace => Key::Backspace,
49            winit::keyboard::NamedKey::ArrowDown => Key::ArrowDown,
50            winit::keyboard::NamedKey::ArrowLeft => Key::ArrowLeft,
51            winit::keyboard::NamedKey::ArrowRight => Key::ArrowRight,
52            winit::keyboard::NamedKey::ArrowUp => Key::ArrowUp,
53            winit::keyboard::NamedKey::End => Key::End,
54            winit::keyboard::NamedKey::Home => Key::Home,
55            winit::keyboard::NamedKey::PageDown => Key::PageDown,
56            winit::keyboard::NamedKey::PageUp => Key::PageUp,
57            winit::keyboard::NamedKey::Tab => Key::Tab,
58            winit::keyboard::NamedKey::Enter => Key::Enter,
59            winit::keyboard::NamedKey::Escape => Key::Escape,
60            winit::keyboard::NamedKey::F1 => Key::F1,
61            winit::keyboard::NamedKey::F2 => Key::F2,
62            winit::keyboard::NamedKey::F3 => Key::F3,
63            winit::keyboard::NamedKey::F4 => Key::F4,
64            winit::keyboard::NamedKey::F5 => Key::F5,
65            winit::keyboard::NamedKey::F6 => Key::F6,
66            winit::keyboard::NamedKey::F7 => Key::F7,
67            winit::keyboard::NamedKey::F8 => Key::F8,
68            winit::keyboard::NamedKey::F9 => Key::F9,
69            winit::keyboard::NamedKey::F10 => Key::F10,
70            winit::keyboard::NamedKey::F11 => Key::F11,
71            winit::keyboard::NamedKey::F12 => Key::F12,
72            winit::keyboard::NamedKey::F13 => Key::F13,
73            winit::keyboard::NamedKey::F14 => Key::F14,
74            winit::keyboard::NamedKey::F15 => Key::F15,
75            winit::keyboard::NamedKey::F16 => Key::F16,
76            winit::keyboard::NamedKey::F17 => Key::F17,
77            winit::keyboard::NamedKey::F18 => Key::F18,
78            winit::keyboard::NamedKey::F19 => Key::F19,
79            winit::keyboard::NamedKey::F20 => Key::F20,
80            winit::keyboard::NamedKey::F21 => Key::F21,
81            winit::keyboard::NamedKey::F22 => Key::F22,
82            winit::keyboard::NamedKey::F23 => Key::F23,
83            winit::keyboard::NamedKey::F24 => Key::F24,
84            winit::keyboard::NamedKey::Pause => Key::Pause,
85            winit::keyboard::NamedKey::Insert => Key::Insert,
86            winit::keyboard::NamedKey::ContextMenu => Key::ContextMenu,
87            winit::keyboard::NamedKey::BrowserBack => Key::BrowserBack,
88            winit::keyboard::NamedKey::BrowserFavorites => Key::BrowserFavorites,
89            winit::keyboard::NamedKey::BrowserForward => Key::BrowserForward,
90            winit::keyboard::NamedKey::BrowserHome => Key::BrowserHome,
91            winit::keyboard::NamedKey::BrowserRefresh => Key::BrowserRefresh,
92            winit::keyboard::NamedKey::BrowserSearch => Key::BrowserSearch,
93            winit::keyboard::NamedKey::BrowserStop => Key::BrowserStop,
94            winit::keyboard::NamedKey::MediaTrackNext => Key::MediaTrackNext,
95            winit::keyboard::NamedKey::MediaPlayPause => Key::MediaPlayPause,
96            winit::keyboard::NamedKey::MediaTrackPrevious => Key::MediaTrackPrevious,
97            winit::keyboard::NamedKey::MediaStop => Key::MediaStop,
98            winit::keyboard::NamedKey::AudioVolumeDown => Key::AudioVolumeDown,
99            winit::keyboard::NamedKey::AudioVolumeMute => Key::AudioVolumeMute,
100            winit::keyboard::NamedKey::AudioVolumeUp => Key::AudioVolumeUp,
101            winit::keyboard::NamedKey::LaunchApplication2 => Key::LaunchApplication2,
102            winit::keyboard::NamedKey::LaunchMail => Key::LaunchMail,
103            winit::keyboard::NamedKey::Convert => Key::Convert,
104            winit::keyboard::NamedKey::Alt => Key::Alt,
105            winit::keyboard::NamedKey::AltGraph => Key::AltGraph,
106            winit::keyboard::NamedKey::CapsLock => Key::CapsLock,
107            winit::keyboard::NamedKey::Control => Key::Control,
108            winit::keyboard::NamedKey::Fn => Key::Fn,
109            winit::keyboard::NamedKey::FnLock => Key::FnLock,
110            winit::keyboard::NamedKey::NumLock => Key::NumLock,
111            winit::keyboard::NamedKey::ScrollLock => Key::ScrollLock,
112            winit::keyboard::NamedKey::Shift => Key::Shift,
113            winit::keyboard::NamedKey::Symbol => Key::Symbol,
114            winit::keyboard::NamedKey::SymbolLock => Key::SymbolLock,
115            winit::keyboard::NamedKey::Meta => Key::Meta,
116            winit::keyboard::NamedKey::Hyper => Key::Hyper,
117            winit::keyboard::NamedKey::Super => Key::Super,
118            winit::keyboard::NamedKey::Clear => Key::Clear,
119            winit::keyboard::NamedKey::Copy => Key::Copy,
120            winit::keyboard::NamedKey::CrSel => Key::CrSel,
121            winit::keyboard::NamedKey::Cut => Key::Cut,
122            winit::keyboard::NamedKey::EraseEof => Key::EraseEof,
123            winit::keyboard::NamedKey::ExSel => Key::ExSel,
124            winit::keyboard::NamedKey::Paste => Key::Paste,
125            winit::keyboard::NamedKey::Redo => Key::Redo,
126            winit::keyboard::NamedKey::Undo => Key::Undo,
127            winit::keyboard::NamedKey::Accept => Key::Accept,
128            winit::keyboard::NamedKey::Again => Key::Again,
129            winit::keyboard::NamedKey::Attn => Key::Attn,
130            winit::keyboard::NamedKey::Cancel => Key::Cancel,
131            winit::keyboard::NamedKey::Execute => Key::Execute,
132            winit::keyboard::NamedKey::Find => Key::Find,
133            winit::keyboard::NamedKey::Help => Key::Help,
134            winit::keyboard::NamedKey::Play => Key::Play,
135            winit::keyboard::NamedKey::Props => Key::Props,
136            winit::keyboard::NamedKey::Select => Key::Select,
137            winit::keyboard::NamedKey::ZoomIn => Key::ZoomIn,
138            winit::keyboard::NamedKey::ZoomOut => Key::ZoomOut,
139            winit::keyboard::NamedKey::BrightnessDown => Key::BrightnessDown,
140            winit::keyboard::NamedKey::BrightnessUp => Key::BrightnessUp,
141            winit::keyboard::NamedKey::Eject => Key::Eject,
142            winit::keyboard::NamedKey::LogOff => Key::LogOff,
143            winit::keyboard::NamedKey::Power => Key::Power,
144            winit::keyboard::NamedKey::PowerOff => Key::PowerOff,
145            winit::keyboard::NamedKey::PrintScreen => Key::PrintScreen,
146            winit::keyboard::NamedKey::Hibernate => Key::Hibernate,
147            winit::keyboard::NamedKey::Standby => Key::Standby,
148            winit::keyboard::NamedKey::WakeUp => Key::WakeUp,
149            winit::keyboard::NamedKey::AllCandidates => Key::AllCandidates,
150            winit::keyboard::NamedKey::Alphanumeric => Key::Alphanumeric,
151            winit::keyboard::NamedKey::CodeInput => Key::CodeInput,
152            winit::keyboard::NamedKey::Compose => Key::Compose,
153            winit::keyboard::NamedKey::FinalMode => Key::FinalMode,
154            winit::keyboard::NamedKey::GroupFirst => Key::GroupFirst,
155            winit::keyboard::NamedKey::GroupLast => Key::GroupLast,
156            winit::keyboard::NamedKey::GroupNext => Key::GroupNext,
157            winit::keyboard::NamedKey::GroupPrevious => Key::GroupPrevious,
158            winit::keyboard::NamedKey::ModeChange => Key::ModeChange,
159            winit::keyboard::NamedKey::NextCandidate => Key::NextCandidate,
160            winit::keyboard::NamedKey::NonConvert => Key::NonConvert,
161            winit::keyboard::NamedKey::PreviousCandidate => Key::PreviousCandidate,
162            winit::keyboard::NamedKey::Process => Key::Process,
163            winit::keyboard::NamedKey::SingleCandidate => Key::SingleCandidate,
164            winit::keyboard::NamedKey::HangulMode => Key::HangulMode,
165            winit::keyboard::NamedKey::HanjaMode => Key::HanjaMode,
166            winit::keyboard::NamedKey::JunjaMode => Key::JunjaMode,
167            winit::keyboard::NamedKey::Eisu => Key::Eisu,
168            winit::keyboard::NamedKey::Hankaku => Key::Hankaku,
169            winit::keyboard::NamedKey::Hiragana => Key::Hiragana,
170            winit::keyboard::NamedKey::HiraganaKatakana => Key::HiraganaKatakana,
171            winit::keyboard::NamedKey::KanaMode => Key::KanaMode,
172            winit::keyboard::NamedKey::KanjiMode => Key::KanjiMode,
173            winit::keyboard::NamedKey::Katakana => Key::Katakana,
174            winit::keyboard::NamedKey::Romaji => Key::Romaji,
175            winit::keyboard::NamedKey::Zenkaku => Key::Zenkaku,
176            winit::keyboard::NamedKey::ZenkakuHankaku => Key::ZenkakuHankaku,
177            winit::keyboard::NamedKey::Soft1 => Key::Soft1,
178            winit::keyboard::NamedKey::Soft2 => Key::Soft2,
179            winit::keyboard::NamedKey::Soft3 => Key::Soft3,
180            winit::keyboard::NamedKey::Soft4 => Key::Soft4,
181            winit::keyboard::NamedKey::ChannelDown => Key::ChannelDown,
182            winit::keyboard::NamedKey::ChannelUp => Key::ChannelUp,
183            winit::keyboard::NamedKey::Close => Key::Close,
184            winit::keyboard::NamedKey::MailForward => Key::MailForward,
185            winit::keyboard::NamedKey::MailReply => Key::MailReply,
186            winit::keyboard::NamedKey::MailSend => Key::MailSend,
187            winit::keyboard::NamedKey::MediaClose => Key::MediaClose,
188            winit::keyboard::NamedKey::MediaFastForward => Key::MediaFastForward,
189            winit::keyboard::NamedKey::MediaPause => Key::MediaPause,
190            winit::keyboard::NamedKey::MediaPlay => Key::MediaPlay,
191            winit::keyboard::NamedKey::MediaRecord => Key::MediaRecord,
192            _ => Key::Unidentified,
193        },
194        _ => Key::Unidentified,
195    }
196}
197
198/// Return the equivalent of Winit's `PhysicalKey` in keyboard_types
199pub fn map_winit_physical_key(key: &winit::keyboard::PhysicalKey) -> Code {
200    if let winit::keyboard::PhysicalKey::Code(key) = key {
201        match key {
202            winit::keyboard::KeyCode::Digit1 => Code::Digit1,
203            winit::keyboard::KeyCode::Digit2 => Code::Digit2,
204            winit::keyboard::KeyCode::Digit3 => Code::Digit3,
205            winit::keyboard::KeyCode::Digit4 => Code::Digit4,
206            winit::keyboard::KeyCode::Digit5 => Code::Digit5,
207            winit::keyboard::KeyCode::Digit6 => Code::Digit6,
208            winit::keyboard::KeyCode::Digit7 => Code::Digit7,
209            winit::keyboard::KeyCode::Digit8 => Code::Digit8,
210            winit::keyboard::KeyCode::Digit9 => Code::Digit9,
211            winit::keyboard::KeyCode::Digit0 => Code::Digit0,
212            winit::keyboard::KeyCode::KeyA => Code::KeyA,
213            winit::keyboard::KeyCode::KeyB => Code::KeyB,
214            winit::keyboard::KeyCode::KeyC => Code::KeyC,
215            winit::keyboard::KeyCode::KeyD => Code::KeyD,
216            winit::keyboard::KeyCode::KeyE => Code::KeyE,
217            winit::keyboard::KeyCode::KeyF => Code::KeyF,
218            winit::keyboard::KeyCode::KeyG => Code::KeyG,
219            winit::keyboard::KeyCode::KeyH => Code::KeyH,
220            winit::keyboard::KeyCode::KeyI => Code::KeyI,
221            winit::keyboard::KeyCode::KeyJ => Code::KeyJ,
222            winit::keyboard::KeyCode::KeyK => Code::KeyK,
223            winit::keyboard::KeyCode::KeyL => Code::KeyL,
224            winit::keyboard::KeyCode::KeyM => Code::KeyM,
225            winit::keyboard::KeyCode::KeyN => Code::KeyN,
226            winit::keyboard::KeyCode::KeyO => Code::KeyO,
227            winit::keyboard::KeyCode::KeyP => Code::KeyP,
228            winit::keyboard::KeyCode::KeyQ => Code::KeyQ,
229            winit::keyboard::KeyCode::KeyR => Code::KeyR,
230            winit::keyboard::KeyCode::KeyS => Code::KeyS,
231            winit::keyboard::KeyCode::KeyT => Code::KeyT,
232            winit::keyboard::KeyCode::KeyU => Code::KeyU,
233            winit::keyboard::KeyCode::KeyV => Code::KeyV,
234            winit::keyboard::KeyCode::KeyW => Code::KeyW,
235            winit::keyboard::KeyCode::KeyX => Code::KeyX,
236            winit::keyboard::KeyCode::KeyY => Code::KeyY,
237            winit::keyboard::KeyCode::KeyZ => Code::KeyZ,
238            winit::keyboard::KeyCode::Escape => Code::Escape,
239            winit::keyboard::KeyCode::F1 => Code::F1,
240            winit::keyboard::KeyCode::F2 => Code::F2,
241            winit::keyboard::KeyCode::F3 => Code::F3,
242            winit::keyboard::KeyCode::F4 => Code::F4,
243            winit::keyboard::KeyCode::F5 => Code::F5,
244            winit::keyboard::KeyCode::F6 => Code::F6,
245            winit::keyboard::KeyCode::F7 => Code::F7,
246            winit::keyboard::KeyCode::F8 => Code::F8,
247            winit::keyboard::KeyCode::F9 => Code::F9,
248            winit::keyboard::KeyCode::F10 => Code::F10,
249            winit::keyboard::KeyCode::F11 => Code::F11,
250            winit::keyboard::KeyCode::F12 => Code::F12,
251            winit::keyboard::KeyCode::F13 => Code::F13,
252            winit::keyboard::KeyCode::F14 => Code::F14,
253            winit::keyboard::KeyCode::F15 => Code::F15,
254            winit::keyboard::KeyCode::F16 => Code::F16,
255            winit::keyboard::KeyCode::F17 => Code::F17,
256            winit::keyboard::KeyCode::F18 => Code::F18,
257            winit::keyboard::KeyCode::F19 => Code::F19,
258            winit::keyboard::KeyCode::F20 => Code::F20,
259            winit::keyboard::KeyCode::F21 => Code::F21,
260            winit::keyboard::KeyCode::F22 => Code::F22,
261            winit::keyboard::KeyCode::F23 => Code::F23,
262            winit::keyboard::KeyCode::F24 => Code::F24,
263            winit::keyboard::KeyCode::Pause => Code::Pause,
264            winit::keyboard::KeyCode::Insert => Code::Insert,
265            winit::keyboard::KeyCode::Home => Code::Home,
266            winit::keyboard::KeyCode::Delete => Code::Delete,
267            winit::keyboard::KeyCode::End => Code::End,
268            winit::keyboard::KeyCode::PageDown => Code::PageDown,
269            winit::keyboard::KeyCode::PageUp => Code::PageUp,
270            winit::keyboard::KeyCode::ArrowLeft => Code::ArrowLeft,
271            winit::keyboard::KeyCode::ArrowUp => Code::ArrowUp,
272            winit::keyboard::KeyCode::ArrowRight => Code::ArrowRight,
273            winit::keyboard::KeyCode::ArrowDown => Code::ArrowDown,
274            winit::keyboard::KeyCode::Backspace => Code::Backspace,
275            winit::keyboard::KeyCode::Enter => Code::Enter,
276            winit::keyboard::KeyCode::Space => Code::Space,
277            winit::keyboard::KeyCode::NumLock => Code::NumLock,
278            winit::keyboard::KeyCode::Numpad0 => Code::Numpad0,
279            winit::keyboard::KeyCode::Numpad1 => Code::Numpad1,
280            winit::keyboard::KeyCode::Numpad2 => Code::Numpad2,
281            winit::keyboard::KeyCode::Numpad3 => Code::Numpad3,
282            winit::keyboard::KeyCode::Numpad4 => Code::Numpad4,
283            winit::keyboard::KeyCode::Numpad5 => Code::Numpad5,
284            winit::keyboard::KeyCode::Numpad6 => Code::Numpad6,
285            winit::keyboard::KeyCode::Numpad7 => Code::Numpad7,
286            winit::keyboard::KeyCode::Numpad8 => Code::Numpad8,
287            winit::keyboard::KeyCode::Numpad9 => Code::Numpad9,
288            winit::keyboard::KeyCode::NumpadAdd => Code::NumpadAdd,
289            winit::keyboard::KeyCode::NumpadDivide => Code::NumpadDivide,
290            winit::keyboard::KeyCode::NumpadDecimal => Code::NumpadDecimal,
291            winit::keyboard::KeyCode::NumpadComma => Code::NumpadComma,
292            winit::keyboard::KeyCode::NumpadEnter => Code::NumpadEnter,
293            winit::keyboard::KeyCode::NumpadEqual => Code::NumpadEqual,
294            winit::keyboard::KeyCode::NumpadMultiply => Code::NumpadMultiply,
295            winit::keyboard::KeyCode::NumpadSubtract => Code::NumpadSubtract,
296            winit::keyboard::KeyCode::Backslash => Code::Backslash,
297            winit::keyboard::KeyCode::Comma => Code::Comma,
298            winit::keyboard::KeyCode::Convert => Code::Convert,
299            winit::keyboard::KeyCode::Equal => Code::Equal,
300            winit::keyboard::KeyCode::BracketLeft => Code::BracketLeft,
301            winit::keyboard::KeyCode::BracketRight => Code::BracketRight,
302            winit::keyboard::KeyCode::ShiftLeft => Code::ShiftLeft,
303            winit::keyboard::KeyCode::Meta => Code::MetaLeft,
304            winit::keyboard::KeyCode::MediaSelect => Code::MediaSelect,
305            winit::keyboard::KeyCode::MediaStop => Code::MediaStop,
306            winit::keyboard::KeyCode::Minus => Code::Minus,
307            winit::keyboard::KeyCode::Period => Code::Period,
308            winit::keyboard::KeyCode::Power => Code::Power,
309            winit::keyboard::KeyCode::AltRight => Code::AltRight,
310            winit::keyboard::KeyCode::ControlLeft => Code::ControlLeft,
311            winit::keyboard::KeyCode::ControlRight => Code::ControlRight,
312            winit::keyboard::KeyCode::ShiftRight => Code::ShiftRight,
313            winit::keyboard::KeyCode::Semicolon => Code::Semicolon,
314            winit::keyboard::KeyCode::Slash => Code::Slash,
315            winit::keyboard::KeyCode::Sleep => Code::Sleep,
316            winit::keyboard::KeyCode::Tab => Code::Tab,
317            winit::keyboard::KeyCode::AudioVolumeUp => Code::AudioVolumeUp,
318            winit::keyboard::KeyCode::IntlYen => Code::IntlYen,
319            winit::keyboard::KeyCode::Copy => Code::Copy,
320            winit::keyboard::KeyCode::Paste => Code::Paste,
321            winit::keyboard::KeyCode::Cut => Code::Cut,
322            _ => Code::Unidentified,
323        }
324    } else {
325        Code::Unidentified
326    }
327}
328
329pub fn map_winit_touch_phase(event: winit::event::TouchPhase) -> TouchPhase {
330    match event {
331        winit::event::TouchPhase::Started => TouchPhase::Started,
332        winit::event::TouchPhase::Moved => TouchPhase::Moved,
333        winit::event::TouchPhase::Ended => TouchPhase::Ended,
334        winit::event::TouchPhase::Cancelled => TouchPhase::Cancelled,
335    }
336}
337
338pub fn map_winit_touch_force(event: winit::event::Force) -> Force {
339    match event {
340        winit::event::Force::Calibrated {
341            force,
342            max_possible_force,
343            altitude_angle,
344        } => Force::Calibrated {
345            force,
346            max_possible_force,
347            altitude_angle,
348        },
349        winit::event::Force::Normalized(f) => Force::Normalized(f),
350    }
351}