aboutsummaryrefslogtreecommitdiff
path: root/go/ui/textInput.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/ui/textInput.go')
-rw-r--r--go/ui/textInput.go67
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 }