/ CoreGraphics / X11.backend / CarbonKeys.h
CarbonKeys.h
  1  #ifndef _CARBONKEYS_H
  2  #define _CARBONKEYS_H
  3  
  4  #include <stdint.h>
  5  #include <HIToolbox/Events.h>
  6  
  7  // The contents of this file are hardware specific to a certain degree,
  8  // but this is probably as good as we can do.
  9  // The only hardware-independ codes we can get from X11 are keysyms,
 10  // but those are _after_ the keyboard layout is applied, so definitely
 11  // not something we could easily map to Carbon constants.
 12  
 13  // Missing:
 14  // kVK_ANSI_KeypadEquals
 15  // kVK_Function
 16  // kVK_F16
 17  // kVK_F17
 18  // kVK_F18
 19  // kVK_F19
 20  // kVK_F20
 21  // kVK_Help
 22  
 23  static const uint8_t x11ToCarbon[256] = {
 24      [38] = kVK_ANSI_A,
 25      [39] = kVK_ANSI_S,
 26      [40] = kVK_ANSI_D,
 27      [41] = kVK_ANSI_F,
 28      [43] = kVK_ANSI_H,
 29      [42] = kVK_ANSI_G,
 30      [52] = kVK_ANSI_Z,
 31      [53] = kVK_ANSI_X,
 32      [54] = kVK_ANSI_C,
 33      [55] = kVK_ANSI_V,
 34      [56] = kVK_ANSI_B,
 35      [24] = kVK_ANSI_Q,
 36      [25] = kVK_ANSI_W,
 37      [26] = kVK_ANSI_E,
 38      [27] = kVK_ANSI_R,
 39      [29] = kVK_ANSI_Y,
 40      [28] = kVK_ANSI_T,
 41      [10] = kVK_ANSI_1,
 42      [11] = kVK_ANSI_2,
 43      [12] = kVK_ANSI_3,
 44      [13] = kVK_ANSI_4,
 45      [15] = kVK_ANSI_6,
 46      [14] = kVK_ANSI_5,
 47      [21] = kVK_ANSI_Equal,
 48      [18] = kVK_ANSI_9,
 49      [16] = kVK_ANSI_7,
 50      [20] = kVK_ANSI_Minus,
 51      [17] = kVK_ANSI_8,
 52      [19] = kVK_ANSI_0,
 53      [35] = kVK_ANSI_RightBracket,
 54      [32] = kVK_ANSI_O,
 55      [30] = kVK_ANSI_U,
 56      [34] = kVK_ANSI_LeftBracket,
 57      [31] = kVK_ANSI_I,
 58      [33] = kVK_ANSI_P,
 59      [46] = kVK_ANSI_L,
 60      [44] = kVK_ANSI_J,
 61      [48] = kVK_ANSI_Quote,
 62      [45] = kVK_ANSI_K,
 63      [47] = kVK_ANSI_Semicolon,
 64      [51] = kVK_ANSI_Backslash,
 65      [59] = kVK_ANSI_Comma,
 66      [61] = kVK_ANSI_Slash,
 67      [57] = kVK_ANSI_N,
 68      [58] = kVK_ANSI_M,
 69      [60] = kVK_ANSI_Period,
 70      [49] = kVK_ANSI_Grave,
 71      [91] = kVK_ANSI_KeypadDecimal,
 72      [63] = kVK_ANSI_KeypadMultiply,
 73      [86] = kVK_ANSI_KeypadPlus,
 74      [77] = kVK_ANSI_KeypadClear,
 75      [106] = kVK_ANSI_KeypadDivide,
 76      [104] = kVK_ANSI_KeypadEnter,
 77      [82] = kVK_ANSI_KeypadMinus,
 78      [90] = kVK_ANSI_Keypad0,
 79      [87] = kVK_ANSI_Keypad1,
 80      [88] = kVK_ANSI_Keypad2,
 81      [89] = kVK_ANSI_Keypad3,
 82      [83] = kVK_ANSI_Keypad4,
 83      [84] = kVK_ANSI_Keypad5,
 84      [85] = kVK_ANSI_Keypad6,
 85      [79] = kVK_ANSI_Keypad7,
 86      [80] = kVK_ANSI_Keypad8,
 87      [81] = kVK_ANSI_Keypad9,
 88      [36] = kVK_Return,
 89      [23] = kVK_Tab,
 90      [65] = kVK_Space,
 91      [22] = kVK_Delete,
 92      [9] = kVK_Escape,
 93      [64] = kVK_Command,
 94      [50] = kVK_Shift,
 95      [66] = kVK_CapsLock,
 96      [133] = kVK_Option,
 97      [37] = kVK_Control,
 98      [62] = kVK_RightShift,
 99      [134] = kVK_RightOption,
100      [105] = kVK_RightControl,
101      [123] = kVK_VolumeUp,
102      [122] = kVK_VolumeDown,
103      [121] = kVK_Mute,
104      [71] = kVK_F5,
105      [72] = kVK_F6,
106      [73] = kVK_F7,
107      [69] = kVK_F3,
108      [74] = kVK_F8,
109      [75] = kVK_F9,
110      [95] = kVK_F11,
111      [107] = kVK_F13,
112      [78] = kVK_F14,
113      [76] = kVK_F10,
114      [96] = kVK_F12,
115      [127] = kVK_F15,
116      [110] = kVK_Home,
117      [112] = kVK_PageUp,
118      [119] = kVK_ForwardDelete,
119      [70] = kVK_F4,
120      [115] = kVK_End,
121      [68] = kVK_F2,
122      [117] = kVK_PageDown,
123      [67] = kVK_F1,
124      [113] = kVK_LeftArrow,
125      [114] = kVK_RightArrow,
126      [116] = kVK_DownArrow,
127      [111] = kVK_UpArrow,
128  };
129  
130  static const uint8_t carbonToX11[256] = {
131      [kVK_ANSI_A] = 38,
132      [kVK_ANSI_S] = 39,
133      [kVK_ANSI_D] = 40,
134      [kVK_ANSI_F] = 41,
135      [kVK_ANSI_H] = 43,
136      [kVK_ANSI_G] = 42,
137      [kVK_ANSI_Z] = 52,
138      [kVK_ANSI_X] = 53,
139      [kVK_ANSI_C] = 54,
140      [kVK_ANSI_V] = 55,
141      [kVK_ANSI_B] = 56,
142      [kVK_ANSI_Q] = 24,
143      [kVK_ANSI_W] = 25,
144      [kVK_ANSI_E] = 26,
145      [kVK_ANSI_R] = 27,
146      [kVK_ANSI_Y] = 29,
147      [kVK_ANSI_T] = 28,
148      [kVK_ANSI_1] = 10,
149      [kVK_ANSI_2] = 11,
150      [kVK_ANSI_3] = 12,
151      [kVK_ANSI_4] = 13,
152      [kVK_ANSI_6] = 15,
153      [kVK_ANSI_5] = 14,
154      [kVK_ANSI_Equal] = 21,
155      [kVK_ANSI_9] = 18,
156      [kVK_ANSI_7] = 16,
157      [kVK_ANSI_Minus] = 20,
158      [kVK_ANSI_8] = 17,
159      [kVK_ANSI_0] = 19,
160      [kVK_ANSI_RightBracket] = 35,
161      [kVK_ANSI_O] = 32,
162      [kVK_ANSI_U] = 30,
163      [kVK_ANSI_LeftBracket] = 34,
164      [kVK_ANSI_I] = 31,
165      [kVK_ANSI_P] = 33,
166      [kVK_ANSI_L] = 46,
167      [kVK_ANSI_J] = 44,
168      [kVK_ANSI_Quote] = 48,
169      [kVK_ANSI_K] = 45,
170      [kVK_ANSI_Semicolon] = 47,
171      [kVK_ANSI_Backslash] = 51,
172      [kVK_ANSI_Comma] = 59,
173      [kVK_ANSI_Slash] = 61,
174      [kVK_ANSI_N] = 57,
175      [kVK_ANSI_M] = 58,
176      [kVK_ANSI_Period] = 60,
177      [kVK_ANSI_Grave] = 49,
178      [kVK_ANSI_KeypadDecimal] = 91,
179      [kVK_ANSI_KeypadMultiply] = 63,
180      [kVK_ANSI_KeypadPlus] = 86,
181      [kVK_ANSI_KeypadClear] = 77,
182      [kVK_ANSI_KeypadDivide] = 106,
183      [kVK_ANSI_KeypadEnter] = 104,
184      [kVK_ANSI_KeypadMinus] = 82,
185      [kVK_ANSI_Keypad0] = 90,
186      [kVK_ANSI_Keypad1] = 87,
187      [kVK_ANSI_Keypad2] = 88,
188      [kVK_ANSI_Keypad3] = 89,
189      [kVK_ANSI_Keypad4] = 83,
190      [kVK_ANSI_Keypad5] = 84,
191      [kVK_ANSI_Keypad6] = 85,
192      [kVK_ANSI_Keypad7] = 79,
193      [kVK_ANSI_Keypad8] = 80,
194      [kVK_ANSI_Keypad9] = 81,
195      [kVK_Return] = 36,
196      [kVK_Tab] = 23,
197      [kVK_Space] = 65,
198      [kVK_Delete] = 22,
199      [kVK_Escape] = 9,
200      [kVK_Command] = 64,
201      [kVK_Shift] = 50,
202      [kVK_CapsLock] = 66,
203      [kVK_Option] = 133,
204      [kVK_Control] = 37,
205      [kVK_RightShift] = 62,
206      [kVK_RightOption] = 134,
207      [kVK_RightControl] = 105,
208      [kVK_VolumeUp] = 123,
209      [kVK_VolumeDown] = 122,
210      [kVK_Mute] = 121,
211      [kVK_F5] = 71,
212      [kVK_F6] = 72,
213      [kVK_F7] = 73,
214      [kVK_F3] = 69,
215      [kVK_F8] = 74,
216      [kVK_F9] = 75,
217      [kVK_F11] = 95,
218      [kVK_F13] = 107,
219      [kVK_F14] = 78,
220      [kVK_F10] = 76,
221      [kVK_F12] = 96,
222      [kVK_F15] = 127,
223      [kVK_Home] = 110,
224      [kVK_PageUp] = 112,
225      [kVK_ForwardDelete] = 119,
226      [kVK_F4] = 70,
227      [kVK_End] = 115,
228      [kVK_F2] = 68,
229      [kVK_PageDown] = 117,
230      [kVK_F1] = 67,
231      [kVK_LeftArrow] = 113,
232      [kVK_RightArrow] = 114,
233      [kVK_DownArrow] = 116,
234      [kVK_UpArrow] = 111,
235  };
236  
237  
238  #endif