Differentiate between gutter and lines tiles

...and fix specs as well. 💚
This commit is contained in:
Antonio Scandurra
2015-09-15 17:22:22 +02:00
parent a6c13d097a
commit 578b157da0
3 changed files with 18 additions and 13 deletions

View File

@@ -219,7 +219,7 @@ describe "TextEditorComponent", ->
expectTileContainsRow(tilesNodes[2], 7, top: 1 * lineHeightInPixels)
expectTileContainsRow(tilesNodes[2], 8, top: 2 * lineHeightInPixels)
fffit "renders the longest screen row even when it's not visible", ->
it "renders the longest screen row even when it's not visible", ->
wrapperNode.style.height = 2 * lineHeightInPixels + 'px'
component.measureDimensions()
nextAnimationFrame()

View File

@@ -154,20 +154,23 @@ describe "TextEditorPresenter", ->
expect(stateFn(presenter).tiles[10]).toBeUndefined()
it "updates when ::lineHeight changes", ->
presenter = buildPresenter(explicitHeight: 6, scrollTop: 0, lineHeight: 1, tileSize: 2)
presenter = buildPresenter(explicitHeight: 10, scrollTop: 0, lineHeight: 1, tileSize: 2)
expect(stateFn(presenter).tiles[0]).toBeDefined()
expect(stateFn(presenter).tiles[2]).toBeDefined()
expect(stateFn(presenter).tiles[4]).toBeDefined()
expect(stateFn(presenter).tiles[6]).toBeDefined()
expect(stateFn(presenter).tiles[8]).toBeUndefined()
expect(stateFn(presenter).tiles[8]).toBeDefined()
expect(stateFn(presenter).tiles[10]).toBeDefined()
expect(stateFn(presenter).tiles[12]).toBeUndefined()
expectStateUpdate presenter, -> presenter.setLineHeight(2)
expect(stateFn(presenter).tiles[0]).toBeDefined()
expect(stateFn(presenter).tiles[2]).toBeDefined()
expect(stateFn(presenter).tiles[4]).toBeDefined()
expect(stateFn(presenter).tiles[6]).toBeUndefined()
expect(stateFn(presenter).tiles[6]).toBeDefined()
expect(stateFn(presenter).tiles[8]).toBeUndefined()
it "does not remove out-of-view tiles corresponding to ::mouseWheelScreenRow until ::stoppedScrollingDelay elapses", ->
presenter = buildPresenter(explicitHeight: 6, scrollTop: 0, lineHeight: 1, tileSize: 2, stoppedScrollingDelay: 200)

View File

@@ -354,7 +354,8 @@ class TextEditorPresenter
@updateLinesState(tile, startRow, endRow) if @shouldUpdateLinesState
@updateLineNumbersState(gutterTile, startRow, endRow) if @shouldUpdateLineNumbersState
@visibleTiles[startRow] = true
@visibleLinesTiles[startRow] = true
@visibleGutterTiles[startRow] = true
zIndex--
updateMouseWheelTileState: ->
@@ -362,10 +363,11 @@ class TextEditorPresenter
mouseWheelTile = @tileForRow(@mouseWheelScreenRow)
unless @visibleTiles[mouseWheelTile]?
unless @visibleGutterTiles[mouseWheelTile]? and @visibleLinesTiles[mouseWheelTile]
@lineNumberGutter.tiles[mouseWheelTile].display = "none"
@state.content.tiles[mouseWheelTile].display = "none"
@visibleTiles[mouseWheelTile] = true
@visibleGutterTiles[mouseWheelTile] = true
@visibleLinesTiles[mouseWheelTile] = true
updateLongestTileState: ->
longestScreenRow = @model.getLongestScreenRow()
@@ -375,22 +377,22 @@ class TextEditorPresenter
tile = @state.content.tiles[longestScreenRowTile] ?= {}
tile.visibility = "hidden"
tile.highlights = {}
@updateLinesState(tile, longestScreenRow, longestScreenRow + 1)
@visibleTiles[longestScreenRowTile] = true
@visibleLinesTiles[longestScreenRowTile] = true
deleteHiddenTilesState: ->
for id, tile of @state.content.tiles
continue if @visibleTiles.hasOwnProperty(id)
delete @state.content.tiles[id]
delete @lineNumberGutter.tiles[id]
delete @state.content.tiles[id] unless @visibleLinesTiles[id]
delete @lineNumberGutter.tiles[id] unless @visibleGutterTiles[id]
updateTilesState: ->
return unless @startRow? and @endRow? and @lineHeight?
@visibleTiles = {}
@visibleGutterTiles = {}
@visibleLinesTiles = {}
@updateVisibleTilesState()
@updateLongestTileState()