From 578b157da0e39ac394b67014acfcdef6e1266edd Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 15 Sep 2015 17:22:22 +0200 Subject: [PATCH] Differentiate between gutter and lines tiles ...and fix specs as well. :green_heart: --- spec/text-editor-component-spec.coffee | 2 +- spec/text-editor-presenter-spec.coffee | 9 ++++++--- src/text-editor-presenter.coffee | 20 +++++++++++--------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/spec/text-editor-component-spec.coffee b/spec/text-editor-component-spec.coffee index b19116bd2..0da967d1c 100644 --- a/spec/text-editor-component-spec.coffee +++ b/spec/text-editor-component-spec.coffee @@ -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() diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index d1602ae93..7b65bb00e 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -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) diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index b6c812123..8331e6605 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -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()