mirror of
https://github.com/atom/atom.git
synced 2026-01-22 21:38:10 -05:00
In Editor.updateRenderedLines, cap renderFrom to the last screen row
If we remove a large number of screen lines when we are scrolled down, the current @firstRenderedScreenRow may end up being larger than the number of screen rows we now have. Setting renderFrom to the @firstRenderedScreenRow in this case was causing the renderFrom to be larger than the renderTo, which was causing problems downstream with the new mapping code.
This commit is contained in:
@@ -1388,6 +1388,15 @@ describe "Editor", ->
|
||||
expect(editor.renderedLines.find('.line').length).toBe 1
|
||||
expect(editor.renderedLines.find('.line').text()).toBe buffer.lineForRow(0)
|
||||
|
||||
describe "when folding leaves fewer screen lines than the first rendered screen line (regression)", ->
|
||||
it "clears all screen lines and does not throw any exceptions", ->
|
||||
editor.lineOverdraw = 1
|
||||
editor.attachToDom(heightInLines: 5)
|
||||
editor.scrollToBottom()
|
||||
editor.activeEditSession.foldBufferRow(0)
|
||||
expect(editor.renderedLines.find('.line').length).toBe 1
|
||||
expect(editor.renderedLines.find('.line').text()).toBe buffer.lineForRow(0)
|
||||
|
||||
describe "when autoscrolling at the end of the document", ->
|
||||
it "renders lines properly", ->
|
||||
editor.edit(project.buildEditSession('two-hundred.txt'))
|
||||
|
||||
@@ -1149,13 +1149,14 @@ class Editor extends View
|
||||
updateRenderedLines: ->
|
||||
firstVisibleScreenRow = @getFirstVisibleScreenRow()
|
||||
lastVisibleScreenRow = @getLastVisibleScreenRow()
|
||||
lastScreenRow = @getLastScreenRow()
|
||||
|
||||
if @firstRenderedScreenRow? and firstVisibleScreenRow >= @firstRenderedScreenRow and lastVisibleScreenRow <= @lastRenderedScreenRow
|
||||
renderFrom = @firstRenderedScreenRow
|
||||
renderTo = Math.min(@getLastScreenRow(), @lastRenderedScreenRow)
|
||||
renderFrom = Math.min(lastScreenRow, @firstRenderedScreenRow)
|
||||
renderTo = Math.min(lastScreenRow, @lastRenderedScreenRow)
|
||||
else
|
||||
renderFrom = Math.max(0, firstVisibleScreenRow - @lineOverdraw)
|
||||
renderTo = Math.min(@getLastScreenRow(), lastVisibleScreenRow + @lineOverdraw)
|
||||
renderFrom = Math.min(lastScreenRow, Math.max(0, firstVisibleScreenRow - @lineOverdraw))
|
||||
renderTo = Math.min(lastScreenRow, lastVisibleScreenRow + @lineOverdraw)
|
||||
|
||||
if @pendingChanges.length == 0 and @firstRenderedScreenRow and @firstRenderedScreenRow <= renderFrom and renderTo <= @lastRenderedScreenRow
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user