sdl_keycode.odin 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. package sdl2
  2. SCANCODE_MASK :: 1<<30
  3. SCANCODE_TO_KEYCODE :: #force_inline proc "c" (X: Scancode) -> Keycode {
  4. return Keycode(i32(X) | SCANCODE_MASK)
  5. }
  6. Keycode :: enum i32 {
  7. UNKNOWN = 0,
  8. RETURN = '\r',
  9. ESCAPE = '\x1B',
  10. BACKSPACE = '\b',
  11. TAB = '\t',
  12. SPACE = ' ',
  13. EXCLAIM = '!',
  14. QUOTEDBL = '"',
  15. HASH = '#',
  16. PERCENT = '%',
  17. DOLLAR = '$',
  18. AMPERSAND = '&',
  19. QUOTE = '\'',
  20. LEFTPAREN = '(',
  21. RIGHTPAREN = ')',
  22. ASTERISK = '*',
  23. PLUS = '+',
  24. COMMA = ',',
  25. MINUS = '-',
  26. PERIOD = '.',
  27. SLASH = '/',
  28. NUM0 = '0',
  29. NUM1 = '1',
  30. NUM2 = '2',
  31. NUM3 = '3',
  32. NUM4 = '4',
  33. NUM5 = '5',
  34. NUM6 = '6',
  35. NUM7 = '7',
  36. NUM8 = '8',
  37. NUM9 = '9',
  38. COLON = ':',
  39. SEMICOLON = ';',
  40. LESS = '<',
  41. EQUALS = '=',
  42. GREATER = '>',
  43. QUESTION = '?',
  44. AT = '@',
  45. /*
  46. Skip uppercase letters
  47. */
  48. LEFTBRACKET = '[',
  49. BACKSLASH = '\\',
  50. RIGHTBRACKET = ']',
  51. CARET = '^',
  52. UNDERSCORE = '_',
  53. BACKQUOTE = '`',
  54. a = 'a',
  55. b = 'b',
  56. c = 'c',
  57. d = 'd',
  58. e = 'e',
  59. f = 'f',
  60. g = 'g',
  61. h = 'h',
  62. i = 'i',
  63. j = 'j',
  64. k = 'k',
  65. l = 'l',
  66. m = 'm',
  67. n = 'n',
  68. o = 'o',
  69. p = 'p',
  70. q = 'q',
  71. r = 'r',
  72. s = 's',
  73. t = 't',
  74. u = 'u',
  75. v = 'v',
  76. w = 'w',
  77. x = 'x',
  78. y = 'y',
  79. z = 'z',
  80. A = a,
  81. B = b,
  82. C = c,
  83. D = d,
  84. E = e,
  85. F = f,
  86. G = g,
  87. H = h,
  88. I = i,
  89. J = j,
  90. K = k,
  91. L = l,
  92. M = m,
  93. N = n,
  94. O = o,
  95. P = p,
  96. Q = q,
  97. R = r,
  98. S = s,
  99. T = t,
  100. U = u,
  101. V = v,
  102. W = w,
  103. X = x,
  104. Y = y,
  105. Z = z,
  106. CAPSLOCK = auto_cast (Scancode.CAPSLOCK|SCANCODE_MASK),
  107. F1 = auto_cast (Scancode.F1|SCANCODE_MASK),
  108. F2 = auto_cast (Scancode.F2|SCANCODE_MASK),
  109. F3 = auto_cast (Scancode.F3|SCANCODE_MASK),
  110. F4 = auto_cast (Scancode.F4|SCANCODE_MASK),
  111. F5 = auto_cast (Scancode.F5|SCANCODE_MASK),
  112. F6 = auto_cast (Scancode.F6|SCANCODE_MASK),
  113. F7 = auto_cast (Scancode.F7|SCANCODE_MASK),
  114. F8 = auto_cast (Scancode.F8|SCANCODE_MASK),
  115. F9 = auto_cast (Scancode.F9|SCANCODE_MASK),
  116. F10 = auto_cast (Scancode.F10|SCANCODE_MASK),
  117. F11 = auto_cast (Scancode.F11|SCANCODE_MASK),
  118. F12 = auto_cast (Scancode.F12|SCANCODE_MASK),
  119. PRINTSCREEN = auto_cast (Scancode.PRINTSCREEN|SCANCODE_MASK),
  120. SCROLLLOCK = auto_cast (Scancode.SCROLLLOCK|SCANCODE_MASK),
  121. PAUSE = auto_cast (Scancode.PAUSE|SCANCODE_MASK),
  122. INSERT = auto_cast (Scancode.INSERT|SCANCODE_MASK),
  123. HOME = auto_cast (Scancode.HOME|SCANCODE_MASK),
  124. PAGEUP = auto_cast (Scancode.PAGEUP|SCANCODE_MASK),
  125. DELETE = '\x7F',
  126. END = auto_cast (Scancode.END|SCANCODE_MASK),
  127. PAGEDOWN = auto_cast (Scancode.PAGEDOWN|SCANCODE_MASK),
  128. RIGHT = auto_cast (Scancode.RIGHT|SCANCODE_MASK),
  129. LEFT = auto_cast (Scancode.LEFT|SCANCODE_MASK),
  130. DOWN = auto_cast (Scancode.DOWN|SCANCODE_MASK),
  131. UP = auto_cast (Scancode.UP|SCANCODE_MASK),
  132. NUMLOCKCLEAR = auto_cast (Scancode.NUMLOCKCLEAR|SCANCODE_MASK),
  133. KP_DIVIDE = auto_cast (Scancode.KP_DIVIDE|SCANCODE_MASK),
  134. KP_MULTIPLY = auto_cast (Scancode.KP_MULTIPLY|SCANCODE_MASK),
  135. KP_MINUS = auto_cast (Scancode.KP_MINUS|SCANCODE_MASK),
  136. KP_PLUS = auto_cast (Scancode.KP_PLUS|SCANCODE_MASK),
  137. KP_ENTER = auto_cast (Scancode.KP_ENTER|SCANCODE_MASK),
  138. KP_1 = auto_cast (Scancode.KP_1|SCANCODE_MASK),
  139. KP_2 = auto_cast (Scancode.KP_2|SCANCODE_MASK),
  140. KP_3 = auto_cast (Scancode.KP_3|SCANCODE_MASK),
  141. KP_4 = auto_cast (Scancode.KP_4|SCANCODE_MASK),
  142. KP_5 = auto_cast (Scancode.KP_5|SCANCODE_MASK),
  143. KP_6 = auto_cast (Scancode.KP_6|SCANCODE_MASK),
  144. KP_7 = auto_cast (Scancode.KP_7|SCANCODE_MASK),
  145. KP_8 = auto_cast (Scancode.KP_8|SCANCODE_MASK),
  146. KP_9 = auto_cast (Scancode.KP_9|SCANCODE_MASK),
  147. KP_0 = auto_cast (Scancode.KP_0|SCANCODE_MASK),
  148. KP_PERIOD = auto_cast (Scancode.KP_PERIOD|SCANCODE_MASK),
  149. APPLICATION = auto_cast (Scancode.APPLICATION|SCANCODE_MASK),
  150. POWER = auto_cast (Scancode.POWER|SCANCODE_MASK),
  151. KP_EQUALS = auto_cast (Scancode.KP_EQUALS|SCANCODE_MASK),
  152. F13 = auto_cast (Scancode.F13|SCANCODE_MASK),
  153. F14 = auto_cast (Scancode.F14|SCANCODE_MASK),
  154. F15 = auto_cast (Scancode.F15|SCANCODE_MASK),
  155. F16 = auto_cast (Scancode.F16|SCANCODE_MASK),
  156. F17 = auto_cast (Scancode.F17|SCANCODE_MASK),
  157. F18 = auto_cast (Scancode.F18|SCANCODE_MASK),
  158. F19 = auto_cast (Scancode.F19|SCANCODE_MASK),
  159. F20 = auto_cast (Scancode.F20|SCANCODE_MASK),
  160. F21 = auto_cast (Scancode.F21|SCANCODE_MASK),
  161. F22 = auto_cast (Scancode.F22|SCANCODE_MASK),
  162. F23 = auto_cast (Scancode.F23|SCANCODE_MASK),
  163. F24 = auto_cast (Scancode.F24|SCANCODE_MASK),
  164. EXECUTE = auto_cast (Scancode.EXECUTE|SCANCODE_MASK),
  165. HELP = auto_cast (Scancode.HELP|SCANCODE_MASK),
  166. MENU = auto_cast (Scancode.MENU|SCANCODE_MASK),
  167. SELECT = auto_cast (Scancode.SELECT|SCANCODE_MASK),
  168. STOP = auto_cast (Scancode.STOP|SCANCODE_MASK),
  169. AGAIN = auto_cast (Scancode.AGAIN|SCANCODE_MASK),
  170. UNDO = auto_cast (Scancode.UNDO|SCANCODE_MASK),
  171. CUT = auto_cast (Scancode.CUT|SCANCODE_MASK),
  172. COPY = auto_cast (Scancode.COPY|SCANCODE_MASK),
  173. PASTE = auto_cast (Scancode.PASTE|SCANCODE_MASK),
  174. FIND = auto_cast (Scancode.FIND|SCANCODE_MASK),
  175. MUTE = auto_cast (Scancode.MUTE|SCANCODE_MASK),
  176. VOLUMEUP = auto_cast (Scancode.VOLUMEUP|SCANCODE_MASK),
  177. VOLUMEDOWN = auto_cast (Scancode.VOLUMEDOWN|SCANCODE_MASK),
  178. KP_COMMA = auto_cast (Scancode.KP_COMMA|SCANCODE_MASK),
  179. KP_EQUALSAS400 = auto_cast (Scancode.KP_EQUALSAS400|SCANCODE_MASK),
  180. ALTERASE = auto_cast (Scancode.ALTERASE|SCANCODE_MASK),
  181. SYSREQ = auto_cast (Scancode.SYSREQ|SCANCODE_MASK),
  182. CANCEL = auto_cast (Scancode.CANCEL|SCANCODE_MASK),
  183. CLEAR = auto_cast (Scancode.CLEAR|SCANCODE_MASK),
  184. PRIOR = auto_cast (Scancode.PRIOR|SCANCODE_MASK),
  185. RETURN2 = auto_cast (Scancode.RETURN2|SCANCODE_MASK),
  186. SEPARATOR = auto_cast (Scancode.SEPARATOR|SCANCODE_MASK),
  187. OUT = auto_cast (Scancode.OUT|SCANCODE_MASK),
  188. OPER = auto_cast (Scancode.OPER|SCANCODE_MASK),
  189. CLEARAGAIN = auto_cast (Scancode.CLEARAGAIN|SCANCODE_MASK),
  190. CRSEL = auto_cast (Scancode.CRSEL|SCANCODE_MASK),
  191. EXSEL = auto_cast (Scancode.EXSEL|SCANCODE_MASK),
  192. KP_00 = auto_cast (Scancode.KP_00|SCANCODE_MASK),
  193. KP_000 = auto_cast (Scancode.KP_000|SCANCODE_MASK),
  194. THOUSANDSSEPARATOR = auto_cast (Scancode.THOUSANDSSEPARATOR|SCANCODE_MASK),
  195. DECIMALSEPARATOR = auto_cast (Scancode.DECIMALSEPARATOR|SCANCODE_MASK),
  196. CURRENCYUNIT = auto_cast (Scancode.CURRENCYUNIT|SCANCODE_MASK),
  197. CURRENCYSUBUNIT = auto_cast (Scancode.CURRENCYSUBUNIT|SCANCODE_MASK),
  198. KP_LEFTPAREN = auto_cast (Scancode.KP_LEFTPAREN|SCANCODE_MASK),
  199. KP_RIGHTPAREN = auto_cast (Scancode.KP_RIGHTPAREN|SCANCODE_MASK),
  200. KP_LEFTBRACE = auto_cast (Scancode.KP_LEFTBRACE|SCANCODE_MASK),
  201. KP_RIGHTBRACE = auto_cast (Scancode.KP_RIGHTBRACE|SCANCODE_MASK),
  202. KP_TAB = auto_cast (Scancode.KP_TAB|SCANCODE_MASK),
  203. KP_BACKSPACE = auto_cast (Scancode.KP_BACKSPACE|SCANCODE_MASK),
  204. KP_A = auto_cast (Scancode.KP_A|SCANCODE_MASK),
  205. KP_B = auto_cast (Scancode.KP_B|SCANCODE_MASK),
  206. KP_C = auto_cast (Scancode.KP_C|SCANCODE_MASK),
  207. KP_D = auto_cast (Scancode.KP_D|SCANCODE_MASK),
  208. KP_E = auto_cast (Scancode.KP_E|SCANCODE_MASK),
  209. KP_F = auto_cast (Scancode.KP_F|SCANCODE_MASK),
  210. KP_XOR = auto_cast (Scancode.KP_XOR|SCANCODE_MASK),
  211. KP_POWER = auto_cast (Scancode.KP_POWER|SCANCODE_MASK),
  212. KP_PERCENT = auto_cast (Scancode.KP_PERCENT|SCANCODE_MASK),
  213. KP_LESS = auto_cast (Scancode.KP_LESS|SCANCODE_MASK),
  214. KP_GREATER = auto_cast (Scancode.KP_GREATER|SCANCODE_MASK),
  215. KP_AMPERSAND = auto_cast (Scancode.KP_AMPERSAND|SCANCODE_MASK),
  216. KP_DBLAMPERSAND = auto_cast (Scancode.KP_DBLAMPERSAND|SCANCODE_MASK),
  217. KP_VERTICALBAR = auto_cast (Scancode.KP_VERTICALBAR|SCANCODE_MASK),
  218. KP_DBLVERTICALBAR = auto_cast (Scancode.KP_DBLVERTICALBAR|SCANCODE_MASK),
  219. KP_COLON = auto_cast (Scancode.KP_COLON|SCANCODE_MASK),
  220. KP_HASH = auto_cast (Scancode.KP_HASH|SCANCODE_MASK),
  221. KP_SPACE = auto_cast (Scancode.KP_SPACE|SCANCODE_MASK),
  222. KP_AT = auto_cast (Scancode.KP_AT|SCANCODE_MASK),
  223. KP_EXCLAM = auto_cast (Scancode.KP_EXCLAM|SCANCODE_MASK),
  224. KP_MEMSTORE = auto_cast (Scancode.KP_MEMSTORE|SCANCODE_MASK),
  225. KP_MEMRECALL = auto_cast (Scancode.KP_MEMRECALL|SCANCODE_MASK),
  226. KP_MEMCLEAR = auto_cast (Scancode.KP_MEMCLEAR|SCANCODE_MASK),
  227. KP_MEMADD = auto_cast (Scancode.KP_MEMADD|SCANCODE_MASK),
  228. KP_MEMSUBTRACT = auto_cast (Scancode.KP_MEMSUBTRACT|SCANCODE_MASK),
  229. KP_MEMMULTIPLY = auto_cast (Scancode.KP_MEMMULTIPLY|SCANCODE_MASK),
  230. KP_MEMDIVIDE = auto_cast (Scancode.KP_MEMDIVIDE|SCANCODE_MASK),
  231. KP_PLUSMINUS = auto_cast (Scancode.KP_PLUSMINUS|SCANCODE_MASK),
  232. KP_CLEAR = auto_cast (Scancode.KP_CLEAR|SCANCODE_MASK),
  233. KP_CLEARENTRY = auto_cast (Scancode.KP_CLEARENTRY|SCANCODE_MASK),
  234. KP_BINARY = auto_cast (Scancode.KP_BINARY|SCANCODE_MASK),
  235. KP_OCTAL = auto_cast (Scancode.KP_OCTAL|SCANCODE_MASK),
  236. KP_DECIMAL = auto_cast (Scancode.KP_DECIMAL|SCANCODE_MASK),
  237. KP_HEXADECIMAL = auto_cast (Scancode.KP_HEXADECIMAL|SCANCODE_MASK),
  238. LCTRL = auto_cast (Scancode.LCTRL|SCANCODE_MASK),
  239. LSHIFT = auto_cast (Scancode.LSHIFT|SCANCODE_MASK),
  240. LALT = auto_cast (Scancode.LALT|SCANCODE_MASK),
  241. LGUI = auto_cast (Scancode.LGUI|SCANCODE_MASK),
  242. RCTRL = auto_cast (Scancode.RCTRL|SCANCODE_MASK),
  243. RSHIFT = auto_cast (Scancode.RSHIFT|SCANCODE_MASK),
  244. RALT = auto_cast (Scancode.RALT|SCANCODE_MASK),
  245. RGUI = auto_cast (Scancode.RGUI|SCANCODE_MASK),
  246. MODE = auto_cast (Scancode.MODE|SCANCODE_MASK),
  247. AUDIONEXT = auto_cast (Scancode.AUDIONEXT|SCANCODE_MASK),
  248. AUDIOPREV = auto_cast (Scancode.AUDIOPREV|SCANCODE_MASK),
  249. AUDIOSTOP = auto_cast (Scancode.AUDIOSTOP|SCANCODE_MASK),
  250. AUDIOPLAY = auto_cast (Scancode.AUDIOPLAY|SCANCODE_MASK),
  251. AUDIOMUTE = auto_cast (Scancode.AUDIOMUTE|SCANCODE_MASK),
  252. MEDIASELECT = auto_cast (Scancode.MEDIASELECT|SCANCODE_MASK),
  253. WWW = auto_cast (Scancode.WWW|SCANCODE_MASK),
  254. MAIL = auto_cast (Scancode.MAIL|SCANCODE_MASK),
  255. CALCULATOR = auto_cast (Scancode.CALCULATOR|SCANCODE_MASK),
  256. COMPUTER = auto_cast (Scancode.COMPUTER|SCANCODE_MASK),
  257. AC_SEARCH = auto_cast (Scancode.AC_SEARCH|SCANCODE_MASK),
  258. AC_HOME = auto_cast (Scancode.AC_HOME|SCANCODE_MASK),
  259. AC_BACK = auto_cast (Scancode.AC_BACK|SCANCODE_MASK),
  260. AC_FORWARD = auto_cast (Scancode.AC_FORWARD|SCANCODE_MASK),
  261. AC_STOP = auto_cast (Scancode.AC_STOP|SCANCODE_MASK),
  262. AC_REFRESH = auto_cast (Scancode.AC_REFRESH|SCANCODE_MASK),
  263. AC_BOOKMARKS = auto_cast (Scancode.AC_BOOKMARKS|SCANCODE_MASK),
  264. BRIGHTNESSDOWN = auto_cast (Scancode.BRIGHTNESSDOWN|SCANCODE_MASK),
  265. BRIGHTNESSUP = auto_cast (Scancode.BRIGHTNESSUP|SCANCODE_MASK),
  266. DISPLAYSWITCH = auto_cast (Scancode.DISPLAYSWITCH|SCANCODE_MASK),
  267. KBDILLUMTOGGLE = auto_cast (Scancode.KBDILLUMTOGGLE|SCANCODE_MASK),
  268. KBDILLUMDOWN = auto_cast (Scancode.KBDILLUMDOWN|SCANCODE_MASK),
  269. KBDILLUMUP = auto_cast (Scancode.KBDILLUMUP|SCANCODE_MASK),
  270. EJECT = auto_cast (Scancode.EJECT|SCANCODE_MASK),
  271. SLEEP = auto_cast (Scancode.SLEEP|SCANCODE_MASK),
  272. APP1 = auto_cast (Scancode.APP1|SCANCODE_MASK),
  273. APP2 = auto_cast (Scancode.APP2|SCANCODE_MASK),
  274. AUDIOREWIND = auto_cast (Scancode.AUDIOREWIND|SCANCODE_MASK),
  275. AUDIOFASTFORWARD = auto_cast (Scancode.AUDIOFASTFORWARD|SCANCODE_MASK),
  276. }
  277. KeymodFlag :: enum u16 {
  278. LSHIFT = 0x0,
  279. RSHIFT = 0x1,
  280. LCTRL = 0x6,
  281. RCTRL = 0x7,
  282. LALT = 0x8,
  283. RALT = 0x9,
  284. LGUI = 0xa,
  285. RGUI = 0xb,
  286. NUM = 0xc,
  287. CAPS = 0xd,
  288. MODE = 0xe,
  289. RESERVED = 0xf,
  290. }
  291. Keymod :: distinct bit_set[KeymodFlag; u16]
  292. KMOD_NONE :: Keymod{}
  293. KMOD_LSHIFT :: Keymod{.LSHIFT}
  294. KMOD_RSHIFT :: Keymod{.RSHIFT}
  295. KMOD_LCTRL :: Keymod{.LCTRL}
  296. KMOD_RCTRL :: Keymod{.RCTRL}
  297. KMOD_LALT :: Keymod{.LALT}
  298. KMOD_RALT :: Keymod{.RALT}
  299. KMOD_LGUI :: Keymod{.LGUI}
  300. KMOD_RGUI :: Keymod{.RGUI}
  301. KMOD_NUM :: Keymod{.NUM}
  302. KMOD_CAPS :: Keymod{.CAPS}
  303. KMOD_MODE :: Keymod{.MODE}
  304. KMOD_RESERVED :: Keymod{.RESERVED}
  305. KMOD_CTRL :: Keymod{.LCTRL, .RCTRL}
  306. KMOD_SHIFT :: Keymod{.LSHIFT, .RSHIFT}
  307. KMOD_ALT :: Keymod{.LALT, .RALT}
  308. KMOD_GUI :: Keymod{.LGUI, .RGUI}