176 lines
2.6 KiB
Go
176 lines
2.6 KiB
Go
|
|
// The contents of this file is free and unencumbered software released into
|
||
|
|
// the public domain. Refer to <http://unlicense.org/> for more information.
|
||
|
|
// Src: https://github.com/yakshaveinc/go-keycodes/blob/master/keycodes.go
|
||
|
|
|
||
|
|
package keycodes
|
||
|
|
|
||
|
|
import "fmt"
|
||
|
|
|
||
|
|
type KeyCode uint8
|
||
|
|
|
||
|
|
func (k KeyCode) String() string {
|
||
|
|
if k == KeyUnset {
|
||
|
|
return "unset"
|
||
|
|
}
|
||
|
|
return fmt.Sprintf("Key(%d)", k)
|
||
|
|
}
|
||
|
|
|
||
|
|
// note: similar keys have different key codes, like Enter and
|
||
|
|
// Keypad Enter
|
||
|
|
|
||
|
|
// cross-platform key codes, compatible with SDL 2 and USB HID speccy
|
||
|
|
// https://hg.libsdl.org/SDL/file/default/include/SDL_scancode.h
|
||
|
|
// http://www.usb.org/developers/hidpage/Hut1_12v2.pdf (page 53)
|
||
|
|
|
||
|
|
// key for codes 0 - 3 are not present on keyboards, they are:
|
||
|
|
// 0 - Reserved (no event)
|
||
|
|
// 1 - ErrorRollOver
|
||
|
|
// 2 - POSTFail
|
||
|
|
// 3 - ErrorUndefined
|
||
|
|
|
||
|
|
const (
|
||
|
|
KeyA KeyCode = 4 + iota
|
||
|
|
KeyB
|
||
|
|
KeyC
|
||
|
|
KeyD
|
||
|
|
KeyE
|
||
|
|
KeyF
|
||
|
|
KeyG
|
||
|
|
KeyH
|
||
|
|
KeyI
|
||
|
|
KeyJ
|
||
|
|
KeyK
|
||
|
|
KeyL
|
||
|
|
KeyM
|
||
|
|
KeyN
|
||
|
|
KeyO
|
||
|
|
KeyP
|
||
|
|
KeyQ
|
||
|
|
KeyR
|
||
|
|
KeyS
|
||
|
|
KeyT
|
||
|
|
KeyU
|
||
|
|
KeyV
|
||
|
|
KeyW
|
||
|
|
KeyX
|
||
|
|
KeyY
|
||
|
|
KeyZ
|
||
|
|
)
|
||
|
|
const (
|
||
|
|
Key1 KeyCode = 30 + iota
|
||
|
|
Key2
|
||
|
|
Key3
|
||
|
|
Key4
|
||
|
|
Key5
|
||
|
|
Key6
|
||
|
|
Key7
|
||
|
|
Key8
|
||
|
|
Key9
|
||
|
|
Key0
|
||
|
|
)
|
||
|
|
const (
|
||
|
|
// choice is to use Enter name instead of Return
|
||
|
|
// and the key code is different from Keypad Enter
|
||
|
|
KeyEnter KeyCode = 40 + iota
|
||
|
|
KeyEscape
|
||
|
|
KeyBackspace
|
||
|
|
KeyTab
|
||
|
|
KeySpace
|
||
|
|
// keypad minus has different key code
|
||
|
|
KeyMinus
|
||
|
|
KeyEquals
|
||
|
|
KeyLeftBracket
|
||
|
|
KeyRightBracket
|
||
|
|
KeyBackslash
|
||
|
|
)
|
||
|
|
|
||
|
|
// key code number 50 is skipped, because it is unclear
|
||
|
|
// where is the key, and what is its name and function
|
||
|
|
|
||
|
|
const (
|
||
|
|
// different name from SDL2 for brevity
|
||
|
|
KeyColon KeyCode = 51 + iota
|
||
|
|
KeyApostrophe
|
||
|
|
// KeyTilde is an alias
|
||
|
|
KeyGrave
|
||
|
|
KeyCommad
|
||
|
|
// KeyDot is an alias, keypad period is a different
|
||
|
|
KeyPeriod
|
||
|
|
Slash
|
||
|
|
CapsLock
|
||
|
|
)
|
||
|
|
const KeyTilde = KeyGrave
|
||
|
|
const KeyDot = KeyPeriod
|
||
|
|
|
||
|
|
const (
|
||
|
|
KeyF1 KeyCode = 58 + iota
|
||
|
|
KeyF2
|
||
|
|
KeyF3
|
||
|
|
KeyF4
|
||
|
|
KeyF5
|
||
|
|
KeyF6
|
||
|
|
KeyF7
|
||
|
|
KeyF8
|
||
|
|
KeyF9
|
||
|
|
KeyF10
|
||
|
|
KeyF11
|
||
|
|
KeyF12
|
||
|
|
)
|
||
|
|
const (
|
||
|
|
KeyPrintScreen KeyCode = 70 + iota
|
||
|
|
KeyScrollLock
|
||
|
|
KeyPause
|
||
|
|
KeyInsert
|
||
|
|
KeyHome
|
||
|
|
KeyPageUp
|
||
|
|
KeyDelete
|
||
|
|
KeyEnd
|
||
|
|
KeyPageDown
|
||
|
|
KeyRight
|
||
|
|
KeyLeft
|
||
|
|
KeyDown
|
||
|
|
KeyUp
|
||
|
|
)
|
||
|
|
const (
|
||
|
|
KeyNumLock KeyCode = 83 + iota
|
||
|
|
KeyKpDivide
|
||
|
|
KeyKpMultiply
|
||
|
|
KeyKpMinus
|
||
|
|
KeyKpPlus
|
||
|
|
KeyKpEnter
|
||
|
|
KeyKp1
|
||
|
|
KeyKp2
|
||
|
|
KeyKp3
|
||
|
|
KeyKp4
|
||
|
|
KeyKp5
|
||
|
|
KeyKp6
|
||
|
|
KeyKp7
|
||
|
|
KeyKp8
|
||
|
|
KeyKp9
|
||
|
|
KeyKp0
|
||
|
|
// KeyKpDot is an alias
|
||
|
|
KeyKpPeriod
|
||
|
|
)
|
||
|
|
const KeyKpDot = KeyKpPeriod
|
||
|
|
|
||
|
|
// key code 100 is skipped, because I can not find the key
|
||
|
|
// key code 101 is not present on Mac
|
||
|
|
// key codes 102-223 are not present on PC
|
||
|
|
|
||
|
|
const (
|
||
|
|
KeyLCtrl KeyCode = 224 + iota
|
||
|
|
KeyLShift
|
||
|
|
KeyLAlt
|
||
|
|
// KeyLWin is an alias
|
||
|
|
KeyLGUI
|
||
|
|
KeyRCtrl
|
||
|
|
KeyRShift
|
||
|
|
KeyRAlt
|
||
|
|
// KeyRWin is an alias
|
||
|
|
KeyRGUI
|
||
|
|
)
|
||
|
|
const KeyLWin = KeyLGUI
|
||
|
|
const KeyRWin = KeyRGUI
|
||
|
|
|
||
|
|
const KeyUnset = 255
|