aboutsummaryrefslogtreecommitdiff
path: root/ui/widget
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2018-03-23 01:07:44 +0200
committerTulir Asokan <tulir@maunium.net>2018-03-23 01:20:26 +0200
commita3f48093ebd8fcc3dc2ffefc727378ae8dca7269 (patch)
treea27d46999800d480c5bdc17b7285e6f203dc41f9 /ui/widget
parent16635dcde7b3402e7eff44864b4dba5a2ddd8a37 (diff)
gofmt and govet
Diffstat (limited to 'ui/widget')
-rw-r--r--ui/widget/advanced-inputfield.go54
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
}