mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-11 21:48:36 +00:00
Update key handling to be event-based
This commit is contained in:
parent
09a83bac6c
commit
904d2a072f
@ -24,6 +24,123 @@ use sdl2::{
|
||||
EventPump,
|
||||
};
|
||||
|
||||
/// Handle changes in the key states.
|
||||
fn handle_key(io: &mut Io, key: &Scancode, pressed: bool) {
|
||||
let igkey = match key {
|
||||
Scancode::A => imgui::Key::A,
|
||||
Scancode::B => imgui::Key::B,
|
||||
Scancode::C => imgui::Key::C,
|
||||
Scancode::D => imgui::Key::D,
|
||||
Scancode::E => imgui::Key::E,
|
||||
Scancode::F => imgui::Key::F,
|
||||
Scancode::G => imgui::Key::G,
|
||||
Scancode::H => imgui::Key::H,
|
||||
Scancode::I => imgui::Key::I,
|
||||
Scancode::J => imgui::Key::J,
|
||||
Scancode::K => imgui::Key::K,
|
||||
Scancode::L => imgui::Key::L,
|
||||
Scancode::M => imgui::Key::M,
|
||||
Scancode::N => imgui::Key::N,
|
||||
Scancode::O => imgui::Key::O,
|
||||
Scancode::P => imgui::Key::P,
|
||||
Scancode::Q => imgui::Key::Q,
|
||||
Scancode::R => imgui::Key::R,
|
||||
Scancode::S => imgui::Key::S,
|
||||
Scancode::T => imgui::Key::T,
|
||||
Scancode::U => imgui::Key::U,
|
||||
Scancode::V => imgui::Key::V,
|
||||
Scancode::W => imgui::Key::W,
|
||||
Scancode::X => imgui::Key::X,
|
||||
Scancode::Y => imgui::Key::Y,
|
||||
Scancode::Z => imgui::Key::Z,
|
||||
Scancode::Num1 => imgui::Key::Keypad1,
|
||||
Scancode::Num2 => imgui::Key::Keypad2,
|
||||
Scancode::Num3 => imgui::Key::Keypad3,
|
||||
Scancode::Num4 => imgui::Key::Keypad4,
|
||||
Scancode::Num5 => imgui::Key::Keypad5,
|
||||
Scancode::Num6 => imgui::Key::Keypad6,
|
||||
Scancode::Num7 => imgui::Key::Keypad7,
|
||||
Scancode::Num8 => imgui::Key::Keypad8,
|
||||
Scancode::Num9 => imgui::Key::Keypad9,
|
||||
Scancode::Num0 => imgui::Key::Keypad0,
|
||||
Scancode::Return => imgui::Key::Enter, // TODO: Should this be treated as alias?
|
||||
Scancode::Escape => imgui::Key::Escape,
|
||||
Scancode::Backspace => imgui::Key::Backspace,
|
||||
Scancode::Tab => imgui::Key::Tab,
|
||||
Scancode::Space => imgui::Key::Space,
|
||||
Scancode::Minus => imgui::Key::Minus,
|
||||
Scancode::Equals => imgui::Key::Equal,
|
||||
Scancode::LeftBracket => imgui::Key::LeftBracket,
|
||||
Scancode::RightBracket => imgui::Key::RightBracket,
|
||||
Scancode::Backslash => imgui::Key::Backslash,
|
||||
Scancode::Semicolon => imgui::Key::Semicolon,
|
||||
Scancode::Apostrophe => imgui::Key::Apostrophe,
|
||||
Scancode::Grave => imgui::Key::GraveAccent,
|
||||
Scancode::Comma => imgui::Key::Comma,
|
||||
Scancode::Period => imgui::Key::Period,
|
||||
Scancode::Slash => imgui::Key::Slash,
|
||||
Scancode::CapsLock => imgui::Key::CapsLock,
|
||||
Scancode::F1 => imgui::Key::F1,
|
||||
Scancode::F2 => imgui::Key::F2,
|
||||
Scancode::F3 => imgui::Key::F3,
|
||||
Scancode::F4 => imgui::Key::F4,
|
||||
Scancode::F5 => imgui::Key::F5,
|
||||
Scancode::F6 => imgui::Key::F6,
|
||||
Scancode::F7 => imgui::Key::F7,
|
||||
Scancode::F8 => imgui::Key::F8,
|
||||
Scancode::F9 => imgui::Key::F9,
|
||||
Scancode::F10 => imgui::Key::F10,
|
||||
Scancode::F11 => imgui::Key::F11,
|
||||
Scancode::F12 => imgui::Key::F12,
|
||||
Scancode::PrintScreen => imgui::Key::PrintScreen,
|
||||
Scancode::ScrollLock => imgui::Key::ScrollLock,
|
||||
Scancode::Pause => imgui::Key::Pause,
|
||||
Scancode::Insert => imgui::Key::Insert,
|
||||
Scancode::Home => imgui::Key::Home,
|
||||
Scancode::PageUp => imgui::Key::PageUp,
|
||||
Scancode::Delete => imgui::Key::Delete,
|
||||
Scancode::End => imgui::Key::End,
|
||||
Scancode::PageDown => imgui::Key::PageDown,
|
||||
Scancode::Right => imgui::Key::RightArrow,
|
||||
Scancode::Left => imgui::Key::LeftArrow,
|
||||
Scancode::Down => imgui::Key::DownArrow,
|
||||
Scancode::Up => imgui::Key::UpArrow,
|
||||
Scancode::KpDivide => imgui::Key::KeypadDivide,
|
||||
Scancode::KpMultiply => imgui::Key::KeypadMultiply,
|
||||
Scancode::KpMinus => imgui::Key::KeypadSubtract,
|
||||
Scancode::KpPlus => imgui::Key::KeypadAdd,
|
||||
Scancode::KpEnter => imgui::Key::KeypadEnter,
|
||||
Scancode::Kp1 => imgui::Key::Keypad1,
|
||||
Scancode::Kp2 => imgui::Key::Keypad2,
|
||||
Scancode::Kp3 => imgui::Key::Keypad3,
|
||||
Scancode::Kp4 => imgui::Key::Keypad4,
|
||||
Scancode::Kp5 => imgui::Key::Keypad5,
|
||||
Scancode::Kp6 => imgui::Key::Keypad6,
|
||||
Scancode::Kp7 => imgui::Key::Keypad7,
|
||||
Scancode::Kp8 => imgui::Key::Keypad8,
|
||||
Scancode::Kp9 => imgui::Key::Keypad9,
|
||||
Scancode::Kp0 => imgui::Key::Keypad0,
|
||||
Scancode::KpPeriod => imgui::Key::KeypadDecimal,
|
||||
Scancode::Application => imgui::Key::Menu,
|
||||
Scancode::KpEquals => imgui::Key::KeypadEqual,
|
||||
Scancode::Menu => imgui::Key::Menu,
|
||||
Scancode::LCtrl => imgui::Key::LeftCtrl,
|
||||
Scancode::LShift => imgui::Key::LeftShift,
|
||||
Scancode::LAlt => imgui::Key::LeftAlt,
|
||||
Scancode::LGui => imgui::Key::LeftSuper,
|
||||
Scancode::RCtrl => imgui::Key::RightCtrl,
|
||||
Scancode::RShift => imgui::Key::RightShift,
|
||||
Scancode::RAlt => imgui::Key::RightAlt,
|
||||
Scancode::RGui => imgui::Key::RightSuper,
|
||||
_ => {
|
||||
// Ignore unknown keys
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
io.add_key_event(igkey, pressed);
|
||||
}
|
||||
|
||||
/// Handle changes in the key modifier states.
|
||||
fn handle_key_modifier(io: &mut Io, keymod: &Mod) {
|
||||
io.key_shift = keymod.intersects(Mod::LSHIFTMOD | Mod::RSHIFTMOD);
|
||||
@ -95,29 +212,6 @@ impl SdlPlatform {
|
||||
io.backend_flags.insert(BackendFlags::HAS_MOUSE_CURSORS);
|
||||
io.backend_flags.insert(BackendFlags::HAS_SET_MOUSE_POS);
|
||||
|
||||
io[Key::Tab] = Scancode::Tab as _;
|
||||
io[Key::LeftArrow] = Scancode::Left as _;
|
||||
io[Key::RightArrow] = Scancode::Right as _;
|
||||
io[Key::UpArrow] = Scancode::Up as _;
|
||||
io[Key::DownArrow] = Scancode::Down as _;
|
||||
io[Key::PageUp] = Scancode::PageUp as _;
|
||||
io[Key::PageDown] = Scancode::PageDown as _;
|
||||
io[Key::Home] = Scancode::Home as _;
|
||||
io[Key::End] = Scancode::End as _;
|
||||
io[Key::Insert] = Scancode::Insert as _;
|
||||
io[Key::Delete] = Scancode::Delete as _;
|
||||
io[Key::Backspace] = Scancode::Backspace as _;
|
||||
io[Key::Space] = Scancode::Space as _;
|
||||
io[Key::Enter] = Scancode::Return as _;
|
||||
io[Key::Escape] = Scancode::Escape as _;
|
||||
io[Key::KeypadEnter] = Scancode::KpEnter as _;
|
||||
io[Key::A] = Scancode::A as _;
|
||||
io[Key::C] = Scancode::C as _;
|
||||
io[Key::V] = Scancode::V as _;
|
||||
io[Key::X] = Scancode::X as _;
|
||||
io[Key::Y] = Scancode::Y as _;
|
||||
io[Key::Z] = Scancode::Z as _;
|
||||
|
||||
imgui.set_platform_name(Some(format!(
|
||||
"imgui-sdl2-support {}",
|
||||
env!("CARGO_PKG_VERSION")
|
||||
@ -164,8 +258,8 @@ impl SdlPlatform {
|
||||
keymod,
|
||||
..
|
||||
} => {
|
||||
io.keys_down[key as usize] = true;
|
||||
handle_key_modifier(io, &keymod);
|
||||
handle_key(io, &key, true);
|
||||
true
|
||||
}
|
||||
|
||||
@ -174,8 +268,8 @@ impl SdlPlatform {
|
||||
keymod,
|
||||
..
|
||||
} => {
|
||||
io.keys_down[key as usize] = false;
|
||||
handle_key_modifier(io, &keymod);
|
||||
handle_key(io, &key, false);
|
||||
true
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user