diff options
author | Tulir Asokan <tulir@maunium.net> | 2018-03-23 01:07:44 +0200 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2018-03-23 01:20:26 +0200 |
commit | a3f48093ebd8fcc3dc2ffefc727378ae8dca7269 (patch) | |
tree | a27d46999800d480c5bdc17b7285e6f203dc41f9 /ui/widget | |
parent | 16635dcde7b3402e7eff44864b4dba5a2ddd8a37 (diff) |
gofmt and govet
Diffstat (limited to 'ui/widget')
-rw-r--r-- | ui/widget/advanced-inputfield.go | 54 |
1 files changed, 32 insertions, 22 deletions
diff --git a/ui/widget/advanced-inputfield.go b/ui/widget/advanced-inputfield.go index 4948247..f74ce29 100644 --- a/ui/widget/advanced-inputfield.go +++ b/ui/widget/advanced-inputfield.go @@ -222,23 +222,9 @@ func (field *AdvancedInputField) SetFinishedFunc(handler func(key tcell.Key)) tv return field.SetDoneFunc(handler) } -// Draw draws this primitive onto the screen. -func (field *AdvancedInputField) Draw(screen tcell.Screen) { - field.Box.Draw(screen) - - // Prepare - x, y, width, height := field.GetInnerRect() - rightLimit := x + width - if height < 1 || rightLimit <= x { - return - } - - // Draw label. - _, drawnWidth := tview.Print(screen, field.label, x, y, rightLimit-x, tview.AlignLeft, field.labelColor) - x += drawnWidth - - // Draw input area. - fieldWidth := field.fieldWidth +// drawInput calculates the field width and draws the background. +func (field *AdvancedInputField) drawInput(screen tcell.Screen, rightLimit, x, y int) (fieldWidth int) { + fieldWidth = field.fieldWidth if fieldWidth == 0 { fieldWidth = math.MaxInt32 } @@ -249,13 +235,16 @@ func (field *AdvancedInputField) Draw(screen tcell.Screen) { for index := 0; index < fieldWidth; index++ { screen.SetContent(x+index, y, ' ', nil, fieldStyle) } + return +} - text := field.text +// prepareText prepares the text to be displayed and recalculates the view and cursor offsets. +func (field *AdvancedInputField) prepareText(screen tcell.Screen, fieldWidth, x, y int) (text string) { + text = field.text if text == "" && field.placeholder != "" { tview.Print(screen, field.placeholder, x, y, fieldWidth, tview.AlignLeft, field.placeholderTextColor) } - // Draw entered text. if field.maskCharacter > 0 { text = strings.Repeat(string(field.maskCharacter), utf8.RuneCountInString(field.text)) } @@ -264,7 +253,6 @@ func (field *AdvancedInputField) Draw(screen tcell.Screen) { fieldWidth-- } - // Recalculate view offset if field.cursorOffset < field.viewOffset { field.viewOffset = field.cursorOffset } else if field.cursorOffset > field.viewOffset+fieldWidth { @@ -272,12 +260,16 @@ func (field *AdvancedInputField) Draw(screen tcell.Screen) { } else if textWidth-field.viewOffset < fieldWidth { field.viewOffset = textWidth - fieldWidth } - // Make sure view offset didn't become negative + if field.viewOffset < 0 { field.viewOffset = 0 } - // Draw entered text. + return +} + +// drawText draws the text and the cursor. +func (field *AdvancedInputField) drawText(screen tcell.Screen, fieldWidth, x, y int, text string) { runes := []rune(text) relPos := 0 for pos := field.viewOffset; pos <= fieldWidth+field.viewOffset && pos < len(runes); pos++ { @@ -298,6 +290,24 @@ func (field *AdvancedInputField) Draw(screen tcell.Screen) { } } +// Draw draws this primitive onto the screen. +func (field *AdvancedInputField) Draw(screen tcell.Screen) { + field.Box.Draw(screen) + + x, y, width, height := field.GetInnerRect() + rightLimit := x + width + if height < 1 || rightLimit <= x { + return + } + + _, drawnWidth := tview.Print(screen, field.label, x, y, rightLimit-x, tview.AlignLeft, field.labelColor) + x += drawnWidth + + fieldWidth := field.drawInput(screen, rightLimit, x, y) + text := field.prepareText(screen, fieldWidth, x, y) + field.drawText(screen, fieldWidth, x, y, text) +} + func (field *AdvancedInputField) GetCursorOffset() int { return field.cursorOffset } |