Fix bug where destroying a fold on last screen line of wrapped line caused an artifact.

This commit is contained in:
Corey Johnson & Nathan Sobo
2012-03-16 16:11:44 -06:00
parent 7336e8313c
commit 67d017f3f4
4 changed files with 18 additions and 5 deletions

View File

@@ -161,6 +161,15 @@ describe "Editor", ->
editor.createFold([[3, 10], [5, 1]])
expect(editor.gutter.find('.line-number:eq(3)').text()).toBe '4'
expect(editor.gutter.find('.line-number:eq(4)').text()).toBe '7'
describe "when there is a fold on the last screen line of a wrapped line", ->
it "renders line numbers correctly when the fold is destroyed (regression)", ->
editor.setMaxLineLength(50)
fold = editor.createFold([[3, 52], [3, 56]])
fold.destroy()
# console.log editor.renderer.bufferRowsForScreenRows()
expect(editor.gutter.find('.line-number:last').text()).toBe '13'
it "adds a drop shadow when the horizontal scroller is scrolled to the right", ->
editor.attachToDom()
editor.width(100)

View File

@@ -57,6 +57,10 @@ describe "Renderer", ->
changeHandler.reset()
fold.destroy()
expect(renderer.lineForRow(3).text).toBe ' var pivot = items.shift(), current, left = [], '
expect(renderer.lineForRow(4).text).toBe 'right = [];'
expect(renderer.lineForRow(5).text).toBe ' while(items.length > 0) {'
expect(changeHandler).toHaveBeenCalled()
[[event]]= changeHandler.argsForCall
expect(event.oldRange).toEqual([[3, 0], [4, 10]])

View File

@@ -19,9 +19,6 @@ class LineMap
replaceBufferRows: (start, end, lineFragments) ->
@spliceAtBufferRow(start, end - start + 1, lineFragments)
replaceScreenRow: (row, lineFragments) ->
@replaceScreenRows(row, row, lineFragments)
replaceScreenRows: (start, end, lineFragments) ->
@spliceAtScreenRow(start, end - start + 1, lineFragments)

View File

@@ -75,8 +75,11 @@ class Renderer
startScreenRow = @screenRowForBufferRow(bufferRange.start.row)
oldScreenRange = @screenLineRangeForBufferRange(bufferRange)
@lineMap.replaceScreenRow(startScreenRow,
@buildLinesForBufferRows(bufferRange.start.row, bufferRange.end.row))
lines = @buildLinesForBufferRows(bufferRange.start.row, bufferRange.end.row)
@lineMap.replaceScreenRows(
oldScreenRange.start.row,
oldScreenRange.end.row
lines)
newScreenRange = @screenLineRangeForBufferRange(bufferRange)
@trigger 'change', oldRange: oldScreenRange, newRange: newScreenRange