Added horizontal scrolling in TextEdit
This commit is contained in:
parent
314a50c385
commit
a6674fb918
@ -239,10 +239,18 @@ func (t *TextEdit) SetLineCol(line, col int) {
|
|||||||
t.scrolly = line
|
t.scrolly = line
|
||||||
}
|
}
|
||||||
|
|
||||||
|
columnWidth := t.getColumnWidth()
|
||||||
|
|
||||||
|
// Scroll the screen horizontally when going to columns out of view
|
||||||
|
if col+tabOffset >= t.scrollx+(t.width-columnWidth-1) { // If the new column is right of view
|
||||||
|
t.scrollx = (col + tabOffset) - (t.width - columnWidth) + 1 // Scroll just enough to view that column
|
||||||
|
} else if col+tabOffset < t.scrollx { // If the new column is left of view
|
||||||
|
t.scrollx = col + tabOffset // Scroll left enough to view that column
|
||||||
|
}
|
||||||
|
|
||||||
t.cury, t.curx = line, col
|
t.cury, t.curx = line, col
|
||||||
if t.focused {
|
if t.focused {
|
||||||
columnWidth := t.getColumnWidth()
|
(*t.screen).ShowCursor(t.x+columnWidth+col+tabOffset-t.scrollx, t.y+line-t.scrolly)
|
||||||
(*t.screen).ShowCursor(t.x+columnWidth+col+tabOffset, t.y+line-t.scrolly)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,7 +325,16 @@ func (t *TextEdit) Draw(s tcell.Screen) {
|
|||||||
lineStr = t.buffer[line]
|
lineStr = t.buffer[line]
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawStr(s, t.x+columnWidth, lineY, lineStr, textEditStyle) // Draw line
|
lineRunes := []rune(lineStr)
|
||||||
|
if len(lineRunes) >= t.scrollx { // If some of the line is visible at our horizontal scroll...
|
||||||
|
lineRunes = lineRunes[t.scrollx:] // Trim left side of string we cannot see
|
||||||
|
|
||||||
|
if len(lineRunes) >= t.width-columnWidth { // If that trimmed line continues out of view to the right...
|
||||||
|
lineRunes = lineRunes[:t.width-columnWidth] // Trim right side of string we cannot see
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawStr(s, t.x+columnWidth, lineY, string(lineRunes), textEditStyle) // Draw line
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
columnStr := fmt.Sprintf("%s%s", strings.Repeat(" ", columnWidth-len(lineNumStr)), lineNumStr) // Right align line number
|
columnStr := fmt.Sprintf("%s%s", strings.Repeat(" ", columnWidth-len(lineNumStr)), lineNumStr) // Right align line number
|
||||||
@ -388,9 +405,9 @@ func (t *TextEdit) HandleEvent(event tcell.Event) bool {
|
|||||||
case tcell.KeyEnd:
|
case tcell.KeyEnd:
|
||||||
t.SetLineCol(t.cury, len(t.buffer[t.cury]))
|
t.SetLineCol(t.cury, len(t.buffer[t.cury]))
|
||||||
case tcell.KeyPgUp:
|
case tcell.KeyPgUp:
|
||||||
t.SetLineCol(t.scrolly - t.height, t.curx) // Go a page up
|
t.SetLineCol(t.scrolly-t.height, t.curx) // Go a page up
|
||||||
case tcell.KeyPgDn:
|
case tcell.KeyPgDn:
|
||||||
t.SetLineCol(t.scrolly + t.height*2 - 1, t.curx) // Go a page down
|
t.SetLineCol(t.scrolly+t.height*2-1, t.curx) // Go a page down
|
||||||
|
|
||||||
// Deleting
|
// Deleting
|
||||||
case tcell.KeyBackspace:
|
case tcell.KeyBackspace:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user