sdl_keyboard.odin 1.9 KB

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