easy_imgui_window/
conv.rs

1/*!
2* Helper module to convert between common types.
3*/
4
5use easy_imgui as imgui;
6use easy_imgui_sys::*;
7use winit::{
8    event::MouseButton,
9    keyboard::{KeyCode, PhysicalKey},
10    window::CursorIcon,
11};
12
13/// Convert a `winit` mouse button to the `imgui` one.
14pub fn to_imgui_button(btncode: MouseButton) -> Option<imgui::MouseButton> {
15    let btn = match btncode {
16        MouseButton::Left => imgui::MouseButton::Left,
17        MouseButton::Right => imgui::MouseButton::Right,
18        MouseButton::Middle => imgui::MouseButton::Middle,
19        MouseButton::Other(x) if x < ImGuiMouseButton_::ImGuiMouseButton_COUNT.0 as u16 => {
20            imgui::MouseButton::Other(x)
21        }
22        _ => return None,
23    };
24    Some(btn)
25}
26
27/// Convert an `winit` key to the `imgui` one.
28pub fn to_imgui_key(phys_key: PhysicalKey) -> Option<imgui::Key> {
29    let key = match phys_key {
30        PhysicalKey::Code(code) => match code {
31            KeyCode::Tab => imgui::Key::Tab,
32            KeyCode::ArrowLeft => imgui::Key::LeftArrow,
33            KeyCode::ArrowRight => imgui::Key::RightArrow,
34            KeyCode::ArrowUp => imgui::Key::UpArrow,
35            KeyCode::ArrowDown => imgui::Key::DownArrow,
36            KeyCode::PageUp => imgui::Key::PageUp,
37            KeyCode::PageDown => imgui::Key::PageDown,
38            KeyCode::Home => imgui::Key::Home,
39            KeyCode::End => imgui::Key::End,
40            KeyCode::Insert => imgui::Key::Insert,
41            KeyCode::Delete => imgui::Key::Delete,
42            KeyCode::Backspace => imgui::Key::Backspace,
43            KeyCode::Space => imgui::Key::Space,
44            KeyCode::Enter => imgui::Key::Enter,
45            KeyCode::Escape => imgui::Key::Escape,
46            KeyCode::ControlLeft => imgui::Key::LeftCtrl,
47            KeyCode::ShiftLeft => imgui::Key::LeftShift,
48            KeyCode::AltLeft => imgui::Key::LeftAlt,
49            KeyCode::SuperLeft => imgui::Key::LeftSuper,
50            KeyCode::ControlRight => imgui::Key::RightCtrl,
51            KeyCode::ShiftRight => imgui::Key::RightShift,
52            KeyCode::AltRight => imgui::Key::RightAlt,
53            KeyCode::SuperRight => imgui::Key::RightSuper,
54            KeyCode::Digit0 => imgui::Key::Num0,
55            KeyCode::Digit1 => imgui::Key::Num1,
56            KeyCode::Digit2 => imgui::Key::Num2,
57            KeyCode::Digit3 => imgui::Key::Num3,
58            KeyCode::Digit4 => imgui::Key::Num4,
59            KeyCode::Digit5 => imgui::Key::Num5,
60            KeyCode::Digit6 => imgui::Key::Num6,
61            KeyCode::Digit7 => imgui::Key::Num7,
62            KeyCode::Digit8 => imgui::Key::Num8,
63            KeyCode::Digit9 => imgui::Key::Num9,
64            KeyCode::KeyA => imgui::Key::A,
65            KeyCode::KeyB => imgui::Key::B,
66            KeyCode::KeyC => imgui::Key::C,
67            KeyCode::KeyD => imgui::Key::D,
68            KeyCode::KeyE => imgui::Key::E,
69            KeyCode::KeyF => imgui::Key::F,
70            KeyCode::KeyG => imgui::Key::G,
71            KeyCode::KeyH => imgui::Key::H,
72            KeyCode::KeyI => imgui::Key::I,
73            KeyCode::KeyJ => imgui::Key::J,
74            KeyCode::KeyK => imgui::Key::K,
75            KeyCode::KeyL => imgui::Key::L,
76            KeyCode::KeyM => imgui::Key::M,
77            KeyCode::KeyN => imgui::Key::N,
78            KeyCode::KeyO => imgui::Key::O,
79            KeyCode::KeyP => imgui::Key::P,
80            KeyCode::KeyQ => imgui::Key::Q,
81            KeyCode::KeyR => imgui::Key::R,
82            KeyCode::KeyS => imgui::Key::S,
83            KeyCode::KeyT => imgui::Key::T,
84            KeyCode::KeyU => imgui::Key::U,
85            KeyCode::KeyV => imgui::Key::V,
86            KeyCode::KeyW => imgui::Key::W,
87            KeyCode::KeyX => imgui::Key::X,
88            KeyCode::KeyY => imgui::Key::Y,
89            KeyCode::KeyZ => imgui::Key::Z,
90            KeyCode::F1 => imgui::Key::F1,
91            KeyCode::F2 => imgui::Key::F2,
92            KeyCode::F3 => imgui::Key::F3,
93            KeyCode::F4 => imgui::Key::F4,
94            KeyCode::F5 => imgui::Key::F5,
95            KeyCode::F6 => imgui::Key::F6,
96            KeyCode::F7 => imgui::Key::F7,
97            KeyCode::F8 => imgui::Key::F8,
98            KeyCode::F9 => imgui::Key::F9,
99            KeyCode::F10 => imgui::Key::F10,
100            KeyCode::F11 => imgui::Key::F11,
101            KeyCode::F12 => imgui::Key::F12,
102            KeyCode::Quote => imgui::Key::Apostrophe,
103            KeyCode::Comma => imgui::Key::Comma,
104            KeyCode::Minus => imgui::Key::Minus,
105            KeyCode::Period => imgui::Key::Period,
106            KeyCode::Slash => imgui::Key::Slash,
107            KeyCode::Semicolon => imgui::Key::Semicolon,
108            KeyCode::Equal => imgui::Key::Equal,
109            KeyCode::BracketLeft => imgui::Key::LeftBracket,
110            KeyCode::Backslash => imgui::Key::Backslash,
111            KeyCode::BracketRight => imgui::Key::RightBracket,
112            KeyCode::Backquote => imgui::Key::GraveAccent,
113            KeyCode::CapsLock => imgui::Key::CapsLock,
114            KeyCode::ScrollLock => imgui::Key::ScrollLock,
115            KeyCode::NumLock => imgui::Key::NumLock,
116            KeyCode::PrintScreen => imgui::Key::PrintScreen,
117            KeyCode::Pause => imgui::Key::Pause,
118            KeyCode::Numpad0 => imgui::Key::Keypad0,
119            KeyCode::Numpad1 => imgui::Key::Keypad1,
120            KeyCode::Numpad2 => imgui::Key::Keypad2,
121            KeyCode::Numpad3 => imgui::Key::Keypad3,
122            KeyCode::Numpad4 => imgui::Key::Keypad4,
123            KeyCode::Numpad5 => imgui::Key::Keypad5,
124            KeyCode::Numpad6 => imgui::Key::Keypad6,
125            KeyCode::Numpad7 => imgui::Key::Keypad7,
126            KeyCode::Numpad8 => imgui::Key::Keypad8,
127            KeyCode::Numpad9 => imgui::Key::Keypad9,
128            KeyCode::NumpadDecimal => imgui::Key::KeypadDecimal,
129            KeyCode::NumpadDivide => imgui::Key::KeypadDivide,
130            KeyCode::NumpadMultiply => imgui::Key::KeypadMultiply,
131            KeyCode::NumpadSubtract => imgui::Key::KeypadSubtract,
132            KeyCode::NumpadAdd => imgui::Key::KeypadAdd,
133            KeyCode::NumpadEnter => imgui::Key::KeypadEnter,
134            KeyCode::NumpadEqual => imgui::Key::KeypadEqual,
135            KeyCode::NumpadBackspace => imgui::Key::Backspace,
136            _ => return None,
137        },
138        PhysicalKey::Unidentified(_) => return None,
139    };
140    Some(key)
141}
142
143/// Convert a mouse cursor from the `imgui` enum to the `winit` one.
144pub fn from_imgui_cursor(cursor: imgui::MouseCursor) -> Option<CursorIcon> {
145    use CursorIcon::*;
146    let c = match cursor {
147        imgui::MouseCursor::Arrow => Default,
148        imgui::MouseCursor::TextInput => Text,
149        imgui::MouseCursor::ResizeAll => Move,
150        imgui::MouseCursor::ResizeNS => NsResize,
151        imgui::MouseCursor::ResizeEW => EwResize,
152        imgui::MouseCursor::ResizeNESW => NeswResize,
153        imgui::MouseCursor::ResizeNWSE => NwseResize,
154        imgui::MouseCursor::Hand => Pointer,
155        imgui::MouseCursor::NotAllowed => NotAllowed,
156        imgui::MouseCursor::None => return None,
157    };
158    Some(c)
159}