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