From a4ed02c3c5cd2653cffb8cc882fabfc61d9b744a Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 3 Jul 2014 11:22:46 -0600 Subject: [PATCH] Update lines for line insertions/removals preceding rendered row range --- spec/editor-component-spec.coffee | 16 ++++++++++++++++ src/lines-component.coffee | 5 ++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/spec/editor-component-spec.coffee b/spec/editor-component-spec.coffee index 153b0df7e..ceb576cd8 100644 --- a/spec/editor-component-spec.coffee +++ b/spec/editor-component-spec.coffee @@ -111,6 +111,22 @@ describe "EditorComponent", -> expect(component.lineNodeForScreenRow(3).offsetTop).toBe 3 * lineHeightInPixels expect(component.lineNodeForScreenRow(4).offsetTop).toBe 4 * lineHeightInPixels + it "updates the lines when lines are inserted or removed above the rendered row range", -> + node.style.height = 4.5 * lineHeightInPixels + 'px' + component.measureScrollView() + runSetImmediateCallbacks() + verticalScrollbarNode.scrollTop = 5 * lineHeightInPixels + verticalScrollbarNode.dispatchEvent(new UIEvent('scroll')) + buffer = editor.getBuffer() + + buffer.insert([0, 0], '\n\n') + runSetImmediateCallbacks() + expect(component.lineNodeForScreenRow(3).textContent).toBe editor.lineForScreenRow(3).text + + buffer.delete([[0, 0], [3, 0]]) + runSetImmediateCallbacks() + expect(component.lineNodeForScreenRow(3).textContent).toBe editor.lineForScreenRow(3).text + it "updates the top position of lines when the line height changes", -> initialLineHeightInPixels = editor.getLineHeightInPixels() component.setLineHeight(2) diff --git a/src/lines-component.coffee b/src/lines-component.coffee index 2458b06f8..c8e1cdb42 100644 --- a/src/lines-component.coffee +++ b/src/lines-component.coffee @@ -53,7 +53,10 @@ LinesComponent = React.createClass {renderedRowRange, pendingChanges} = newProps [renderedStartRow, renderedEndRow] = renderedRowRange for change in pendingChanges - return true unless change.end < renderedStartRow or renderedEndRow <= change.start + if change.screenDelta is 0 + return true unless change.end < renderedStartRow or renderedEndRow <= change.start + else + return true unless renderedEndRow <= change.start false