keyboard.go 2.6 KB

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