Adding upstream version 0.0~git20250520.a1d9079+dfsg.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
590ac7ff5f
commit
20149b7f3a
456 changed files with 70406 additions and 0 deletions
270
event/key/key.go
Normal file
270
event/key/key.go
Normal file
|
@ -0,0 +1,270 @@
|
|||
// Copyright 2015 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:generate stringer -type=Code
|
||||
|
||||
// Package key defines an event for physical keyboard keys.
|
||||
//
|
||||
// On-screen software keyboards do not send key events.
|
||||
//
|
||||
// See the golang.org/x/mobile/app package for details on the event model.
|
||||
package key
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Event is a key event.
|
||||
type Event struct {
|
||||
// Rune is the meaning of the key event as determined by the
|
||||
// operating system. The mapping is determined by system-dependent
|
||||
// current layout, modifiers, lock-states, etc.
|
||||
//
|
||||
// If non-negative, it is a Unicode codepoint: pressing the 'a' key
|
||||
// generates different Runes 'a' or 'A' (but the same Code) depending on
|
||||
// the state of the shift key.
|
||||
//
|
||||
// If -1, the key does not generate a Unicode codepoint. To distinguish
|
||||
// them, look at Code.
|
||||
Rune rune
|
||||
|
||||
// Code is the identity of the physical key relative to a notional
|
||||
// "standard" keyboard, independent of current layout, modifiers,
|
||||
// lock-states, etc
|
||||
//
|
||||
// For standard key codes, its value matches USB HID key codes.
|
||||
// Compare its value to uint32-typed constants in this package, such
|
||||
// as CodeLeftShift and CodeEscape.
|
||||
//
|
||||
// Pressing the regular '2' key and number-pad '2' key (with Num-Lock)
|
||||
// generate different Codes (but the same Rune).
|
||||
Code Code
|
||||
|
||||
// Modifiers is a bitmask representing a set of modifier keys: ModShift,
|
||||
// ModAlt, etc.
|
||||
Modifiers Modifiers
|
||||
|
||||
// Direction is the direction of the key event: DirPress, DirRelease,
|
||||
// or DirNone (for key repeats).
|
||||
Direction Direction
|
||||
|
||||
// TODO: add a Device ID, for multiple input devices?
|
||||
// TODO: add a time.Time?
|
||||
}
|
||||
|
||||
func (e Event) String() string {
|
||||
if e.Rune >= 0 {
|
||||
return fmt.Sprintf("key.Event{%q (%v), %v, %v}", e.Rune, e.Code, e.Modifiers, e.Direction)
|
||||
}
|
||||
return fmt.Sprintf("key.Event{(%v), %v, %v}", e.Code, e.Modifiers, e.Direction)
|
||||
}
|
||||
|
||||
// Direction is the direction of the key event.
|
||||
type Direction uint8
|
||||
|
||||
const (
|
||||
DirNone Direction = 0
|
||||
DirPress Direction = 1
|
||||
DirRelease Direction = 2
|
||||
)
|
||||
|
||||
// Modifiers is a bitmask representing a set of modifier keys.
|
||||
type Modifiers uint32
|
||||
|
||||
const (
|
||||
ModShift Modifiers = 1 << 0
|
||||
ModControl Modifiers = 1 << 1
|
||||
ModAlt Modifiers = 1 << 2
|
||||
ModMeta Modifiers = 1 << 3 // called "Command" on OS X
|
||||
)
|
||||
|
||||
// Code is the identity of a key relative to a notional "standard" keyboard.
|
||||
type Code uint32
|
||||
|
||||
// Physical key codes.
|
||||
//
|
||||
// For standard key codes, its value matches USB HID key codes.
|
||||
// TODO: add missing codes.
|
||||
const (
|
||||
CodeUnknown Code = 0
|
||||
|
||||
CodeA Code = 4
|
||||
CodeB Code = 5
|
||||
CodeC Code = 6
|
||||
CodeD Code = 7
|
||||
CodeE Code = 8
|
||||
CodeF Code = 9
|
||||
CodeG Code = 10
|
||||
CodeH Code = 11
|
||||
CodeI Code = 12
|
||||
CodeJ Code = 13
|
||||
CodeK Code = 14
|
||||
CodeL Code = 15
|
||||
CodeM Code = 16
|
||||
CodeN Code = 17
|
||||
CodeO Code = 18
|
||||
CodeP Code = 19
|
||||
CodeQ Code = 20
|
||||
CodeR Code = 21
|
||||
CodeS Code = 22
|
||||
CodeT Code = 23
|
||||
CodeU Code = 24
|
||||
CodeV Code = 25
|
||||
CodeW Code = 26
|
||||
CodeX Code = 27
|
||||
CodeY Code = 28
|
||||
CodeZ Code = 29
|
||||
|
||||
Code1 Code = 30
|
||||
Code2 Code = 31
|
||||
Code3 Code = 32
|
||||
Code4 Code = 33
|
||||
Code5 Code = 34
|
||||
Code6 Code = 35
|
||||
Code7 Code = 36
|
||||
Code8 Code = 37
|
||||
Code9 Code = 38
|
||||
Code0 Code = 39
|
||||
|
||||
CodeReturnEnter Code = 40
|
||||
CodeEscape Code = 41
|
||||
CodeDeleteBackspace Code = 42
|
||||
CodeTab Code = 43
|
||||
CodeSpacebar Code = 44
|
||||
CodeHyphenMinus Code = 45 // -
|
||||
CodeEqualSign Code = 46 // =
|
||||
CodeLeftSquareBracket Code = 47 // [
|
||||
CodeRightSquareBracket Code = 48 // ]
|
||||
CodeBackslash Code = 49 // \
|
||||
CodeSemicolon Code = 51 // ;
|
||||
CodeApostrophe Code = 52 // '
|
||||
CodeGraveAccent Code = 53 // `
|
||||
CodeComma Code = 54 // ,
|
||||
CodeFullStop Code = 55 // .
|
||||
CodeSlash Code = 56 // /
|
||||
CodeCapsLock Code = 57
|
||||
|
||||
CodeF1 Code = 58
|
||||
CodeF2 Code = 59
|
||||
CodeF3 Code = 60
|
||||
CodeF4 Code = 61
|
||||
CodeF5 Code = 62
|
||||
CodeF6 Code = 63
|
||||
CodeF7 Code = 64
|
||||
CodeF8 Code = 65
|
||||
CodeF9 Code = 66
|
||||
CodeF10 Code = 67
|
||||
CodeF11 Code = 68
|
||||
CodeF12 Code = 69
|
||||
|
||||
CodePause Code = 72
|
||||
CodeInsert Code = 73
|
||||
CodeHome Code = 74
|
||||
CodePageUp Code = 75
|
||||
CodeDeleteForward Code = 76
|
||||
CodeEnd Code = 77
|
||||
CodePageDown Code = 78
|
||||
|
||||
CodeRightArrow Code = 79
|
||||
CodeLeftArrow Code = 80
|
||||
CodeDownArrow Code = 81
|
||||
CodeUpArrow Code = 82
|
||||
|
||||
CodeKeypadNumLock Code = 83
|
||||
CodeKeypadSlash Code = 84 // /
|
||||
CodeKeypadAsterisk Code = 85 // *
|
||||
CodeKeypadHyphenMinus Code = 86 // -
|
||||
CodeKeypadPlusSign Code = 87 // +
|
||||
CodeKeypadEnter Code = 88
|
||||
CodeKeypad1 Code = 89
|
||||
CodeKeypad2 Code = 90
|
||||
CodeKeypad3 Code = 91
|
||||
CodeKeypad4 Code = 92
|
||||
CodeKeypad5 Code = 93
|
||||
CodeKeypad6 Code = 94
|
||||
CodeKeypad7 Code = 95
|
||||
CodeKeypad8 Code = 96
|
||||
CodeKeypad9 Code = 97
|
||||
CodeKeypad0 Code = 98
|
||||
CodeKeypadFullStop Code = 99 // .
|
||||
CodeKeypadEqualSign Code = 103 // =
|
||||
|
||||
CodeF13 Code = 104
|
||||
CodeF14 Code = 105
|
||||
CodeF15 Code = 106
|
||||
CodeF16 Code = 107
|
||||
CodeF17 Code = 108
|
||||
CodeF18 Code = 109
|
||||
CodeF19 Code = 110
|
||||
CodeF20 Code = 111
|
||||
CodeF21 Code = 112
|
||||
CodeF22 Code = 113
|
||||
CodeF23 Code = 114
|
||||
CodeF24 Code = 115
|
||||
|
||||
CodeHelp Code = 117
|
||||
|
||||
CodeMute Code = 127
|
||||
CodeVolumeUp Code = 128
|
||||
CodeVolumeDown Code = 129
|
||||
|
||||
CodeLeftControl Code = 224
|
||||
CodeLeftShift Code = 225
|
||||
CodeLeftAlt Code = 226
|
||||
CodeLeftGUI Code = 227
|
||||
CodeRightControl Code = 228
|
||||
CodeRightShift Code = 229
|
||||
CodeRightAlt Code = 230
|
||||
CodeRightGUI Code = 231
|
||||
|
||||
// The following codes are not part of the standard USB HID Usage IDs for
|
||||
// keyboards. See http://www.usb.org/developers/hidpage/Hut1_12v2.pdf
|
||||
//
|
||||
// Usage IDs are uint16s, so these non-standard values start at 0x10000.
|
||||
|
||||
// CodeCompose is the Code for a compose key, sometimes called a multi key,
|
||||
// used to input non-ASCII characters such as ñ being composed of n and ~.
|
||||
//
|
||||
// See https://en.wikipedia.org/wiki/Compose_key
|
||||
CodeCompose Code = 0x10000
|
||||
)
|
||||
|
||||
// TODO: Given we use runes outside the unicode space, should we provide a
|
||||
// printing function? Related: it's a little unfortunate that printing a
|
||||
// key.Event with %v gives not very readable output like:
|
||||
// {100 7 key.Modifiers() Press}
|
||||
|
||||
var mods = [...]struct {
|
||||
m Modifiers
|
||||
s string
|
||||
}{
|
||||
{ModShift, "Shift"},
|
||||
{ModControl, "Control"},
|
||||
{ModAlt, "Alt"},
|
||||
{ModMeta, "Meta"},
|
||||
}
|
||||
|
||||
func (m Modifiers) String() string {
|
||||
var match []string
|
||||
for _, mod := range mods {
|
||||
if mod.m&m != 0 {
|
||||
match = append(match, mod.s)
|
||||
}
|
||||
}
|
||||
return "key.Modifiers(" + strings.Join(match, "|") + ")"
|
||||
}
|
||||
|
||||
func (d Direction) String() string {
|
||||
switch d {
|
||||
case DirNone:
|
||||
return "None"
|
||||
case DirPress:
|
||||
return "Press"
|
||||
case DirRelease:
|
||||
return "Release"
|
||||
default:
|
||||
return fmt.Sprintf("key.Direction(%d)", d)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue