forked from golang/mobile
-
Notifications
You must be signed in to change notification settings - Fork 5
/
keyboard.go
146 lines (139 loc) · 2.7 KB
/
keyboard.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package app
import "C"
import "github.com/fyne-io/mobile/event/key"
type KeyboardType int32
const (
// DefaultKeyboard is the keyboard with default input style and "return" return key
DefaultKeyboard KeyboardType = iota
// SingleLineKeyboard is the keyboard with default input style and "Done" return key
SingleLineKeyboard
// NumberKeyboard is the keyboard with number input style and "Done" return key
NumberKeyboard
)
//export keyboardTyped
func keyboardTyped(str *C.char) {
for _, r := range C.GoString(str) {
k := key.Event{
Rune: r,
Code: getCodeFromRune(r),
Direction: key.DirPress,
}
theApp.eventsIn <- k
k.Direction = key.DirRelease
theApp.eventsIn <- k
}
}
//export keyboardDelete
func keyboardDelete() {
theApp.eventsIn <- key.Event{
Code: key.CodeDeleteBackspace,
Direction: key.DirPress,
}
theApp.eventsIn <- key.Event{
Code: key.CodeDeleteBackspace,
Direction: key.DirRelease,
}
}
func getCodeFromRune(r rune) key.Code {
switch r {
case '0':
return key.Code0
case '1':
return key.Code1
case '2':
return key.Code2
case '3':
return key.Code3
case '4':
return key.Code4
case '5':
return key.Code5
case '6':
return key.Code6
case '7':
return key.Code7
case '8':
return key.Code8
case '9':
return key.Code9
case 'a', 'A':
return key.CodeA
case 'b', 'B':
return key.CodeB
case 'c', 'C':
return key.CodeC
case 'd', 'D':
return key.CodeD
case 'e', 'E':
return key.CodeE
case 'f', 'F':
return key.CodeF
case 'g', 'G':
return key.CodeG
case 'h', 'H':
return key.CodeH
case 'i', 'I':
return key.CodeI
case 'j', 'J':
return key.CodeJ
case 'k', 'K':
return key.CodeK
case 'l', 'L':
return key.CodeL
case 'm', 'M':
return key.CodeM
case 'n', 'N':
return key.CodeN
case 'o', 'O':
return key.CodeO
case 'p', 'P':
return key.CodeP
case 'q', 'Q':
return key.CodeQ
case 'r', 'R':
return key.CodeR
case 's', 'S':
return key.CodeS
case 't', 'T':
return key.CodeT
case 'u', 'U':
return key.CodeU
case 'v', 'V':
return key.CodeV
case 'w', 'W':
return key.CodeW
case 'x', 'X':
return key.CodeX
case 'y', 'Y':
return key.CodeY
case 'z', 'Z':
return key.CodeZ
case ',':
return key.CodeComma
case '.':
return key.CodeFullStop
case ' ':
return key.CodeSpacebar
case '\n':
return key.CodeReturnEnter
case '`':
return key.CodeGraveAccent
case '-':
return key.CodeHyphenMinus
case '=':
return key.CodeEqualSign
case '[':
return key.CodeLeftSquareBracket
case ']':
return key.CodeRightSquareBracket
case '\\':
return key.CodeBackslash
case ';':
return key.CodeSemicolon
case '\'':
return key.CodeApostrophe
case '/':
return key.CodeSlash
}
return key.CodeUnknown
}