github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/exp/shiny/driver/internal/x11key/x11key.go (about) 1 // Copyright 2015 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // x11key contains X11 numeric codes for the keyboard and mouse. 6 package x11key 7 8 import ( 9 "golang.org/x/mobile/event/key" 10 ) 11 12 // These constants come from /usr/include/X11/X.h 13 const ( 14 ShiftMask = 1 << 0 15 LockMask = 1 << 1 16 ControlMask = 1 << 2 17 Mod1Mask = 1 << 3 18 Mod2Mask = 1 << 4 19 Mod3Mask = 1 << 5 20 Mod4Mask = 1 << 6 21 Mod5Mask = 1 << 7 22 Button1Mask = 1 << 8 23 Button2Mask = 1 << 9 24 Button3Mask = 1 << 10 25 Button4Mask = 1 << 11 26 Button5Mask = 1 << 12 27 ) 28 29 func KeyModifiers(state uint16) (m key.Modifiers) { 30 if state&ShiftMask != 0 { 31 m |= key.ModShift 32 } 33 if state&ControlMask != 0 { 34 m |= key.ModControl 35 } 36 if state&Mod1Mask != 0 { 37 m |= key.ModAlt 38 } 39 if state&Mod4Mask != 0 { 40 m |= key.ModMeta 41 } 42 return m 43 } 44 45 // These constants come from /usr/include/X11/{keysymdef,XF86keysym}.h 46 const ( 47 xkISOLeftTab = 0xfe20 48 xkBackSpace = 0xff08 49 xkTab = 0xff09 50 xkReturn = 0xff0d 51 xkEscape = 0xff1b 52 xkHome = 0xff50 53 xkLeft = 0xff51 54 xkUp = 0xff52 55 xkRight = 0xff53 56 xkDown = 0xff54 57 xkPageUp = 0xff55 58 xkPageDown = 0xff56 59 xkEnd = 0xff57 60 xkInsert = 0xff63 61 xkMenu = 0xff67 62 xkF1 = 0xffbe 63 xkF2 = 0xffbf 64 xkF3 = 0xffc0 65 xkF4 = 0xffc1 66 xkF5 = 0xffc2 67 xkF6 = 0xffc3 68 xkF7 = 0xffc4 69 xkF8 = 0xffc5 70 xkF9 = 0xffc6 71 xkF10 = 0xffc7 72 xkF11 = 0xffc8 73 xkF12 = 0xffc9 74 xkShiftL = 0xffe1 75 xkShiftR = 0xffe2 76 xkControlL = 0xffe3 77 xkControlR = 0xffe4 78 xkAltL = 0xffe9 79 xkAltR = 0xffea 80 xkSuperL = 0xffeb 81 xkSuperR = 0xffec 82 xkDelete = 0xffff 83 84 xf86xkAudioLowerVolume = 0x1008ff11 85 xf86xkAudioMute = 0x1008ff12 86 xf86xkAudioRaiseVolume = 0x1008ff13 87 ) 88 89 // nonUnicodeKeycodes maps from those xproto.Keysym values (converted to runes) 90 // that do not correspond to a Unicode code point, such as "Page Up", "F1" or 91 // "Left Shift", to key.Code values. 92 var NonUnicodeKeycodes = map[rune]key.Code{ 93 xkISOLeftTab: key.CodeTab, 94 xkBackSpace: key.CodeDeleteBackspace, 95 xkTab: key.CodeTab, 96 xkReturn: key.CodeReturnEnter, 97 xkEscape: key.CodeEscape, 98 xkHome: key.CodeHome, 99 xkLeft: key.CodeLeftArrow, 100 xkUp: key.CodeUpArrow, 101 xkRight: key.CodeRightArrow, 102 xkDown: key.CodeDownArrow, 103 xkPageUp: key.CodePageUp, 104 xkPageDown: key.CodePageDown, 105 xkEnd: key.CodeEnd, 106 xkInsert: key.CodeInsert, 107 xkMenu: key.CodeRightGUI, // TODO: CodeRightGUI or CodeMenu?? 108 109 xkF1: key.CodeF1, 110 xkF2: key.CodeF2, 111 xkF3: key.CodeF3, 112 xkF4: key.CodeF4, 113 xkF5: key.CodeF5, 114 xkF6: key.CodeF6, 115 xkF7: key.CodeF7, 116 xkF8: key.CodeF8, 117 xkF9: key.CodeF9, 118 xkF10: key.CodeF10, 119 xkF11: key.CodeF11, 120 xkF12: key.CodeF12, 121 122 xkShiftL: key.CodeLeftShift, 123 xkShiftR: key.CodeRightShift, 124 xkControlL: key.CodeLeftControl, 125 xkControlR: key.CodeRightControl, 126 xkAltL: key.CodeLeftAlt, 127 xkAltR: key.CodeRightAlt, 128 xkSuperL: key.CodeLeftGUI, 129 xkSuperR: key.CodeRightGUI, 130 131 xkDelete: key.CodeDeleteForward, 132 133 xf86xkAudioRaiseVolume: key.CodeVolumeUp, 134 xf86xkAudioLowerVolume: key.CodeVolumeDown, 135 xf86xkAudioMute: key.CodeMute, 136 } 137 138 // ASCIIKeycodes maps lower-case ASCII runes to key.Code values. 139 var ASCIIKeycodes = [0x80]key.Code{ 140 'a': key.CodeA, 141 'b': key.CodeB, 142 'c': key.CodeC, 143 'd': key.CodeD, 144 'e': key.CodeE, 145 'f': key.CodeF, 146 'g': key.CodeG, 147 'h': key.CodeH, 148 'i': key.CodeI, 149 'j': key.CodeJ, 150 'k': key.CodeK, 151 'l': key.CodeL, 152 'm': key.CodeM, 153 'n': key.CodeN, 154 'o': key.CodeO, 155 'p': key.CodeP, 156 'q': key.CodeQ, 157 'r': key.CodeR, 158 's': key.CodeS, 159 't': key.CodeT, 160 'u': key.CodeU, 161 'v': key.CodeV, 162 'w': key.CodeW, 163 'x': key.CodeX, 164 'y': key.CodeY, 165 'z': key.CodeZ, 166 167 '1': key.Code1, 168 '2': key.Code2, 169 '3': key.Code3, 170 '4': key.Code4, 171 '5': key.Code5, 172 '6': key.Code6, 173 '7': key.Code7, 174 '8': key.Code8, 175 '9': key.Code9, 176 '0': key.Code0, 177 178 ' ': key.CodeSpacebar, 179 '-': key.CodeHyphenMinus, 180 '=': key.CodeEqualSign, 181 '[': key.CodeLeftSquareBracket, 182 ']': key.CodeRightSquareBracket, 183 '\\': key.CodeBackslash, 184 ';': key.CodeSemicolon, 185 '\'': key.CodeApostrophe, 186 '`': key.CodeGraveAccent, 187 ',': key.CodeComma, 188 '.': key.CodeFullStop, 189 '/': key.CodeSlash, 190 191 // TODO: distinguish CodeKeypadSlash vs CodeSlash, and similarly for other 192 // keypad codes. 193 }