From 67d017f3f4fcde5ae7d3e488ba5524699373a3f5 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Fri, 16 Mar 2012 16:11:44 -0600 Subject: [PATCH] Fix bug where destroying a fold on last screen line of wrapped line caused an artifact. --- spec/atom/editor-spec.coffee | 9 +++++++++ spec/atom/renderer-spec.coffee | 4 ++++ src/atom/line-map.coffee | 3 --- src/atom/renderer.coffee | 7 +++++-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/spec/atom/editor-spec.coffee b/spec/atom/editor-spec.coffee index 7facbc374..39406fd29 100644 --- a/spec/atom/editor-spec.coffee +++ b/spec/atom/editor-spec.coffee @@ -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) diff --git a/spec/atom/renderer-spec.coffee b/spec/atom/renderer-spec.coffee index 74e354a74..6a04aa418 100644 --- a/spec/atom/renderer-spec.coffee +++ b/spec/atom/renderer-spec.coffee @@ -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]]) diff --git a/src/atom/line-map.coffee b/src/atom/line-map.coffee index abc427c7c..ef10e60f8 100644 --- a/src/atom/line-map.coffee +++ b/src/atom/line-map.coffee @@ -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) diff --git a/src/atom/renderer.coffee b/src/atom/renderer.coffee index 770643807..9bad9feb6 100644 --- a/src/atom/renderer.coffee +++ b/src/atom/renderer.coffee @@ -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