From a9c9a854acc4779eee8090c782789a498699aec3 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 29 May 2012 13:03:29 -0600 Subject: [PATCH] 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. --- spec/app/editor-spec.coffee | 2 +- src/app/editor.coffee | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index 1345275d4..ae672215d 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -339,7 +339,7 @@ fdescribe "Editor", -> editor.simulateDomAttachment() expect(openHandler).not.toHaveBeenCalled() - ffdescribe "text rendering", -> + describe "text rendering", -> describe "when all lines in the buffer are visible on screen", -> beforeEach -> editor.attachToDom() diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 6682373ff..b2bc720ae 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -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)