Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 44 additions & 1 deletion crates/processing_core/src/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ pub const TAU: f32 = std::f32::consts::TAU;
pub const DEG_TO_RAD: f32 = std::f32::consts::PI / 180.0;
pub const RAD_TO_DEG: f32 = 180.0 / std::f32::consts::PI;

// Key codes stay numeric (compared against `key_code`); values must match `key_code_to_u32`.
// Key codes are GLFW values, mapped to Bevy `KeyCode`s by `processing_input::keys`.

pub const KEY_A: u32 = 65;
pub const KEY_B: u32 = 66;
Expand Down Expand Up @@ -223,3 +223,46 @@ pub const F9: u32 = 298;
pub const F10: u32 = 299;
pub const F11: u32 = 300;
pub const F12: u32 = 301;
pub const F13: u32 = 302;
pub const F14: u32 = 303;
pub const F15: u32 = 304;
pub const F16: u32 = 305;
pub const F17: u32 = 306;
pub const F18: u32 = 307;
pub const F19: u32 = 308;
pub const F20: u32 = 309;
pub const F21: u32 = 310;
pub const F22: u32 = 311;
pub const F23: u32 = 312;
pub const F24: u32 = 313;
pub const F25: u32 = 314;

pub const CAPS_LOCK: u32 = 280;
pub const SCROLL_LOCK: u32 = 281;
pub const NUM_LOCK: u32 = 282;
pub const PRINT_SCREEN: u32 = 283;
pub const PAUSE: u32 = 284;

pub const NUMPAD_0: u32 = 320;
pub const NUMPAD_1: u32 = 321;
pub const NUMPAD_2: u32 = 322;
pub const NUMPAD_3: u32 = 323;
pub const NUMPAD_4: u32 = 324;
pub const NUMPAD_5: u32 = 325;
pub const NUMPAD_6: u32 = 326;
pub const NUMPAD_7: u32 = 327;
pub const NUMPAD_8: u32 = 328;
pub const NUMPAD_9: u32 = 329;
pub const NUMPAD_DECIMAL: u32 = 330;
pub const NUMPAD_DIVIDE: u32 = 331;
pub const NUMPAD_MULTIPLY: u32 = 332;
pub const NUMPAD_SUBTRACT: u32 = 333;
pub const NUMPAD_ADD: u32 = 334;
pub const NUMPAD_ENTER: u32 = 335;
pub const NUMPAD_EQUAL: u32 = 336;

