sdl_keyboard.odin 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package sdl2
  2. import "core:c"
  3. when ODIN_OS == .Windows {
  4. foreign import lib "SDL2.lib"
  5. } else {
  6. foreign import lib "system:SDL2"
  7. }
  8. Keysym :: struct {
  9. scancode: Scancode, /**< SDL physical key code - see ::SDL_Scancode for details */
  10. sym: Keycode, /**< SDL virtual key code - see ::SDL_Keycode for details */
  11. mod: Keymod, /**< current key modifiers */
  12. unused: u32,
  13. }
  14. @(default_calling_convention="c", link_prefix="SDL_")
  15. foreign lib {
  16. GetKeyboardFocus :: proc() -> ^Window ---
  17. GetKeyboardState :: proc(numkeys: ^c.int) -> [^]u8 ---
  18. GetKeyFromScancode :: proc(scancode: Scancode) -> Keycode ---
  19. GetScancodeFromKey :: proc(key: Keycode) -> Scancode ---
  20. GetScancodeName :: proc(scancode: Scancode) -> cstring ---
  21. GetScancodeFromName :: proc(name: cstring) -> Scancode ---
  22. GetKeyName :: proc(key: Keycode) -> cstring ---
  23. GetKeyFromName :: proc(name: cstring) -> Keycode ---
  24. StartTextInput :: proc() ---
  25. IsTextInputActive :: proc() -> bool ---
  26. StopTextInput :: proc() ---
  27. SetTextInputRect :: proc(rect: ^Rect) ---
  28. HasScreenKeyboardSupport:: proc() -> bool ---
  29. IsScreenKeyboardShown :: proc(window: ^Window) -> bool ---
  30. }
  31. GetKeyboardStateAsSlice :: proc "c" () -> []u8 {
  32. numkeys: c.int
  33. keys := GetKeyboardState(&numkeys)
  34. if keys != nil {
  35. return keys[:numkeys]
  36. }
  37. return nil
  38. }
  39. GetModState :: #force_inline proc "c" () -> Keymod { return transmute(Keymod)u16(SDL_GetModState()) }
  40. SetModState :: #force_inline proc "c" (modstate: Keymod) { SDL_SetModState(c.int(transmute(u16)modstate)) }
  41. @(default_calling_convention="c")
  42. @(private="file")
  43. foreign lib {
  44. SDL_GetModState :: proc() -> c.int ---
  45. SDL_SetModState :: proc(modstate: c.int) ---
  46. }