Added full keymap to winit backend, fixed keyboard example

This commit is contained in:
Robin 2022-12-21 20:18:16 +01:00
parent e51af80da7
commit 2d9efba59b
2 changed files with 86 additions and 12 deletions

View File

@ -116,8 +116,7 @@ fn main() {
// `winit::VirtualKeyCode`. So we can query if a key
// is down based on it's virtual key code,
let home_key_idx = 65; // Hardcoded for imgui-examples only, instead use `winit::event::VirtualKeyCode::Home`
if ui.io().keys_down[home_key_idx as usize] {
if ui.is_key_down(Key::Home) {
home_counter += 1;
}
ui.text(format!("Home has been pressed for {} frames", home_counter));
@ -134,7 +133,7 @@ fn main() {
// with arbitrary key indexes. For example, to check
// if the F1 key is been pressed
if ui.is_key_index_released(37) {
if ui.is_key_released(Key::F1) {
// Index is hardcoded for imgui-examples only, instead do this:
//if ui.is_key_index_released(winit::event::VirtualKeyCode::F1 as i32) {
f1_release_count += 1;

View File

@ -220,21 +220,96 @@ fn to_imgui_key(keycode: VirtualKeyCode) -> Option<Key> {
VirtualKeyCode::Space => Some(Key::Space),
VirtualKeyCode::Return => Some(Key::Enter),
VirtualKeyCode::Escape => Some(Key::Escape),
VirtualKeyCode::NumpadEnter => Some(Key::KeypadEnter),
VirtualKeyCode::LControl => Some(Key::LeftCtrl),
VirtualKeyCode::LShift => Some(Key::LeftShift),
VirtualKeyCode::LAlt => Some(Key::LeftAlt),
VirtualKeyCode::LWin => Some(Key::LeftSuper),
VirtualKeyCode::RControl => Some(Key::RightCtrl),
VirtualKeyCode::RShift => Some(Key::RightShift),
VirtualKeyCode::RAlt => Some(Key::RightAlt),
VirtualKeyCode::RWin => Some(Key::RightSuper),
//VirtualKeyCode::Menu => Some(Key::Menu), // TODO: find out if there is a Menu key in winit
VirtualKeyCode::Key0 => Some(Key::Alpha0),
VirtualKeyCode::Key1 => Some(Key::Alpha1),
VirtualKeyCode::Key2 => Some(Key::Alpha2),
VirtualKeyCode::Key3 => Some(Key::Alpha3),
VirtualKeyCode::Key4 => Some(Key::Alpha4),
VirtualKeyCode::Key5 => Some(Key::Alpha5),
VirtualKeyCode::Key6 => Some(Key::Alpha6),
VirtualKeyCode::Key7 => Some(Key::Alpha7),
VirtualKeyCode::Key8 => Some(Key::Alpha8),
VirtualKeyCode::Key9 => Some(Key::Alpha9),
VirtualKeyCode::A => Some(Key::A),
VirtualKeyCode::B => Some(Key::B),
VirtualKeyCode::C => Some(Key::C),
VirtualKeyCode::D => Some(Key::D),
VirtualKeyCode::E => Some(Key::E),
VirtualKeyCode::F => Some(Key::F),
VirtualKeyCode::G => Some(Key::G),
VirtualKeyCode::H => Some(Key::H),
VirtualKeyCode::I => Some(Key::I),
VirtualKeyCode::J => Some(Key::J),
VirtualKeyCode::K => Some(Key::K),
VirtualKeyCode::L => Some(Key::L),
VirtualKeyCode::M => Some(Key::M),
VirtualKeyCode::N => Some(Key::N),
VirtualKeyCode::O => Some(Key::O),
VirtualKeyCode::P => Some(Key::P),
VirtualKeyCode::Q => Some(Key::Q),
VirtualKeyCode::R => Some(Key::R),
VirtualKeyCode::S => Some(Key::S),
VirtualKeyCode::T => Some(Key::T),
VirtualKeyCode::U => Some(Key::U),
VirtualKeyCode::V => Some(Key::V),
VirtualKeyCode::W => Some(Key::W),
VirtualKeyCode::X => Some(Key::X),
VirtualKeyCode::Y => Some(Key::Y),
VirtualKeyCode::Z => Some(Key::Z),
VirtualKeyCode::LControl => Some(Key::LeftCtrl),
VirtualKeyCode::RControl => Some(Key::RightCtrl),
VirtualKeyCode::LShift => Some(Key::LeftShift),
VirtualKeyCode::RShift => Some(Key::RightShift),
VirtualKeyCode::LAlt => Some(Key::LeftAlt),
VirtualKeyCode::RAlt => Some(Key::RightAlt),
VirtualKeyCode::LWin => Some(Key::LeftSuper),
VirtualKeyCode::RWin => Some(Key::RightSuper),
VirtualKeyCode::F1 => Some(Key::F1),
VirtualKeyCode::F2 => Some(Key::F2),
VirtualKeyCode::F3 => Some(Key::F3),
VirtualKeyCode::F4 => Some(Key::F4),
VirtualKeyCode::F5 => Some(Key::F5),
VirtualKeyCode::F6 => Some(Key::F6),
VirtualKeyCode::F7 => Some(Key::F7),
VirtualKeyCode::F8 => Some(Key::F8),
VirtualKeyCode::F9 => Some(Key::F9),
VirtualKeyCode::F10 => Some(Key::F10),
VirtualKeyCode::F11 => Some(Key::F11),
VirtualKeyCode::F12 => Some(Key::F12),
VirtualKeyCode::Apostrophe => Some(Key::Apostrophe),
VirtualKeyCode::Comma => Some(Key::Comma),
VirtualKeyCode::Minus => Some(Key::Minus),
VirtualKeyCode::Period => Some(Key::Period),
VirtualKeyCode::Slash => Some(Key::Slash),
VirtualKeyCode::Semicolon => Some(Key::Semicolon),
VirtualKeyCode::Equals => Some(Key::Equal),
VirtualKeyCode::LBracket => Some(Key::LeftBracket),
VirtualKeyCode::Backslash => Some(Key::Backslash),
VirtualKeyCode::RBracket => Some(Key::RightBracket),
VirtualKeyCode::Grave => Some(Key::GraveAccent),
VirtualKeyCode::Capital => Some(Key::CapsLock),
VirtualKeyCode::Scroll => Some(Key::ScrollLock),
VirtualKeyCode::Numlock => Some(Key::NumLock),
VirtualKeyCode::Snapshot => Some(Key::PrintScreen),
VirtualKeyCode::Pause => Some(Key::Pause),
VirtualKeyCode::Numpad0 => Some(Key::Keypad0),
VirtualKeyCode::Numpad1 => Some(Key::Keypad1),
VirtualKeyCode::Numpad2 => Some(Key::Keypad2),
VirtualKeyCode::Numpad3 => Some(Key::Keypad3),
VirtualKeyCode::Numpad4 => Some(Key::Keypad4),
VirtualKeyCode::Numpad5 => Some(Key::Keypad5),
VirtualKeyCode::Numpad6 => Some(Key::Keypad6),
VirtualKeyCode::Numpad7 => Some(Key::Keypad7),
VirtualKeyCode::Numpad8 => Some(Key::Keypad8),
VirtualKeyCode::Numpad9 => Some(Key::Keypad9),
VirtualKeyCode::NumpadDecimal => Some(Key::KeypadDecimal),
VirtualKeyCode::NumpadDivide => Some(Key::KeypadDivide),
VirtualKeyCode::NumpadMultiply => Some(Key::KeypadMultiply),
VirtualKeyCode::NumpadSubtract => Some(Key::KeypadSubtract),
VirtualKeyCode::NumpadAdd => Some(Key::KeypadAdd),
VirtualKeyCode::NumpadEnter => Some(Key::KeypadEnter),
VirtualKeyCode::NumpadEquals => Some(Key::KeypadEqual),
_ => None,
}
}