Buffer change events update the @lastRenderedScreenRow

This commit is contained in:
Corey Johnson
2012-05-15 12:29:28 -07:00
parent 63d53af577
commit 54a3823606
2 changed files with 15 additions and 5 deletions

View File

@@ -486,6 +486,15 @@ describe "Editor", ->
expect(editor.lines.find('.line:first').text()).toBe buffer.lineForRow(0)
expect(editor.lines.find('.line:last').text()).toBe buffer.lineForRow(9)
it "renders correctly when scrolling after buffer change", ->
editor.attachToDom(heightInLines: 5.5)
editor.insertText("1\n")
_.times 4, ->
editor.moveCursorDown()
editor.verticalScrollbar.trigger 'scroll'
expect(editor.lines.find('.line:eq(0)').text()).toBe editor.buffer.lineForRow(2)
expect(editor.lines.find('.line:eq(5)').text()).toBe editor.buffer.lineForRow(7)
describe "gutter rendering", ->
beforeEach ->
editor.attachToDom(heightInLines: 5.5)

View File

@@ -404,16 +404,18 @@ class Editor extends View
@compositeSelection.handleBufferChange(e)
handleRendererChange: (e) ->
{ oldRange, newRange } = e
unless newRange.isSingleLine() and newRange.coversSameRows(oldRange)
oldScreenRange = e.oldRange
newScreenRange = e.newRange
unless newScreenRange.isSingleLine() and newScreenRange.coversSameRows(oldScreenRange)
@gutter.renderLineNumbers(@getFirstVisibleScreenRow(), @getLastVisibleScreenRow())
@compositeCursor.updateBufferPosition() unless e.bufferChanged
if @attached
lineElements = @buildLineElements(newRange.start.row, newRange.end.row)
@replaceLineElements(oldRange.start.row, oldRange.end.row, lineElements)
lineElements = @buildLineElements(newScreenRange.start.row, newScreenRange.end.row)
@replaceLineElements(oldScreenRange.start.row, oldScreenRange.end.row, lineElements)
@verticalScrollbarContent.height(@lineHeight * @screenLineCount())
@lastRenderedScreenRow += newScreenRange.end.row - oldScreenRange.end.row
buildLineElements: (startRow, endRow) ->
charWidth = @charWidth
@@ -448,7 +450,6 @@ class Editor extends View
startRow = startScreenRow - @firstRenderedScreenRow
endRow = startRow + rowCount
elementToInsertBefore = @lineCache[startRow]
elementsToReplace = @lineCache[startRow...endRow]
@lineCache[startRow...endRow] = lineElements?.toArray() or []