pub const SHIFT_RIGHT: u32 = 344;
pub const CONTROL_RIGHT: u32 = 345;
pub const ALT_RIGHT: u32 = 346;
pub const SUPER_RIGHT: u32 = 347;
pub const CONTEXT_MENU: u32 = 348;
240 changes: 15 additions & 225 deletions crates/processing_ffi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4109,6 +4109,19 @@ pub const PROCESSING_KEY_F9: u32 = 298;
pub const PROCESSING_KEY_F10: u32 = 299;
pub const PROCESSING_KEY_F11: u32 = 300;
pub const PROCESSING_KEY_F12: u32 = 301;
pub const PROCESSING_KEY_F13: u32 = 302;
pub const PROCESSING_KEY_F14: u32 = 303;
pub const PROCESSING_KEY_F15: u32 = 304;
pub const PROCESSING_KEY_F16: u32 = 305;
pub const PROCESSING_KEY_F17: u32 = 306;
pub const PROCESSING_KEY_F18: u32 = 307;
pub const PROCESSING_KEY_F19: u32 = 308;
pub const PROCESSING_KEY_F20: u32 = 309;
pub const PROCESSING_KEY_F21: u32 = 310;
pub const PROCESSING_KEY_F22: u32 = 311;
pub const PROCESSING_KEY_F23: u32 = 312;
pub const PROCESSING_KEY_F24: u32 = 313;
pub const PROCESSING_KEY_F25: u32 = 314;
pub const PROCESSING_KEY_NUMPAD_0: u32 = 320;
pub const PROCESSING_KEY_NUMPAD_1: u32 = 321;
pub const PROCESSING_KEY_NUMPAD_2: u32 = 322;
Expand Down Expand Up @@ -4327,7 +4340,8 @@ pub extern "C" fn processing_key() -> u32 {
#[unsafe(no_mangle)]
pub extern "C" fn processing_key_code() -> u32 {
error::clear_error();
error::check(|| input_key_code().map(|opt| opt.map(key_code_to_u32).unwrap_or(0))).unwrap_or(0)
error::check(|| input_key_code().map(|opt| opt.and_then(key_code_to_u32).unwrap_or(0)))
.unwrap_or(0)
}

#[unsafe(no_mangle)]
Expand All @@ -4347,227 +4361,3 @@ pub extern "C" fn processing_mouse_wheel() -> f32 {
error::clear_error();
error::check(input_mouse_wheel).unwrap_or(0.0)
}

fn key_code_from_u32(val: u32) -> processing::prelude::error::Result<KeyCode> {
match val {
PROCESSING_KEY_SPACE => Ok(KeyCode::Space),
PROCESSING_KEY_QUOTE => Ok(KeyCode::Quote),
PROCESSING_KEY_COMMA => Ok(KeyCode::Comma),
PROCESSING_KEY_MINUS => Ok(KeyCode::Minus),
PROCESSING_KEY_PERIOD => Ok(KeyCode::Period),
PROCESSING_KEY_SLASH => Ok(KeyCode::Slash),
PROCESSING_KEY_0 => Ok(KeyCode::Digit0),
PROCESSING_KEY_1 => Ok(KeyCode::Digit1),
PROCESSING_KEY_2 => Ok(KeyCode::Digit2),
PROCESSING_KEY_3 => Ok(KeyCode::Digit3),
PROCESSING_KEY_4 => Ok(KeyCode::Digit4),
PROCESSING_KEY_5 => Ok(KeyCode::Digit5),
PROCESSING_KEY_6 => Ok(KeyCode::Digit6),
PROCESSING_KEY_7 => Ok(KeyCode::Digit7),
PROCESSING_KEY_8 => Ok(KeyCode::Digit8),
PROCESSING_KEY_9 => Ok(KeyCode::Digit9),
PROCESSING_KEY_SEMICOLON => Ok(KeyCode::Semicolon),
PROCESSING_KEY_EQUAL => Ok(KeyCode::Equal),
PROCESSING_KEY_A => Ok(KeyCode::KeyA),
PROCESSING_KEY_B => Ok(KeyCode::KeyB),
PROCESSING_KEY_C => Ok(KeyCode::KeyC),
PROCESSING_KEY_D => Ok(KeyCode::KeyD),
PROCESSING_KEY_E => Ok(KeyCode::KeyE),
PROCESSING_KEY_F => Ok(KeyCode::KeyF),
PROCESSING_KEY_G => Ok(KeyCode::KeyG),
PROCESSING_KEY_H => Ok(KeyCode::KeyH),
PROCESSING_KEY_I => Ok(KeyCode::KeyI),
PROCESSING_KEY_J => Ok(KeyCode::KeyJ),
PROCESSING_KEY_K => Ok(KeyCode::KeyK),
PROCESSING_KEY_L => Ok(KeyCode::KeyL),
PROCESSING_KEY_M => Ok(KeyCode::KeyM),
PROCESSING_KEY_N => Ok(KeyCode::KeyN),
PROCESSING_KEY_O => Ok(KeyCode::KeyO),
PROCESSING_KEY_P => Ok(KeyCode::KeyP),
PROCESSING_KEY_Q => Ok(KeyCode::KeyQ),
PROCESSING_KEY_R => Ok(KeyCode::KeyR),
PROCESSING_KEY_S => Ok(KeyCode::KeyS),
PROCESSING_KEY_T => Ok(KeyCode::KeyT),
PROCESSING_KEY_U => Ok(KeyCode::KeyU),
PROCESSING_KEY_V => Ok(KeyCode::KeyV),
PROCESSING_KEY_W => Ok(KeyCode::KeyW),
PROCESSING_KEY_X => Ok(KeyCode::KeyX),
PROCESSING_KEY_Y => Ok(KeyCode::KeyY),
PROCESSING_KEY_Z => Ok(KeyCode::KeyZ),
PROCESSING_KEY_BRACKET_LEFT => Ok(KeyCode::BracketLeft),
PROCESSING_KEY_BACKSLASH => Ok(KeyCode::Backslash),
PROCESSING_KEY_BRACKET_RIGHT => Ok(KeyCode::BracketRight),
PROCESSING_KEY_BACKQUOTE => Ok(KeyCode::Backquote),
PROCESSING_KEY_ESCAPE => Ok(KeyCode::Escape),
PROCESSING_KEY_ENTER => Ok(KeyCode::Enter),
PROCESSING_KEY_TAB => Ok(KeyCode::Tab),
PROCESSING_KEY_BACKSPACE => Ok(KeyCode::Backspace),
PROCESSING_KEY_INSERT => Ok(KeyCode::Insert),
PROCESSING_KEY_DELETE => Ok(KeyCode::Delete),
PROCESSING_KEY_RIGHT => Ok(KeyCode::ArrowRight),
PROCESSING_KEY_LEFT => Ok(KeyCode::ArrowLeft),
PROCESSING_KEY_DOWN => Ok(KeyCode::ArrowDown),
PROCESSING_KEY_UP => Ok(KeyCode::ArrowUp),
PROCESSING_KEY_PAGE_UP => Ok(KeyCode::PageUp),
PROCESSING_KEY_PAGE_DOWN => Ok(KeyCode::PageDown),
PROCESSING_KEY_HOME => Ok(KeyCode::Home),
PROCESSING_KEY_END => Ok(KeyCode::End),
PROCESSING_KEY_CAPS_LOCK => Ok(KeyCode::CapsLock),
PROCESSING_KEY_SCROLL_LOCK => Ok(KeyCode::ScrollLock),
PROCESSING_KEY_NUM_LOCK => Ok(KeyCode::NumLock),
PROCESSING_KEY_PRINT_SCREEN => Ok(KeyCode::PrintScreen),
PROCESSING_KEY_PAUSE => Ok(KeyCode::Pause),
PROCESSING_KEY_F1 => Ok(KeyCode::F1),
PROCESSING_KEY_F2 => Ok(KeyCode::F2),
PROCESSING_KEY_F3 => Ok(KeyCode::F3),
PROCESSING_KEY_F4 => Ok(KeyCode::F4),
PROCESSING_KEY_F5 => Ok(KeyCode::F5),
PROCESSING_KEY_F6 => Ok(KeyCode::F6),
PROCESSING_KEY_F7 => Ok(KeyCode::F7),
PROCESSING_KEY_F8 => Ok(KeyCode::F8),
PROCESSING_KEY_F9 => Ok(KeyCode::F9),
PROCESSING_KEY_F10 => Ok(KeyCode::F10),
PROCESSING_KEY_F11 => Ok(KeyCode::F11),
PROCESSING_KEY_F12 => Ok(KeyCode::F12),
PROCESSING_KEY_NUMPAD_0 => Ok(KeyCode::Numpad0),
PROCESSING_KEY_NUMPAD_1 => Ok(KeyCode::Numpad1),
PROCESSING_KEY_NUMPAD_2 => Ok(KeyCode::Numpad2),
PROCESSING_KEY_NUMPAD_3 => Ok(KeyCode::Numpad3),
PROCESSING_KEY_NUMPAD_4 => Ok(KeyCode::Numpad4),
PROCESSING_KEY_NUMPAD_5 => Ok(KeyCode::Numpad5),
PROCESSING_KEY_NUMPAD_6 => Ok(KeyCode::Numpad6),
PROCESSING_KEY_NUMPAD_7 => Ok(KeyCode::Numpad7),
PROCESSING_KEY_NUMPAD_8 => Ok(KeyCode::Numpad8),
PROCESSING_KEY_NUMPAD_9 => Ok(KeyCode::Numpad9),
PROCESSING_KEY_NUMPAD_DECIMAL => Ok(KeyCode::NumpadDecimal),
PROCESSING_KEY_NUMPAD_DIVIDE => Ok(KeyCode::NumpadDivide),
PROCESSING_KEY_NUMPAD_MULTIPLY => Ok(KeyCode::NumpadMultiply),
PROCESSING_KEY_NUMPAD_SUBTRACT => Ok(KeyCode::NumpadSubtract),
PROCESSING_KEY_NUMPAD_ADD => Ok(KeyCode::NumpadAdd),
PROCESSING_KEY_NUMPAD_ENTER => Ok(KeyCode::NumpadEnter),
PROCESSING_KEY_NUMPAD_EQUAL => Ok(KeyCode::NumpadEqual),
PROCESSING_KEY_SHIFT_LEFT => Ok(KeyCode::ShiftLeft),
PROCESSING_KEY_CONTROL_LEFT => Ok(KeyCode::ControlLeft),
PROCESSING_KEY_ALT_LEFT => Ok(KeyCode::AltLeft),
PROCESSING_KEY_SUPER_LEFT => Ok(KeyCode::SuperLeft),
PROCESSING_KEY_SHIFT_RIGHT => Ok(KeyCode::ShiftRight),
PROCESSING_KEY_CONTROL_RIGHT => Ok(KeyCode::ControlRight),
PROCESSING_KEY_ALT_RIGHT => Ok(KeyCode::AltRight),
PROCESSING_KEY_SUPER_RIGHT => Ok(KeyCode::SuperRight),
PROCESSING_KEY_CONTEXT_MENU => Ok(KeyCode::ContextMenu),
_ => Err(ProcessingError::InvalidArgument(format!(
"unknown key code: {val}"
))),
}
}

fn key_code_to_u32(kc: KeyCode) -> u32 {
match kc {
KeyCode::Space => PROCESSING_KEY_SPACE,
KeyCode::Quote => PROCESSING_KEY_QUOTE,
KeyCode::Comma => PROCESSING_KEY_COMMA,
KeyCode::Minus => PROCESSING_KEY_MINUS,
KeyCode::Period => PROCESSING_KEY_PERIOD,
KeyCode::Slash => PROCESSING_KEY_SLASH,
KeyCode::Digit0 => PROCESSING_KEY_0,
KeyCode::Digit1 => PROCESSING_KEY_1,
KeyCode::Digit2 => PROCESSING_KEY_2,
KeyCode::Digit3 => PROCESSING_KEY_3,
KeyCode::Digit4 => PROCESSING_KEY_4,
KeyCode::Digit5 => PROCESSING_KEY_5,
KeyCode::Digit6 => PROCESSING_KEY_6,
KeyCode::Digit7 => PROCESSING_KEY_7,
KeyCode::Digit8 => PROCESSING_KEY_8,
KeyCode::Digit9 => PROCESSING_KEY_9,
KeyCode::Semicolon => PROCESSING_KEY_SEMICOLON,
KeyCode::Equal => PROCESSING_KEY_EQUAL,
KeyCode::KeyA => PROCESSING_KEY_A,
KeyCode::KeyB => PROCESSING_KEY_B,
KeyCode::KeyC => PROCESSING_KEY_C,
KeyCode::KeyD => PROCESSING_KEY_D,
KeyCode::KeyE => PROCESSING_KEY_E,
KeyCode::KeyF => PROCESSING_KEY_F,
KeyCode::KeyG => PROCESSING_KEY_G,
KeyCode::KeyH => PROCESSING_KEY_H,
KeyCode::KeyI => PROCESSING_KEY_I,
KeyCode::KeyJ => PROCESSING_KEY_J,
KeyCode::KeyK => PROCESSING_KEY_K,
KeyCode::KeyL => PROCESSING_KEY_L,
KeyCode::KeyM => PROCESSING_KEY_M,
KeyCode::KeyN => PROCESSING_KEY_N,
KeyCode::KeyO => PROCESSING_KEY_O,
KeyCode::KeyP => PROCESSING_KEY_P,
KeyCode::KeyQ => PROCESSING_KEY_Q,
KeyCode::KeyR => PROCESSING_KEY_R,
KeyCode::KeyS => PROCESSING_KEY_S,
KeyCode::KeyT => PROCESSING_KEY_T,
KeyCode::KeyU => PROCESSING_KEY_U,
KeyCode::KeyV => PROCESSING_KEY_V,
KeyCode::KeyW => PROCESSING_KEY_W,
KeyCode::KeyX => PROCESSING_KEY_X,
KeyCode::KeyY => PROCESSING_KEY_Y,
KeyCode::KeyZ => PROCESSING_KEY_Z,
KeyCode::BracketLeft => PROCESSING_KEY_BRACKET_LEFT,
KeyCode::Backslash => PROCESSING_KEY_BACKSLASH,
KeyCode::BracketRight => PROCESSING_KEY_BRACKET_RIGHT,
KeyCode::Backquote => PROCESSING_KEY_BACKQUOTE,
KeyCode::Escape => PROCESSING_KEY_ESCAPE,
KeyCode::Enter => PROCESSING_KEY_ENTER,
KeyCode::Tab => PROCESSING_KEY_TAB,
KeyCode::Backspace => PROCESSING_KEY_BACKSPACE,
KeyCode::Insert => PROCESSING_KEY_INSERT,
KeyCode::Delete => PROCESSING_KEY_DELETE,
KeyCode::ArrowRight => PROCESSING_KEY_RIGHT,
KeyCode::ArrowLeft => PROCESSING_KEY_LEFT,
KeyCode::ArrowDown => PROCESSING_KEY_DOWN,
KeyCode::ArrowUp => PROCESSING_KEY_UP,
KeyCode::PageUp => PROCESSING_KEY_PAGE_UP,
KeyCode::PageDown => PROCESSING_KEY_PAGE_DOWN,
KeyCode::Home => PROCESSING_KEY_HOME,
KeyCode::End => PROCESSING_KEY_END,
KeyCode::CapsLock => PROCESSING_KEY_CAPS_LOCK,
KeyCode::ScrollLock => PROCESSING_KEY_SCROLL_LOCK,
KeyCode::NumLock => PROCESSING_KEY_NUM_LOCK,
KeyCode::PrintScreen => PROCESSING_KEY_PRINT_SCREEN,
KeyCode::Pause => PROCESSING_KEY_PAUSE,
KeyCode::F1 => PROCESSING_KEY_F1,
KeyCode::F2 => PROCESSING_KEY_F2,
KeyCode::F3 => PROCESSING_KEY_F3,
KeyCode::F4 => PROCESSING_KEY_F4,
KeyCode::F5 => PROCESSING_KEY_F5,
KeyCode::F6 => PROCESSING_KEY_F6,
KeyCode::F7 => PROCESSING_KEY_F7,
KeyCode::F8 => PROCESSING_KEY_F8,
KeyCode::F9 => PROCESSING_KEY_F9,
KeyCode::F10 => PROCESSING_KEY_F10,
KeyCode::F11 => PROCESSING_KEY_F11,
KeyCode::F12 => PROCESSING_KEY_F12,
KeyCode::Numpad0 => PROCESSING_KEY_NUMPAD_0,
KeyCode::Numpad1 => PROCESSING_KEY_NUMPAD_1,
KeyCode::Numpad2 => PROCESSING_KEY_NUMPAD_2,
KeyCode::Numpad3 => PROCESSING_KEY_NUMPAD_3,
KeyCode::Numpad4 => PROCESSING_KEY_NUMPAD_4,
KeyCode::Numpad5 => PROCESSING_KEY_NUMPAD_5,
KeyCode::Numpad6 => PROCESSING_KEY_NUMPAD_6,
KeyCode::Numpad7 => PROCESSING_KEY_NUMPAD_7,
KeyCode::Numpad8 => PROCESSING_KEY_NUMPAD_8,
KeyCode::Numpad9 => PROCESSING_KEY_NUMPAD_9,
KeyCode::NumpadDecimal => PROCESSING_KEY_NUMPAD_DECIMAL,
KeyCode::NumpadDivide => PROCESSING_KEY_NUMPAD_DIVIDE,
KeyCode::NumpadMultiply => PROCESSING_KEY_NUMPAD_MULTIPLY,
KeyCode::NumpadSubtract => PROCESSING_KEY_NUMPAD_SUBTRACT,
KeyCode::NumpadAdd => PROCESSING_KEY_NUMPAD_ADD,
KeyCode::NumpadEnter => PROCESSING_KEY_NUMPAD_ENTER,
KeyCode::NumpadEqual => PROCESSING_KEY_NUMPAD_EQUAL,
KeyCode::ShiftLeft => PROCESSING_KEY_SHIFT_LEFT,
KeyCode::ControlLeft => PROCESSING_KEY_CONTROL_LEFT,
KeyCode::AltLeft => PROCESSING_KEY_ALT_LEFT,
KeyCode::SuperLeft => PROCESSING_KEY_SUPER_LEFT,
KeyCode::ShiftRight => PROCESSING_KEY_SHIFT_RIGHT,
KeyCode::ControlRight => PROCESSING_KEY_CONTROL_RIGHT,
KeyCode::AltRight => PROCESSING_KEY_ALT_RIGHT,
KeyCode::SuperRight => PROCESSING_KEY_SUPER_RIGHT,
KeyCode::ContextMenu => PROCESSING_KEY_CONTEXT_MENU,
_ => 0,
}
}
Loading
Loading