diff options
Diffstat (limited to 'lib/ui')
-rw-r--r-- | lib/ui/text.go | 2 | ||||
-rw-r--r-- | lib/ui/textinput.go | 31 |
2 files changed, 23 insertions, 10 deletions
diff --git a/lib/ui/text.go b/lib/ui/text.go index 8aea8eb..2b82598 100644 --- a/lib/ui/text.go +++ b/lib/ui/text.go @@ -77,7 +77,7 @@ func (t *Text) Draw(ctx *Context) { style = style.Reverse(true) } ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', style) - ctx.Printf(x, 0, style, t.text) + ctx.Printf(x, 0, style, "%s", t.text) } func (t *Text) Invalidate() { diff --git a/lib/ui/textinput.go b/lib/ui/textinput.go index 4a5308e..ce443c3 100644 --- a/lib/ui/textinput.go +++ b/lib/ui/textinput.go @@ -10,14 +10,15 @@ import ( type TextInput struct { Invalidatable - cells int - ctx *Context - focus bool - index int - prompt string - scroll int - text []rune - change []func(ti *TextInput) + cells int + ctx *Context + focus bool + index int + password bool + prompt string + scroll int + text []rune + change []func(ti *TextInput) } // Creates a new TextInput. TextInputs will render a "textbox" in the entire @@ -31,6 +32,11 @@ func NewTextInput(text string) *TextInput { } } +func (ti *TextInput) Password(password bool) *TextInput { + ti.password = password + return ti +} + func (ti *TextInput) Prompt(prompt string) *TextInput { ti.prompt = prompt return ti @@ -42,6 +48,7 @@ func (ti *TextInput) String() string { func (ti *TextInput) Set(value string) { ti.text = []rune(value) + ti.index = len(ti.text) } func (ti *TextInput) Invalidate() { @@ -51,7 +58,13 @@ func (ti *TextInput) Invalidate() { func (ti *TextInput) Draw(ctx *Context) { ti.ctx = ctx // gross ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', tcell.StyleDefault) - ctx.Printf(0, 0, tcell.StyleDefault, "%s%s", ti.prompt, string(ti.text)) + if ti.password { + x := ctx.Printf(0, 0, tcell.StyleDefault, "%s", ti.prompt) + cells := runewidth.StringWidth(string(ti.text)) + ctx.Fill(x, 0, cells, 1, '*', tcell.StyleDefault) + } else { + ctx.Printf(0, 0, tcell.StyleDefault, "%s%s", ti.prompt, string(ti.text)) + } cells := runewidth.StringWidth(string(ti.text[:ti.index]) + ti.prompt) if cells != ti.cells && ti.focus { ctx.SetCursor(cells, 0) |