Fix problem with calculation Bottomline

Fixes #432
This commit is contained in:
Zachary Yedidia 2016-10-26 12:29:23 -04:00
parent 7492ab4de2
commit 74610b8cd7

View file

@ -27,8 +27,7 @@ type View struct {
Cursor *Cursor
// The topmost line, used for vertical scrolling
Topline int
Bottomline int
Topline int
// The leftmost column, used for horizontal scrolling
leftCol int
@ -292,7 +291,7 @@ func (v *View) GetSoftWrapLocation(vx, vy int) (int, int) {
}
screenX, screenY := 0, v.Topline
for lineN := v.Topline; lineN < v.Bottomline; lineN++ {
for lineN := v.Topline; lineN < v.height; lineN++ {
line := v.Buf.Line(lineN)
colN := 0
@ -323,10 +322,41 @@ func (v *View) GetSoftWrapLocation(vx, vy int) (int, int) {
return 0, 0
}
func (v *View) Bottomline() int {
screenX, screenY := 0, 0
numLines := 0
for lineN := v.Topline; lineN < v.Topline+v.height; lineN++ {
line := v.Buf.Line(lineN)
colN := 0
for _, ch := range line {
if screenX >= v.width-v.lineNumOffset {
screenX = 0
screenY++
}
if ch == '\t' {
screenX += int(v.Buf.Settings["tabsize"].(float64)) - 1
}
screenX++
colN++
}
screenX = 0
screenY++
numLines++
if screenY >= v.height {
break
}
}
return numLines + v.Topline
}
// Relocate moves the view window so that the cursor is in view
// This is useful if the user has scrolled far away, and then starts typing
func (v *View) Relocate() bool {
height := v.Bottomline - v.Topline
height := v.Bottomline() - v.Topline
ret := false
cy := v.Cursor.Y
scrollmargin := int(v.Buf.Settings["scrollmargin"].(float64))
@ -911,10 +941,6 @@ func (v *View) DisplayView() {
}
}
}
v.Bottomline = curLineN
if !v.Buf.Settings["softwrap"].(bool) {
v.Bottomline++
}
}
// DisplayCursor draws the current buffer's cursor to the screen