From f479e9d029b7d124cddad7d9ae121d917564fef0 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 21 Jan 2015 17:01:23 -0700 Subject: [PATCH] Add ::state.content.scrollTop/Left to TextEditorPresenter --- spec/text-editor-presenter-spec.coffee | 14 ++++++++++++++ src/text-editor-presenter.coffee | 10 +++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 3dffc19e3..fb94116a6 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -82,6 +82,20 @@ describe "TextEditorPresenter", -> editor.getBuffer().append("\n\n\n") expect(presenter.state.content.scrollHeight).toBe editor.getScreenLineCount() * 10 + describe ".scrollTop", -> + it "tracks the value of ::scrollTop", -> + presenter = new TextEditorPresenter(model: editor, scrollTop: 10, lineHeight: 10, lineOverdrawMargin: 1) + expect(presenter.state.content.scrollTop).toBe 10 + presenter.setScrollTop(50) + expect(presenter.state.content.scrollTop).toBe 50 + + describe ".scrollLeft", -> + it "tracks the value of ::scrollLeft", -> + presenter = new TextEditorPresenter(model: editor, scrollLeft: 10, lineHeight: 10, lineOverdrawMargin: 1) + expect(presenter.state.content.scrollLeft).toBe 10 + presenter.setScrollLeft(50) + expect(presenter.state.content.scrollLeft).toBe 50 + describe ".indentGuidesVisible", -> it "is initialized based on the editor.showIndentGuide config setting", -> presenter = new TextEditorPresenter(model: editor) diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index a46c4ac45..0e38845d4 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -3,7 +3,7 @@ module.exports = class TextEditorPresenter - constructor: ({@model, @clientHeight, @clientWidth, @scrollTop, @lineHeight, @baseCharacterWidth, @lineOverdrawMargin}) -> + constructor: ({@model, @clientHeight, @clientWidth, @scrollTop, @scrollLeft, @lineHeight, @baseCharacterWidth, @lineOverdrawMargin}) -> @disposables = new CompositeDisposable @charWidthsByScope = {} @observeModel() @@ -44,6 +44,8 @@ class TextEditorPresenter updateContentState: -> @state.content.scrollWidth = @computeScrollWidth() @state.content.scrollHeight = @computeScrollHeight() + @state.content.scrollTop = @getScrollTop() + @state.content.scrollLeft = @getScrollLeft() @state.content.indentGuidesVisible = atom.config.get('editor.showIndentGuide', scope: @model.getRootScopeDescriptor()) updateLinesState: -> @@ -122,10 +124,16 @@ class TextEditorPresenter decorationClasses setScrollTop: (@scrollTop) -> + @updateContentState() @updateLinesState() getScrollTop: -> @scrollTop + setScrollLeft: (@scrollLeft) -> + @updateContentState() + + getScrollLeft: -> @scrollLeft + setClientHeight: (@clientHeight) -> @updateLinesState()