fermium 20012.0.0-alpha.1

An opinionated crate of SDL2 bindings.
Documentation
#![allow(missing_docs)]

pub use crate::{scancode::*, stdinc::*};

/// The SDL keyboard keycode representation.
///
/// This is used in places like the [`SDL_Keysym`] struct for the "software" /
/// "logical" designation of a key.
///
/// Values of this type are used to represent keyboard keys using the current
/// layout of the keyboard.  These values include Unicode values representing
/// the unmodified character that would be generated by pressing the key, or an
/// SDLK_* constant for those keys that do not generate characters.
///
/// A special exception is the number keys at the top of the keyboard which
/// always map to `SDLK_0` through `SDLK_9`, regardless of layout.
///
/// See all the constants named `SDLK_*`
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct SDL_Keycode(pub i32);

pub const SDLK_SCANCODE_MASK: i32 = 1 << 30;

pub const fn SDL_SCANCODE_TO_KEYCODE(x: SDL_Scancode) -> SDL_Keycode {
  SDL_Keycode(x.0 | (1 << 30))
}

pub const SDLK_UNKNOWN: SDL_Keycode = SDL_Keycode(0);
pub const SDLK_RETURN: SDL_Keycode = SDL_Keycode(b'\r' as i32);
pub const SDLK_ESCAPE: SDL_Keycode = SDL_Keycode(33);
/// `\b`
pub const SDLK_BACKSPACE: SDL_Keycode = SDL_Keycode(8);
pub const SDLK_TAB: SDL_Keycode = SDL_Keycode(b'\t' as i32);
pub const SDLK_SPACE: SDL_Keycode = SDL_Keycode(b' ' as i32);
pub const SDLK_EXCLAIM: SDL_Keycode = SDL_Keycode(b'!' as i32);
pub const SDLK_QUOTEDBL: SDL_Keycode = SDL_Keycode(b'"' as i32);
pub const SDLK_HASH: SDL_Keycode = SDL_Keycode(b'#' as i32);
pub const SDLK_PERCENT: SDL_Keycode = SDL_Keycode(b'%' as i32);
pub const SDLK_DOLLAR: SDL_Keycode = SDL_Keycode(b'$' as i32);
pub const SDLK_AMPERSAND: SDL_Keycode = SDL_Keycode(b'&' as i32);
pub const SDLK_QUOTE: SDL_Keycode = SDL_Keycode(b'\'' as i32);
pub const SDLK_LEFTPAREN: SDL_Keycode = SDL_Keycode(b'(' as i32);
pub const SDLK_RIGHTPAREN: SDL_Keycode = SDL_Keycode(b')' as i32);
pub const SDLK_ASTERISK: SDL_Keycode = SDL_Keycode(b'*' as i32);
pub const SDLK_PLUS: SDL_Keycode = SDL_Keycode(b'+' as i32);
pub const SDLK_COMMA: SDL_Keycode = SDL_Keycode(b',' as i32);
pub const SDLK_MINUS: SDL_Keycode = SDL_Keycode(b'-' as i32);
pub const SDLK_PERIOD: SDL_Keycode = SDL_Keycode(b'.' as i32);
pub const SDLK_SLASH: SDL_Keycode = SDL_Keycode(b'/' as i32);
pub const SDLK_0: SDL_Keycode = SDL_Keycode(b'0' as i32);
pub const SDLK_1: SDL_Keycode = SDL_Keycode(b'1' as i32);
pub const SDLK_2: SDL_Keycode = SDL_Keycode(b'2' as i32);
pub const SDLK_3: SDL_Keycode = SDL_Keycode(b'3' as i32);
pub const SDLK_4: SDL_Keycode = SDL_Keycode(b'4' as i32);
pub const SDLK_5: SDL_Keycode = SDL_Keycode(b'5' as i32);
pub const SDLK_6: SDL_Keycode = SDL_Keycode(b'6' as i32);
pub const SDLK_7: SDL_Keycode = SDL_Keycode(b'7' as i32);
pub const SDLK_8: SDL_Keycode = SDL_Keycode(b'8' as i32);
pub const SDLK_9: SDL_Keycode = SDL_Keycode(b'9' as i32);
pub const SDLK_COLON: SDL_Keycode = SDL_Keycode(b':' as i32);
pub const SDLK_SEMICOLON: SDL_Keycode = SDL_Keycode(b';' as i32);
pub const SDLK_LESS: SDL_Keycode = SDL_Keycode(b'<' as i32);
pub const SDLK_EQUALS: SDL_Keycode = SDL_Keycode(b'=' as i32);
pub const SDLK_GREATER: SDL_Keycode = SDL_Keycode(b'>' as i32);
pub const SDLK_QUESTION: SDL_Keycode = SDL_Keycode(b'?' as i32);
pub const SDLK_AT: SDL_Keycode = SDL_Keycode(b'@' as i32);
pub const SDLK_LEFTBRACKET: SDL_Keycode = SDL_Keycode(b'[' as i32);
pub const SDLK_BACKSLASH: SDL_Keycode = SDL_Keycode(b'\\' as i32);
pub const SDLK_RIGHTBRACKET: SDL_Keycode = SDL_Keycode(b']' as i32);
pub const SDLK_CARET: SDL_Keycode = SDL_Keycode(b'^' as i32);
pub const SDLK_UNDERSCORE: SDL_Keycode = SDL_Keycode(b'_' as i32);
pub const SDLK_BACKQUOTE: SDL_Keycode = SDL_Keycode(b'`' as i32);
pub const SDLK_a: SDL_Keycode = SDL_Keycode(b'a' as i32);
pub const SDLK_b: SDL_Keycode = SDL_Keycode(b'b' as i32);
pub const SDLK_c: SDL_Keycode = SDL_Keycode(b'c' as i32);
pub const SDLK_d: SDL_Keycode = SDL_Keycode(b'd' as i32);
pub const SDLK_e: SDL_Keycode = SDL_Keycode(b'e' as i32);
pub const SDLK_f: SDL_Keycode = SDL_Keycode(b'f' as i32);
pub const SDLK_g: SDL_Keycode = SDL_Keycode(b'g' as i32);
pub const SDLK_h: SDL_Keycode = SDL_Keycode(b'h' as i32);
pub const SDLK_i: SDL_Keycode = SDL_Keycode(b'i' as i32);
pub const SDLK_j: SDL_Keycode = SDL_Keycode(b'j' as i32);
pub const SDLK_k: SDL_Keycode = SDL_Keycode(b'k' as i32);
pub const SDLK_l: SDL_Keycode = SDL_Keycode(b'l' as i32);
pub const SDLK_m: SDL_Keycode = SDL_Keycode(b'm' as i32);
pub const SDLK_n: SDL_Keycode = SDL_Keycode(b'n' as i32);
pub const SDLK_o: SDL_Keycode = SDL_Keycode(b'o' as i32);
pub const SDLK_p: SDL_Keycode = SDL_Keycode(b'p' as i32);
pub const SDLK_q: SDL_Keycode = SDL_Keycode(b'q' as i32);
pub const SDLK_r: SDL_Keycode = SDL_Keycode(b'r' as i32);
pub const SDLK_s: SDL_Keycode = SDL_Keycode(b's' as i32);
pub const SDLK_t: SDL_Keycode = SDL_Keycode(b't' as i32);
pub const SDLK_u: SDL_Keycode = SDL_Keycode(b'u' as i32);
pub const SDLK_v: SDL_Keycode = SDL_Keycode(b'v' as i32);
pub const SDLK_w: SDL_Keycode = SDL_Keycode(b'w' as i32);
pub const SDLK_x: SDL_Keycode = SDL_Keycode(b'x' as i32);
pub const SDLK_y: SDL_Keycode = SDL_Keycode(b'y' as i32);
pub const SDLK_z: SDL_Keycode = SDL_Keycode(b'z' as i32);
pub const SDLK_CAPSLOCK: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK);
pub const SDLK_F1: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1);
pub const SDLK_F2: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2);
pub const SDLK_F3: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3);
pub const SDLK_F4: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4);
pub const SDLK_F5: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5);
pub const SDLK_F6: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6);
pub const SDLK_F7: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7);
pub const SDLK_F8: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8);
pub const SDLK_F9: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9);
pub const SDLK_F10: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10);
pub const SDLK_F11: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11);
pub const SDLK_F12: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12);
pub const SDLK_PRINTSCREEN: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN);
pub const SDLK_SCROLLLOCK: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK);
pub const SDLK_PAUSE: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE);
pub const SDLK_INSERT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT);
pub const SDLK_HOME: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME);
pub const SDLK_PAGEUP: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP);
pub const SDLK_DELETE: SDL_Keycode = SDL_Keycode(177);
pub const SDLK_END: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END);
pub const SDLK_PAGEDOWN: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN);
pub const SDLK_RIGHT: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT);
pub const SDLK_LEFT: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT);
pub const SDLK_DOWN: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN);
pub const SDLK_UP: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP);
pub const SDLK_NUMLOCKCLEAR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR);
pub const SDLK_KP_DIVIDE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE);
pub const SDLK_KP_MULTIPLY: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY);
pub const SDLK_KP_MINUS: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS);
pub const SDLK_KP_PLUS: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS);
pub const SDLK_KP_ENTER: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER);
pub const SDLK_KP_1: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1);
pub const SDLK_KP_2: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2);
pub const SDLK_KP_3: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3);
pub const SDLK_KP_4: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4);
pub const SDLK_KP_5: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5);
pub const SDLK_KP_6: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6);
pub const SDLK_KP_7: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7);
pub const SDLK_KP_8: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8);
pub const SDLK_KP_9: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9);
pub const SDLK_KP_0: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0);
pub const SDLK_KP_PERIOD: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD);
pub const SDLK_APPLICATION: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION);
pub const SDLK_POWER: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER);
pub const SDLK_KP_EQUALS: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS);
pub const SDLK_F13: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13);
pub const SDLK_F14: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14);
pub const SDLK_F15: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15);
pub const SDLK_F16: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16);
pub const SDLK_F17: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17);
pub const SDLK_F18: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18);
pub const SDLK_F19: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19);
pub const SDLK_F20: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20);
pub const SDLK_F21: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21);
pub const SDLK_F22: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22);
pub const SDLK_F23: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23);
pub const SDLK_F24: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24);
pub const SDLK_EXECUTE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE);
pub const SDLK_HELP: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP);
pub const SDLK_MENU: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU);
pub const SDLK_SELECT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT);
pub const SDLK_STOP: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP);
pub const SDLK_AGAIN: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN);
pub const SDLK_UNDO: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO);
pub const SDLK_CUT: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT);
pub const SDLK_COPY: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY);
pub const SDLK_PASTE: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE);
pub const SDLK_FIND: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND);
pub const SDLK_MUTE: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE);
pub const SDLK_VOLUMEUP: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP);
pub const SDLK_VOLUMEDOWN: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN);
pub const SDLK_KP_COMMA: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA);
pub const SDLK_KP_EQUALSAS400: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400);
pub const SDLK_ALTERASE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE);
pub const SDLK_SYSREQ: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ);
pub const SDLK_CANCEL: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL);
pub const SDLK_CLEAR: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR);
pub const SDLK_PRIOR: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR);
pub const SDLK_RETURN2: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2);
pub const SDLK_SEPARATOR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR);
pub const SDLK_OUT: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT);
pub const SDLK_OPER: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER);
pub const SDLK_CLEARAGAIN: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN);
pub const SDLK_CRSEL: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL);
pub const SDLK_EXSEL: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL);
pub const SDLK_KP_00: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00);
pub const SDLK_KP_000: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000);
pub const SDLK_THOUSANDSSEPARATOR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR);
pub const SDLK_DECIMALSEPARATOR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR);
pub const SDLK_CURRENCYUNIT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT);
pub const SDLK_CURRENCYSUBUNIT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT);
pub const SDLK_KP_LEFTPAREN: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN);
pub const SDLK_KP_RIGHTPAREN: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN);
pub const SDLK_KP_LEFTBRACE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE);
pub const SDLK_KP_RIGHTBRACE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE);
pub const SDLK_KP_TAB: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB);
pub const SDLK_KP_BACKSPACE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE);
pub const SDLK_KP_A: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A);
pub const SDLK_KP_B: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B);
pub const SDLK_KP_C: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C);
pub const SDLK_KP_D: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D);
pub const SDLK_KP_E: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E);
pub const SDLK_KP_F: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F);
pub const SDLK_KP_XOR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR);
pub const SDLK_KP_POWER: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER);
pub const SDLK_KP_PERCENT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT);
pub const SDLK_KP_LESS: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS);
pub const SDLK_KP_GREATER: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER);
pub const SDLK_KP_AMPERSAND: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND);
pub const SDLK_KP_DBLAMPERSAND: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND);
pub const SDLK_KP_VERTICALBAR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR);
pub const SDLK_KP_DBLVERTICALBAR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR);
pub const SDLK_KP_COLON: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON);
pub const SDLK_KP_HASH: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH);
pub const SDLK_KP_SPACE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE);
pub const SDLK_KP_AT: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT);
pub const SDLK_KP_EXCLAM: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM);
pub const SDLK_KP_MEMSTORE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE);
pub const SDLK_KP_MEMRECALL: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL);
pub const SDLK_KP_MEMCLEAR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR);
pub const SDLK_KP_MEMADD: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD);
pub const SDLK_KP_MEMSUBTRACT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT);
pub const SDLK_KP_MEMMULTIPLY: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY);
pub const SDLK_KP_MEMDIVIDE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE);
pub const SDLK_KP_PLUSMINUS: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS);
pub const SDLK_KP_CLEAR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR);
pub const SDLK_KP_CLEARENTRY: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY);
pub const SDLK_KP_BINARY: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY);
pub const SDLK_KP_OCTAL: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL);
pub const SDLK_KP_DECIMAL: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL);
pub const SDLK_KP_HEXADECIMAL: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL);
pub const SDLK_LCTRL: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL);
pub const SDLK_LSHIFT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT);
pub const SDLK_LALT: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT);
pub const SDLK_LGUI: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI);
pub const SDLK_RCTRL: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL);
pub const SDLK_RSHIFT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT);
pub const SDLK_RALT: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT);
pub const SDLK_RGUI: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI);
pub const SDLK_MODE: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE);
pub const SDLK_AUDIONEXT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT);
pub const SDLK_AUDIOPREV: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV);
pub const SDLK_AUDIOSTOP: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP);
pub const SDLK_AUDIOPLAY: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY);
pub const SDLK_AUDIOMUTE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE);
pub const SDLK_MEDIASELECT: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT);
pub const SDLK_WWW: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW);
pub const SDLK_MAIL: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL);
pub const SDLK_CALCULATOR: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR);
pub const SDLK_COMPUTER: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER);
pub const SDLK_AC_SEARCH: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH);
pub const SDLK_AC_HOME: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME);
pub const SDLK_AC_BACK: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK);
pub const SDLK_AC_FORWARD: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD);
pub const SDLK_AC_STOP: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP);
pub const SDLK_AC_REFRESH: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH);
pub const SDLK_AC_BOOKMARKS: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS);
pub const SDLK_BRIGHTNESSDOWN: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN);
pub const SDLK_BRIGHTNESSUP: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP);
pub const SDLK_DISPLAYSWITCH: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH);
pub const SDLK_KBDILLUMTOGGLE: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE);
pub const SDLK_KBDILLUMDOWN: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN);
pub const SDLK_KBDILLUMUP: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP);
pub const SDLK_EJECT: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT);
pub const SDLK_SLEEP: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP);
pub const SDLK_APP1: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1);
pub const SDLK_APP2: SDL_Keycode = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2);
pub const SDLK_AUDIOREWIND: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND);
pub const SDLK_AUDIOFASTFORWARD: SDL_Keycode =
  SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD);

