diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 697ae21bb..739b21a9f 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -86,6 +86,13 @@ describe "TextEditorPresenter", -> # rows beyond the end of the content are not rendered + it "contains the lines that are visible on screen, plus and minus the overdraw margin", -> + presenter = new TextEditorPresenter(model: editor, clientHeight: 25, scrollTop: 50, lineHeight: 10, lineOverdrawMargin: 1) + expect(presenter.state.lines[editor.tokenizedLineForScreenRow(3).id]).toBeUndefined() + expect(presenter.state.lines[editor.tokenizedLineForScreenRow(4).id]).toBeDefined() + expect(presenter.state.lines[editor.tokenizedLineForScreenRow(9).id]).toBeDefined() + expect(presenter.state.lines[editor.tokenizedLineForScreenRow(10).id]).toBeUndefined() + it "uses the computed scrollWidth as the length of each line", -> line0 = editor.tokenizedLineForScreenRow(0) line1 = editor.tokenizedLineForScreenRow(1) diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index b57960f57..f3d1fabfb 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -56,7 +56,10 @@ class TextEditorPresenter Math.max(0, startRow) getEndRow: -> - endRow = @getStartRow() + Math.ceil(@clientHeight / @lineHeight) + 1 + @lineOverdrawMargin + startRow = @getStartRow() + visibleLinesCount = Math.ceil(@clientHeight / @lineHeight) + 1 + overdrawMargin = @lineOverdrawMargin + Math.min(@lineOverdrawMargin, startRow) + endRow = startRow + visibleLinesCount + overdrawMargin Math.min(@model.getScreenLineCount(), endRow) getScrollWidth: ->