From 45c825e76c0a644bc19f3ef88a60168cb2bd1ccb Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Fri, 16 Mar 2012 11:43:16 -0700 Subject: [PATCH] Report proper screen ranges on change events for folds created on wrapped lines --- spec/atom/renderer-spec.coffee | 20 ++++++++++++++++++++ src/atom/renderer.coffee | 5 ++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/spec/atom/renderer-spec.coffee b/spec/atom/renderer-spec.coffee index 32feee709..8c8904e8f 100644 --- a/spec/atom/renderer-spec.coffee +++ b/spec/atom/renderer-spec.coffee @@ -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]]) diff --git a/src/atom/renderer.coffee b/src/atom/renderer.coffee index 09f293f8f..34166de4b 100644 --- a/src/atom/renderer.coffee +++ b/src/atom/renderer.coffee @@ -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)