Only truncate change ranges to the last visible row if the last rendered row is smaller

This happens, for example, when the entire buffer is shorter than the number of rows on screen. In this case, the last rendered row is not smaller than the last possible visible row.
This commit is contained in:
Nathan Sobo
2012-05-29 13:03:29 -06:00
parent c00c3317f0
commit a9c9a854ac
2 changed files with 7 additions and 10 deletions

View File

@@ -309,9 +309,6 @@ class Editor extends View
renderFrom = Math.max(0, firstVisibleScreenRow - @lineOverdraw)
renderTo = Math.min(@getLastScreenRow(), lastVisibleScreenRow + @lineOverdraw)
console.log "Lines we have: %d-%d", @firstRenderedScreenRow, @lastRenderedScreenRow
console.log "Lines we want: %d-%d", renderFrom, renderTo
if firstVisibleScreenRow < @firstRenderedScreenRow
@removeLineElements(Math.max(@firstRenderedScreenRow, renderTo + 1), @lastRenderedScreenRow)
@lastRenderedScreenRow = renderTo
@@ -451,14 +448,13 @@ class Editor extends View
oldScreenRange = e.oldRange
newScreenRange = e.newRange
@renderer.logLines()
@compositeCursor.updateBufferPosition() unless e.bufferChanged
if @attached
if e.lineNumbersChanged
@gutter.renderLineNumbers(@getFirstVisibleScreenRow(), @getLastVisibleScreenRow())
firstVisibleScreenRow = @getFirstVisibleScreenRow()
lastVisibleScreenRow = @getLastVisibleScreenRow()
@gutter.renderLineNumbers(firstVisibleScreenRow, lastVisibleScreenRow) if e.lineNumbersChanged
@verticalScrollbarContent.height(@lineHeight * @screenLineCount())
return if oldScreenRange.start.row > @lastRenderedScreenRow
@@ -475,9 +471,10 @@ class Editor extends View
oldScreenRange.end.row += delta
newScreenRange.start.row = Math.max(newScreenRange.start.row, @firstRenderedScreenRow)
newScreenRange.end.row = Math.min(newScreenRange.end.row, @lastRenderedScreenRow)
oldScreenRange.start.row = Math.max(oldScreenRange.start.row, @firstRenderedScreenRow)
oldScreenRange.end.row = Math.min(oldScreenRange.end.row, @lastRenderedScreenRow)
maxEndRow = Math.max(lastVisibleScreenRow, @lastRenderedScreenRow)
newScreenRange.end.row = Math.min(newScreenRange.end.row, maxEndRow)
oldScreenRange.end.row = Math.min(oldScreenRange.end.row, maxEndRow)
lineElements = @buildLineElements(newScreenRange.start.row, newScreenRange.end.row)
@replaceLineElements(oldScreenRange.start.row, oldScreenRange.end.row, lineElements)