github.com/jmigpin/editor@v1.6.0/util/uiutil/event/keys.go (about)

     1  package event
     2  
     3  //go:generate stringer -type KeySym -output zkeys.go
     4  
     5  type KeySym int
     6  
     7  const (
     8  	KSymNone KeySym = 0
     9  
    10  	// let ascii codes keep their values (adding 256 ensures gap)
    11  	KSym_dummy_ KeySym = 256 + iota
    12  
    13  	KSym0
    14  	KSym1
    15  	KSym2
    16  	KSym3
    17  	KSym4
    18  	KSym5
    19  	KSym6
    20  	KSym7
    21  	KSym8
    22  	KSym9
    23  
    24  	KSymA
    25  	KSymB
    26  	KSymC
    27  	KSymD
    28  	KSymE
    29  	KSymF
    30  	KSymG
    31  	KSymH
    32  	KSymI
    33  	KSymJ
    34  	KSymK
    35  	KSymL
    36  	KSymM
    37  	KSymN
    38  	KSymO
    39  	KSymP
    40  	KSymQ
    41  	KSymR
    42  	KSymS
    43  	KSymT
    44  	KSymU
    45  	KSymV
    46  	KSymW
    47  	KSymX
    48  	KSymY
    49  	KSymZ
    50  
    51  	KSymSpace
    52  	KSymBackspace
    53  	KSymReturn
    54  	KSymEscape
    55  	KSymHome
    56  	KSymLeft
    57  	KSymUp
    58  	KSymRight
    59  	KSymDown
    60  	KSymPageUp
    61  	KSymPageDown
    62  	KSymEnd
    63  	KSymInsert
    64  	KSymShiftL
    65  	KSymShiftR
    66  	KSymControlL
    67  	KSymControlR
    68  	KSymAltL
    69  	KSymAltR
    70  	KSymAltGr
    71  	KSymSuperL // windows key
    72  	KSymSuperR
    73  	KSymDelete
    74  	KSymTab
    75  	KSymTabLeft
    76  
    77  	KSymNumLock
    78  	KSymCapsLock  // only capitalizes letters
    79  	KSymShiftLock // prints all keys secondary symbols
    80  
    81  	KSymExclam      // !
    82  	KSymDoubleQuote // "
    83  	KSymNumberSign  // #
    84  	KSymDollar      // $
    85  	KSymPercent     // %
    86  	KSymAmpersand   // &
    87  	KSymApostrophe  // '
    88  	KSymParentL     // (
    89  	KSymParentR     // )
    90  	KSymAsterisk    // *
    91  	KSymPlus        // +
    92  	KSymComma       // ,
    93  	KSymMinus       // -
    94  	KSymPeriod      // .
    95  	KSymSlash       // /
    96  	KSymBackSlash   // \
    97  	KSymColon       // :
    98  	KSymSemicolon   // ;
    99  	KSymLess        // <
   100  	KSymEqual       // =
   101  	KSymGreater     // >
   102  	KSymQuestion    // ?
   103  	KSymAt          // @
   104  	KSymBracketL    // [
   105  	KSymBracketR    // ]
   106  
   107  	KSymGrave      // `
   108  	KSymAcute      // ´
   109  	KSymCircumflex // ^
   110  	KSymTilde      // ~
   111  	KSymCedilla    // ¸
   112  	KSymBreve      // ˘
   113  	KSymCaron      // ˇ
   114  	KSymDiaresis   // ¨
   115  	KSymRingAbove  // ˚
   116  	KSymMacron     // ¯
   117  
   118  	KSymF1
   119  	KSymF2
   120  	KSymF3
   121  	KSymF4
   122  	KSymF5
   123  	KSymF6
   124  	KSymF7
   125  	KSymF8
   126  	KSymF9
   127  	KSymF10
   128  	KSymF11
   129  	KSymF12
   130  	KSymF13
   131  	KSymF14
   132  	KSymF15
   133  	KSymF16
   134  
   135  	KSymKeypad0
   136  	KSymKeypad1
   137  	KSymKeypad2
   138  	KSymKeypad3
   139  	KSymKeypad4
   140  	KSymKeypad5
   141  	KSymKeypad6
   142  	KSymKeypad7
   143  	KSymKeypad8
   144  	KSymKeypad9
   145  	KSymKeypadMultiply
   146  	KSymKeypadAdd
   147  	KSymKeypadSubtract
   148  	KSymKeypadDecimal
   149  	KSymKeypadDivide
   150  
   151  	KSymVolumeUp
   152  	KSymVolumeDown
   153  	KSymMute
   154  
   155  	KSymMultiKey
   156  	KSymMenu
   157  )
   158  
   159  //----------
   160  
   161  type KeyModifiers uint16
   162  
   163  func (km KeyModifiers) HasAny(m KeyModifiers) bool {
   164  	return km&m > 0
   165  }
   166  func (km KeyModifiers) Is(m KeyModifiers) bool {
   167  	return km == m
   168  }
   169  func (km KeyModifiers) ClearLocks() KeyModifiers {
   170  	w := []KeyModifiers{ModLock, ModNum}
   171  	u := km
   172  	for _, m := range w {
   173  		u &^= m
   174  	}
   175  	return u
   176  }
   177  
   178  const (
   179  	// TODO: rename to KMod
   180  	ModNone  KeyModifiers = 0
   181  	ModShift KeyModifiers = 1 << (iota - 1)
   182  	ModLock               // caps // TODO: rename ModCapsLock
   183  	ModCtrl
   184  	Mod1 // ~ alt
   185  	Mod2 // ~ num lock
   186  	Mod3
   187  	Mod4 // ~ windows key
   188  	Mod5 // ~ alt gr
   189  )
   190  const (
   191  	ModNum   = Mod2 // TODO: rename ModNumLock
   192  	ModAlt   = Mod1
   193  	ModAltGr = Mod5
   194  )
   195  
   196  //----------
   197  
   198  type MouseButton uint16
   199  
   200  const (
   201  	ButtonNone MouseButton = 0
   202  	ButtonLeft MouseButton = 1 << (iota - 1)
   203  	ButtonMiddle
   204  	ButtonRight
   205  	ButtonWheelUp
   206  	ButtonWheelDown
   207  	ButtonWheelLeft
   208  	ButtonWheelRight
   209  	ButtonBackward // TODO: rename X1?
   210  	ButtonForward  // TODO: rename X2?
   211  )
   212  
   213  //----------
   214  
   215  type MouseButtons uint16
   216  
   217  func (mb MouseButtons) Has(b MouseButton) bool {
   218  	return mb&MouseButtons(b) > 0
   219  }
   220  func (mb MouseButtons) HasAny(bs MouseButtons) bool {
   221  	return mb&bs > 0
   222  }
   223  func (mb MouseButtons) Is(b MouseButton) bool {
   224  	return mb == MouseButtons(b)
   225  }