diff options
Diffstat (limited to 'go/ui/textInput.go')
| -rw-r--r-- | go/ui/textInput.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/go/ui/textInput.go b/go/ui/textInput.go new file mode 100644 index 00000000..3a7939c8 --- /dev/null +++ b/go/ui/textInput.go @@ -0,0 +1,67 @@ +package ui + +import ( + "github.com/hajimehoshi/ebiten/v2" + "github.com/hajimehoshi/ebiten/v2/inpututil" +) + +type TextInput struct { + TextBox + input string + label string + focused bool +} + +func (ti *TextInput) InitTextInput(x, y int, width, height int, label string) { + ti.TextBox = *(NewFixedTextBox(x, y, width, height, "").Centering(true)) + ti.input = "" + ti.label = label + + ti.renderImpl = func() *ebiten.Image { + if ti.input == "" { + ti.text = ti.label + } else { + ti.text = ti.input + } + + return ti.render() + } +} + +func NewTextInput(x, y int, width, height int, label string) *TextInput { + w := &TextInput{} + w.InitTextInput(x, y, width, height, label) + return w +} + +func (ti *TextInput) SetInput(input string) { + ti.input = input + ti.ForceRedraw() +} + +func (ti *TextInput) AddInput(input []rune) { + ti.SetInput(ti.input + string(input)) +} + +func (ti *TextInput) HandleKey() { + if inpututil.IsKeyJustPressed(ebiten.KeyBackspace) { + if len(ti.input) > 0 { + ti.input = ti.input[:len(ti.input)-1] + ti.ForceRedraw() + } + } +} + +func (ti *TextInput) Text() string { + return ti.input +} + +// return the text or use label as fallback +func (ti *TextInput) TextOrLabel() string { + if ti.input != "" { + return ti.input + } + return ti.label +} + +func (*TextInput) IsFocusable() bool { return true } |
