diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 0659abf27..28cd1890f 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -1766,107 +1766,106 @@ describe "TextEditorPresenter", -> pixelPosition: {top: 10, left: 0} } - - describe ".gutter", -> + describe ".lineNumberGutter", -> describe ".scrollHeight", -> it "is initialized based on ::lineHeight, the number of lines, and ::explicitHeight", -> presenter = buildPresenter() - expect(presenter.getState().gutter.scrollHeight).toBe editor.getScreenLineCount() * 10 + expect(presenter.getState().lineNumberGutter.scrollHeight).toBe editor.getScreenLineCount() * 10 presenter = buildPresenter(explicitHeight: 500) - expect(presenter.getState().gutter.scrollHeight).toBe 500 + expect(presenter.getState().lineNumberGutter.scrollHeight).toBe 500 it "updates when the ::lineHeight changes", -> presenter = buildPresenter() expectStateUpdate presenter, -> presenter.setLineHeight(20) - expect(presenter.getState().gutter.scrollHeight).toBe editor.getScreenLineCount() * 20 + expect(presenter.getState().lineNumberGutter.scrollHeight).toBe editor.getScreenLineCount() * 20 it "updates when the line count changes", -> presenter = buildPresenter() expectStateUpdate presenter, -> editor.getBuffer().append("\n\n\n") - expect(presenter.getState().gutter.scrollHeight).toBe editor.getScreenLineCount() * 10 + expect(presenter.getState().lineNumberGutter.scrollHeight).toBe editor.getScreenLineCount() * 10 it "updates when ::explicitHeight changes", -> presenter = buildPresenter() expectStateUpdate presenter, -> presenter.setExplicitHeight(500) - expect(presenter.getState().gutter.scrollHeight).toBe 500 + expect(presenter.getState().lineNumberGutter.scrollHeight).toBe 500 it "adds the computed clientHeight to the computed scrollHeight if editor.scrollPastEnd is true", -> presenter = buildPresenter(scrollTop: 10, explicitHeight: 50, horizontalScrollbarHeight: 10) expectStateUpdate presenter, -> presenter.setScrollTop(300) - expect(presenter.getState().gutter.scrollHeight).toBe presenter.contentHeight + expect(presenter.getState().lineNumberGutter.scrollHeight).toBe presenter.contentHeight expectStateUpdate presenter, -> atom.config.set("editor.scrollPastEnd", true) - expect(presenter.getState().gutter.scrollHeight).toBe presenter.contentHeight + presenter.clientHeight - (presenter.lineHeight * 3) + expect(presenter.getState().lineNumberGutter.scrollHeight).toBe presenter.contentHeight + presenter.clientHeight - (presenter.lineHeight * 3) expectStateUpdate presenter, -> atom.config.set("editor.scrollPastEnd", false) - expect(presenter.getState().gutter.scrollHeight).toBe presenter.contentHeight + expect(presenter.getState().lineNumberGutter.scrollHeight).toBe presenter.contentHeight describe ".scrollTop", -> it "tracks the value of ::scrollTop", -> presenter = buildPresenter(scrollTop: 10, explicitHeight: 20) - expect(presenter.getState().gutter.scrollTop).toBe 10 + expect(presenter.getState().lineNumberGutter.scrollTop).toBe 10 expectStateUpdate presenter, -> presenter.setScrollTop(50) - expect(presenter.getState().gutter.scrollTop).toBe 50 + expect(presenter.getState().lineNumberGutter.scrollTop).toBe 50 it "never exceeds the computed scrollHeight minus the computed clientHeight", -> presenter = buildPresenter(scrollTop: 10, explicitHeight: 50, horizontalScrollbarHeight: 10) expectStateUpdate presenter, -> presenter.setScrollTop(100) - expect(presenter.getState().gutter.scrollTop).toBe presenter.scrollHeight - presenter.clientHeight + expect(presenter.getState().lineNumberGutter.scrollTop).toBe presenter.scrollHeight - presenter.clientHeight expectStateUpdate presenter, -> presenter.setExplicitHeight(60) - expect(presenter.getState().gutter.scrollTop).toBe presenter.scrollHeight - presenter.clientHeight + expect(presenter.getState().lineNumberGutter.scrollTop).toBe presenter.scrollHeight - presenter.clientHeight expectStateUpdate presenter, -> presenter.setHorizontalScrollbarHeight(5) - expect(presenter.getState().gutter.scrollTop).toBe presenter.scrollHeight - presenter.clientHeight + expect(presenter.getState().lineNumberGutter.scrollTop).toBe presenter.scrollHeight - presenter.clientHeight expectStateUpdate presenter, -> editor.getBuffer().delete([[8, 0], [12, 0]]) - expect(presenter.getState().gutter.scrollTop).toBe presenter.scrollHeight - presenter.clientHeight + expect(presenter.getState().lineNumberGutter.scrollTop).toBe presenter.scrollHeight - presenter.clientHeight # Scroll top only gets smaller when needed as dimensions change, never bigger scrollTopBefore = presenter.getState().verticalScrollbar.scrollTop expectStateUpdate presenter, -> editor.getBuffer().insert([9, Infinity], '\n\n\n') - expect(presenter.getState().gutter.scrollTop).toBe scrollTopBefore + expect(presenter.getState().lineNumberGutter.scrollTop).toBe scrollTopBefore it "never goes negative", -> presenter = buildPresenter(scrollTop: 10, explicitHeight: 50, horizontalScrollbarHeight: 10) expectStateUpdate presenter, -> presenter.setScrollTop(-100) - expect(presenter.getState().gutter.scrollTop).toBe 0 + expect(presenter.getState().lineNumberGutter.scrollTop).toBe 0 it "adds the computed clientHeight to the computed scrollHeight if editor.scrollPastEnd is true", -> presenter = buildPresenter(scrollTop: 10, explicitHeight: 50, horizontalScrollbarHeight: 10) expectStateUpdate presenter, -> presenter.setScrollTop(300) - expect(presenter.getState().gutter.scrollTop).toBe presenter.contentHeight - presenter.clientHeight + expect(presenter.getState().lineNumberGutter.scrollTop).toBe presenter.contentHeight - presenter.clientHeight atom.config.set("editor.scrollPastEnd", true) expectStateUpdate presenter, -> presenter.setScrollTop(300) - expect(presenter.getState().gutter.scrollTop).toBe presenter.contentHeight - (presenter.lineHeight * 3) + expect(presenter.getState().lineNumberGutter.scrollTop).toBe presenter.contentHeight - (presenter.lineHeight * 3) expectStateUpdate presenter, -> atom.config.set("editor.scrollPastEnd", false) - expect(presenter.getState().gutter.scrollTop).toBe presenter.contentHeight - presenter.clientHeight + expect(presenter.getState().lineNumberGutter.scrollTop).toBe presenter.contentHeight - presenter.clientHeight describe ".backgroundColor", -> it "is assigned to ::gutterBackgroundColor if present, and to ::backgroundColor otherwise", -> presenter = buildPresenter(backgroundColor: "rgba(255, 0, 0, 0)", gutterBackgroundColor: "rgba(0, 255, 0, 0)") - expect(presenter.getState().gutter.backgroundColor).toBe "rgba(0, 255, 0, 0)" + expect(presenter.getState().lineNumberGutter.backgroundColor).toBe "rgba(0, 255, 0, 0)" expectStateUpdate presenter, -> presenter.setGutterBackgroundColor("rgba(0, 0, 255, 0)") - expect(presenter.getState().gutter.backgroundColor).toBe "rgba(0, 0, 255, 0)" + expect(presenter.getState().lineNumberGutter.backgroundColor).toBe "rgba(0, 0, 255, 0)" expectStateUpdate presenter, -> presenter.setGutterBackgroundColor("rgba(0, 0, 0, 0)") - expect(presenter.getState().gutter.backgroundColor).toBe "rgba(255, 0, 0, 0)" + expect(presenter.getState().lineNumberGutter.backgroundColor).toBe "rgba(255, 0, 0, 0)" expectStateUpdate presenter, -> presenter.setBackgroundColor("rgba(0, 0, 255, 0)") - expect(presenter.getState().gutter.backgroundColor).toBe "rgba(0, 0, 255, 0)" + expect(presenter.getState().lineNumberGutter.backgroundColor).toBe "rgba(0, 0, 255, 0)" describe ".maxLineNumberDigits", -> it "is set to the number of digits used by the greatest line number", -> presenter = buildPresenter() expect(editor.getLastBufferRow()).toBe 12 - expect(presenter.getState().gutter.maxLineNumberDigits).toBe 2 + expect(presenter.getState().lineNumberGutter.maxLineNumberDigits).toBe 2 editor.setText("1\n2\n3") - expect(presenter.getState().gutter.maxLineNumberDigits).toBe 1 + expect(presenter.getState().lineNumberGutter.maxLineNumberDigits).toBe 1 describe ".lineNumbers", -> lineNumberStateForScreenRow = (presenter, screenRow) -> @@ -1878,7 +1877,7 @@ describe "TextEditorPresenter", -> else key = bufferRow - presenter.getState().gutter.lineNumbers[key] + presenter.getState().lineNumberGutter.lineNumbers[key] it "contains states for line numbers that are visible on screen, plus and minus the overdraw margin", -> editor.foldBufferRow(4) @@ -2170,28 +2169,28 @@ describe "TextEditorPresenter", -> presenter = buildPresenter() expect(editor.isLineNumberGutterVisible()).toBe true - expect(presenter.getState().gutter.visible).toBe true + expect(presenter.getState().lineNumberGutter.visible).toBe true expectStateUpdate presenter, -> editor.setMini(true) - expect(presenter.getState().gutter.visible).toBe false + expect(presenter.getState().lineNumberGutter.visible).toBe false expectStateUpdate presenter, -> editor.setMini(false) - expect(presenter.getState().gutter.visible).toBe true + expect(presenter.getState().lineNumberGutter.visible).toBe true expectStateUpdate presenter, -> editor.setLineNumberGutterVisible(false) - expect(presenter.getState().gutter.visible).toBe false + expect(presenter.getState().lineNumberGutter.visible).toBe false expectStateUpdate presenter, -> editor.setLineNumberGutterVisible(true) - expect(presenter.getState().gutter.visible).toBe true + expect(presenter.getState().lineNumberGutter.visible).toBe true expectStateUpdate presenter, -> atom.config.set('editor.showLineNumbers', false) - expect(presenter.getState().gutter.visible).toBe false + expect(presenter.getState().lineNumberGutter.visible).toBe false it "updates when the editor's grammar changes", -> presenter = buildPresenter() atom.config.set('editor.showLineNumbers', false, scopeSelector: '.source.js') - expect(presenter.getState().gutter.visible).toBe true + expect(presenter.getState().lineNumberGutter.visible).toBe true stateUpdated = false presenter.onDidUpdateState -> stateUpdated = true @@ -2199,7 +2198,7 @@ describe "TextEditorPresenter", -> runs -> expect(stateUpdated).toBe true - expect(presenter.getState().gutter.visible).toBe false + expect(presenter.getState().lineNumberGutter.visible).toBe false describe ".height", -> it "tracks the computed content height if ::autoHeight is true so the editor auto-expands vertically", -> diff --git a/src/gutter-component.coffee b/src/gutter-component.coffee index 072ac99a0..395dc6269 100644 --- a/src/gutter-component.coffee +++ b/src/gutter-component.coffee @@ -19,7 +19,7 @@ class GutterComponent @domNode.addEventListener 'mousedown', @onMouseDown updateSync: (state) -> - @newState = state.gutter + @newState = state.lineNumberGutter @oldState ?= {lineNumbers: {}} @appendDummyLineNumber() unless @dummyLineNumberNode? diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index 4c8e567f0..974b29b75 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -70,7 +70,7 @@ class TextEditorComponent @scrollViewNode.classList.add('scroll-view') @domNode.appendChild(@scrollViewNode) - @mountGutterComponent() if @presenter.getState().gutter.visible + @mountGutterComponent() if @presenter.getState().lineNumberGutter.visible @hiddenInputComponent = new InputComponent @scrollViewNode.appendChild(@hiddenInputComponent.domNode) @@ -134,7 +134,7 @@ class TextEditorComponent else @domNode.style.height = '' - if @newState.gutter.visible + if @newState.lineNumberGutter.visible @mountGutterComponent() unless @gutterComponent? @gutterComponent.updateSync(@newState) else diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index edbf0d63f..50efe3de7 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -169,7 +169,7 @@ class TextEditorPresenter lines: {} highlights: {} overlays: {} - gutter: + lineNumberGutter: lineNumbers: {} @updateState() @@ -204,11 +204,11 @@ class TextEditorPresenter updateVerticalScrollState: -> @batch "shouldUpdateVerticalScrollState", -> @state.content.scrollHeight = @scrollHeight - @state.gutter.scrollHeight = @scrollHeight + @state.lineNumberGutter.scrollHeight = @scrollHeight @state.verticalScrollbar.scrollHeight = @scrollHeight @state.content.scrollTop = @scrollTop - @state.gutter.scrollTop = @scrollTop + @state.lineNumberGutter.scrollTop = @scrollTop @state.verticalScrollbar.scrollTop = @scrollTop updateHorizontalScrollState: -> @batch "shouldUpdateHorizontalScrollState", -> @@ -364,9 +364,9 @@ class TextEditorPresenter return updateLineNumberGutterState: -> @batch "shouldUpdateLineNumberGutterState", -> - @state.gutter.visible = not @model.isMini() and (@model.isLineNumberGutterVisible() ? true) and @showLineNumbers - @state.gutter.maxLineNumberDigits = @model.getLineCount().toString().length - @state.gutter.backgroundColor = if @gutterBackgroundColor isnt "rgba(0, 0, 0, 0)" + @state.lineNumberGutter.visible = not @model.isMini() and (@model.isLineNumberGutterVisible() ? true) and @showLineNumbers + @state.lineNumberGutter.maxLineNumberDigits = @model.getLineCount().toString().length + @state.lineNumberGutter.backgroundColor = if @gutterBackgroundColor isnt "rgba(0, 0, 0, 0)" @gutterBackgroundColor else @backgroundColor @@ -401,7 +401,7 @@ class TextEditorPresenter decorationClasses = @lineNumberDecorationClassesForRow(screenRow) foldable = @model.isFoldableAtScreenRow(screenRow) - @state.gutter.lineNumbers[id] = {screenRow, bufferRow, softWrapped, top, decorationClasses, foldable} + @state.lineNumberGutter.lineNumbers[id] = {screenRow, bufferRow, softWrapped, top, decorationClasses, foldable} visibleLineNumberIds[id] = true if @mouseWheelScreenRow? @@ -411,8 +411,8 @@ class TextEditorPresenter id += '-' + wrapCount if wrapCount > 0 visibleLineNumberIds[id] = true - for id of @state.gutter.lineNumbers - delete @state.gutter.lineNumbers[id] unless visibleLineNumberIds[id] + for id of @state.lineNumberGutter.lineNumbers + delete @state.lineNumberGutter.lineNumbers[id] unless visibleLineNumberIds[id] return