[Gutter] TextEditorPresenter: rename @state.gutter -> @state.lineNumberGutter

This commit is contained in:
Jess Lin 2015-03-26 11:38:17 -07:00
parent ecdf324e62
commit 7582e98f4c
4 changed files with 47 additions and 48 deletions

View File

@ -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", ->

View File

@ -19,7 +19,7 @@ class GutterComponent
@domNode.addEventListener 'mousedown', @onMouseDown
updateSync: (state) ->
@newState = state.gutter
@newState = state.lineNumberGutter
@oldState ?= {lineNumbers: {}}
@appendDummyLineNumber() unless @dummyLineNumberNode?

View File

@ -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

View File

@ -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