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  }