/// Representation of modifier key flags.
///
/// This is used in places like the [`SDL_Keysym`] struct.
///
/// See all the constants named `KMOD_*`
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct SDL_Keymod(pub i32);
impl_bit_ops_for_tuple_newtype!(SDL_Keymod);
impl SDL_Keymod {
  /// Convenience function to downcast into `u16`.
  ///
  /// This is needed for easy interaction with the `mod_` field of
  /// [`SDL_Keysym`].
  pub const fn as_u16(self) -> u16 {
    self.0 as i16 as u16
  }
}

pub const KMOD_NONE: SDL_Keymod = SDL_Keymod(0x0000);
pub const KMOD_LSHIFT: SDL_Keymod = SDL_Keymod(0x0001);
pub const KMOD_RSHIFT: SDL_Keymod = SDL_Keymod(0x0002);
pub const KMOD_LCTRL: SDL_Keymod = SDL_Keymod(0x0040);
pub const KMOD_RCTRL: SDL_Keymod = SDL_Keymod(0x0080);
pub const KMOD_LALT: SDL_Keymod = SDL_Keymod(0x0100);
pub const KMOD_RALT: SDL_Keymod = SDL_Keymod(0x0200);
pub const KMOD_LGUI: SDL_Keymod = SDL_Keymod(0x0400);
pub const KMOD_RGUI: SDL_Keymod = SDL_Keymod(0x0800);
pub const KMOD_NUM: SDL_Keymod = SDL_Keymod(0x1000);
pub const KMOD_CAPS: SDL_Keymod = SDL_Keymod(0x2000);
pub const KMOD_MODE: SDL_Keymod = SDL_Keymod(0x4000);
pub const KMOD_RESERVED: SDL_Keymod = SDL_Keymod(0x8000);

pub const KMOD_CTRL: SDL_Keymod = SDL_Keymod(KMOD_LCTRL.0 | KMOD_RCTRL.0);
pub const KMOD_SHIFT: SDL_Keymod = SDL_Keymod(KMOD_LSHIFT.0 | KMOD_RSHIFT.0);
pub const KMOD_ALT: SDL_Keymod = SDL_Keymod(KMOD_LALT.0 | KMOD_RALT.0);
pub const KMOD_GUI: SDL_Keymod = SDL_Keymod(KMOD_LGUI.0 | KMOD_RGUI.0);