Report proper screen ranges on change events for folds created on wrapped lines

This commit is contained in:
Corey Johnson & Nathan Sobo
2012-03-16 11:43:16 -07:00
parent 0aeb826bbf
commit 45c825e76c
2 changed files with 22 additions and 3 deletions

View File

@@ -42,6 +42,26 @@ describe "Renderer", ->
expect(renderer.lineForRow(3).text).toBe ' var pivot = items.shift(), current, left = [], '
expect(renderer.lineForRow(4).text).toBe 'right = [];'
describe "when a fold is created on the second screen line of a wrapped buffer line", ->
it "inserts the placeholder in the correct location and fires a change event", ->
fold = renderer.createFold([[3, 52], [3, 56]])
expect(renderer.lineForRow(3).text).toBe ' var pivot = items.shift(), current, left = [], '
expect(renderer.lineForRow(4).text).toBe 'r... = [];'
expect(renderer.lineForRow(5).text).toBe ' while(items.length > 0) {'
expect(changeHandler).toHaveBeenCalled()
[[event]]= changeHandler.argsForCall
expect(event.oldRange).toEqual([[3, 0], [4, 11]])
expect(event.newRange).toEqual([[3, 0], [4, 10]])
changeHandler.reset()
fold.destroy()
expect(changeHandler).toHaveBeenCalled()
[[event]]= changeHandler.argsForCall
expect(event.oldRange).toEqual([[3, 0], [4, 10]])
expect(event.newRange).toEqual([[3, 0], [4, 11]])
describe "when there is a fold placeholder straddling the max length boundary", ->
it "wraps the line before the fold placeholder", ->
renderer.createFold([[3, 49], [6, 1]])

View File

@@ -63,8 +63,7 @@ class Renderer
oldScreenRange.start.row,
oldScreenRange.end.row,
lines)
newScreenRange = @expandScreenRangeToLineEnds(
new Range(oldScreenRange.start.copy(), oldScreenRange.start.copy()))
newScreenRange = @screenLineRangeForBufferRange(bufferRange)
@trigger 'change', oldRange: oldScreenRange, newRange: newScreenRange
@trigger 'fold', bufferRange
@@ -75,7 +74,7 @@ class Renderer
@unregisterFold(bufferRange.start.row, fold)
startScreenRow = @screenRowForBufferRow(bufferRange.start.row)
oldScreenRange = @expandScreenRangeToLineEnds(new Range([startScreenRow, 0], [startScreenRow, 0]))
oldScreenRange = @screenLineRangeForBufferRange(bufferRange)
@lineMap.replaceScreenRow(startScreenRow,
@buildLinesForBufferRows(bufferRange.start.row, bufferRange.end.row))
newScreenRange = @screenLineRangeForBufferRange(bufferRange)