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  }