1# ---------------------------------------------------------------------------- 2# pyglet 3# Copyright (c) 2006-2008 Alex Holkner 4# Copyright (c) 2008-2020 pyglet contributors 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# 11# * Redistributions of source code must retain the above copyright 12# notice, this list of conditions and the following disclaimer. 13# * Redistributions in binary form must reproduce the above copyright 14# notice, this list of conditions and the following disclaimer in 15# the documentation and/or other materials provided with the 16# distribution. 17# * Neither the name of pyglet nor the names of its 18# contributors may be used to endorse or promote products 19# derived from this software without specific prior written 20# permission. 21# 22# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 25# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 27# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 28# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 30# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 32# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33# POSSIBILITY OF SUCH DAMAGE. 34# ---------------------------------------------------------------------------- 35 36from pyglet.window import key 37 38# From SDL: src/video/quartz/SDL_QuartzKeys.h 39# These are the Macintosh key scancode constants -- from Inside Macintosh 40# http://boredzo.org/blog/wp-content/uploads/2007/05/imtx-virtual-keycodes.png 41# Renamed QZ_RALT, QZ_LALT to QZ_ROPTION, QZ_LOPTION 42# and QZ_RMETA, QZ_LMETA to QZ_RCOMMAND, QZ_LCOMMAND. 43# 44# See also: 45# /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Headers/Events.h 46 47QZ_ESCAPE = 0x35 48QZ_F1 = 0x7A 49QZ_F2 = 0x78 50QZ_F3 = 0x63 51QZ_F4 = 0x76 52QZ_F5 = 0x60 53QZ_F6 = 0x61 54QZ_F7 = 0x62 55QZ_F8 = 0x64 56QZ_F9 = 0x65 57QZ_F10 = 0x6D 58QZ_F11 = 0x67 59QZ_F12 = 0x6F 60QZ_F13 = 0x69 61QZ_F14 = 0x6B 62QZ_F15 = 0x71 63QZ_F16 = 0x6A 64QZ_F17 = 0x40 65QZ_F18 = 0x4F 66QZ_F19 = 0x50 67QZ_F20 = 0x5A 68QZ_BACKQUOTE = 0x32 69QZ_1 = 0x12 70QZ_2 = 0x13 71QZ_3 = 0x14 72QZ_4 = 0x15 73QZ_5 = 0x17 74QZ_6 = 0x16 75QZ_7 = 0x1A 76QZ_8 = 0x1C 77QZ_9 = 0x19 78QZ_0 = 0x1D 79QZ_MINUS = 0x1B 80QZ_EQUALS = 0x18 81QZ_BACKSPACE = 0x33 82QZ_INSERT = 0x72 83QZ_HOME = 0x73 84QZ_PAGEUP = 0x74 85QZ_NUMLOCK = 0x47 86QZ_KP_EQUALS = 0x51 87QZ_KP_DIVIDE = 0x4B 88QZ_KP_MULTIPLY = 0x43 89QZ_TAB = 0x30 90QZ_q = 0x0C 91QZ_w = 0x0D 92QZ_e = 0x0E 93QZ_r = 0x0F 94QZ_t = 0x11 95QZ_y = 0x10 96QZ_u = 0x20 97QZ_i = 0x22 98QZ_o = 0x1F 99QZ_p = 0x23 100QZ_LEFTBRACKET = 0x21 101QZ_RIGHTBRACKET = 0x1E 102QZ_BACKSLASH = 0x2A 103QZ_DELETE = 0x75 104QZ_END = 0x77 105QZ_PAGEDOWN = 0x79 106QZ_KP7 = 0x59 107QZ_KP8 = 0x5B 108QZ_KP9 = 0x5C 109QZ_KP_MINUS = 0x4E 110QZ_CAPSLOCK = 0x39 111QZ_a = 0x00 112QZ_s = 0x01 113QZ_d = 0x02 114QZ_f = 0x03 115QZ_g = 0x05 116QZ_h = 0x04 117QZ_j = 0x26 118QZ_k = 0x28 119QZ_l = 0x25 120QZ_SEMICOLON = 0x29 121QZ_QUOTE = 0x27 122QZ_RETURN = 0x24 123QZ_KP4 = 0x56 124QZ_KP5 = 0x57 125QZ_KP6 = 0x58 126QZ_KP_PLUS = 0x45 127QZ_LSHIFT = 0x38 128QZ_z = 0x06 129QZ_x = 0x07 130QZ_c = 0x08 131QZ_v = 0x09 132QZ_b = 0x0B 133QZ_n = 0x2D 134QZ_m = 0x2E 135QZ_COMMA = 0x2B 136QZ_PERIOD = 0x2F 137QZ_SLASH = 0x2C 138QZ_RSHIFT = 0x3C 139QZ_UP = 0x7E 140QZ_KP1 = 0x53 141QZ_KP2 = 0x54 142QZ_KP3 = 0x55 143QZ_KP_ENTER = 0x4C 144QZ_LCTRL = 0x3B 145QZ_LOPTION = 0x3A 146QZ_LCOMMAND = 0x37 147QZ_SPACE = 0x31 148QZ_RCOMMAND = 0x36 149QZ_ROPTION = 0x3D 150QZ_RCTRL = 0x3E 151QZ_FUNCTION = 0x3F 152QZ_LEFT = 0x7B 153QZ_DOWN = 0x7D 154QZ_RIGHT = 0x7C 155QZ_KP0 = 0x52 156QZ_KP_PERIOD = 0x41 157 158# This map contains only keys that can be directly translated independent of 159# keyboard layout and locale 160keymap = { 161 QZ_ESCAPE: key.ESCAPE, 162 QZ_F1: key.F1, 163 QZ_F2: key.F2, 164 QZ_F3: key.F3, 165 QZ_F4: key.F4, 166 QZ_F5: key.F5, 167 QZ_F6: key.F6, 168 QZ_F7: key.F7, 169 QZ_F8: key.F8, 170 QZ_F9: key.F9, 171 QZ_F10: key.F10, 172 QZ_F11: key.F11, 173 QZ_F12: key.F12, 174 QZ_F13: key.F13, 175 QZ_F14: key.F14, 176 QZ_F15: key.F15, 177 QZ_F16: key.F16, 178 QZ_F17: key.F17, 179 QZ_F18: key.F18, 180 QZ_F19: key.F19, 181 QZ_F20: key.F20, 182 QZ_BACKSPACE: key.BACKSPACE, 183 QZ_INSERT: key.INSERT, 184 QZ_HOME: key.HOME, 185 QZ_PAGEUP: key.PAGEUP, 186 QZ_NUMLOCK: key.NUMLOCK, 187 QZ_KP_EQUALS: key.NUM_EQUAL, 188 QZ_KP_DIVIDE: key.NUM_DIVIDE, 189 QZ_KP_MULTIPLY: key.NUM_MULTIPLY, 190 QZ_TAB: key.TAB, 191 QZ_BACKSLASH: key.BACKSLASH, 192 QZ_DELETE: key.DELETE, 193 QZ_END: key.END, 194 QZ_PAGEDOWN: key.PAGEDOWN, 195 QZ_KP7: key.NUM_7, 196 QZ_KP8: key.NUM_8, 197 QZ_KP9: key.NUM_9, 198 QZ_KP_MINUS: key.NUM_SUBTRACT, 199 QZ_CAPSLOCK: key.CAPSLOCK, 200 QZ_RETURN: key.RETURN, 201 QZ_KP4: key.NUM_4, 202 QZ_KP5: key.NUM_5, 203 QZ_KP6: key.NUM_6, 204 QZ_KP_PLUS: key.NUM_ADD, 205 QZ_LSHIFT: key.LSHIFT, 206 QZ_RSHIFT: key.RSHIFT, 207 QZ_UP: key.UP, 208 QZ_KP1: key.NUM_1, 209 QZ_KP2: key.NUM_2, 210 QZ_KP3: key.NUM_3, 211 QZ_KP_ENTER: key.NUM_ENTER, 212 QZ_LCTRL: key.LCTRL, 213 QZ_LOPTION: key.LOPTION, 214 QZ_LCOMMAND: key.LCOMMAND, 215 QZ_SPACE: key.SPACE, 216 QZ_RCOMMAND: key.RCOMMAND, 217 QZ_ROPTION: key.ROPTION, 218 QZ_RCTRL: key.RCTRL, 219 QZ_FUNCTION: key.FUNCTION, 220 QZ_LEFT: key.LEFT, 221 QZ_DOWN: key.DOWN, 222 QZ_RIGHT: key.RIGHT, 223 QZ_KP0: key.NUM_0, 224 QZ_KP_PERIOD: key.NUM_DECIMAL, 225} 226 227charmap = { 228 ' ': key.SPACE, 229 '!': key.EXCLAMATION, 230 '"': key.DOUBLEQUOTE, 231 '#': key.HASH, 232 '#': key.POUND, 233 '$': key.DOLLAR, 234 '%': key.PERCENT, 235 '&': key.AMPERSAND, 236 "'": key.APOSTROPHE, 237 '(': key.PARENLEFT, 238 ')': key.PARENRIGHT, 239 '*': key.ASTERISK, 240 '+': key.PLUS, 241 ',': key.COMMA, 242 '-': key.MINUS, 243 '.': key.PERIOD, 244 '/': key.SLASH, 245 '0': key._0, 246 '1': key._1, 247 '2': key._2, 248 '3': key._3, 249 '4': key._4, 250 '5': key._5, 251 '6': key._6, 252 '7': key._7, 253 '8': key._8, 254 '9': key._9, 255 ':': key.COLON, 256 ';': key.SEMICOLON, 257 '<': key.LESS, 258 '=': key.EQUAL, 259 '>': key.GREATER, 260 '?': key.QUESTION, 261 '@': key.AT, 262 '[': key.BRACKETLEFT, 263 '\\': key.BACKSLASH, 264 ']': key.BRACKETRIGHT, 265 '^': key.ASCIICIRCUM, 266 '_': key.UNDERSCORE, 267 '`': key.GRAVE, 268 '`': key.QUOTELEFT, 269 'A': key.A, 270 'B': key.B, 271 'C': key.C, 272 'D': key.D, 273 'E': key.E, 274 'F': key.F, 275 'G': key.G, 276 'H': key.H, 277 'I': key.I, 278 'J': key.J, 279 'K': key.K, 280 'L': key.L, 281 'M': key.M, 282 'N': key.N, 283 'O': key.O, 284 'P': key.P, 285 'Q': key.Q, 286 'R': key.R, 287 'S': key.S, 288 'T': key.T, 289 'U': key.U, 290 'V': key.V, 291 'W': key.W, 292 'X': key.X, 293 'Y': key.Y, 294 'Z': key.Z, 295 '{': key.BRACELEFT, 296 '|': key.BAR, 297 '}': key.BRACERIGHT, 298 '~': key.ASCIITILDE 299} 300