From c1b4b743b47192d9e2c4a8eecff113e3b5d381a4 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 5 Jun 2015 17:00:17 +0200 Subject: [PATCH] Organize visible highlights by tile --- src/text-editor-presenter.coffee | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index d8322d061..4277c6193 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -24,6 +24,7 @@ class TextEditorPresenter @disposables = new CompositeDisposable @emitter = new Emitter + @visibleHighlights = {} @characterWidthsByScope = {} @rangesByDecorationId = {} @lineDecorationsByScreenRow = {} @@ -331,6 +332,7 @@ class TextEditorPresenter endRow = Math.min(@model.getScreenLineCount(), startRow + @tileSize) tile = @state.content.tiles[startRow] ?= {} + tile.startRow = startRow tile.top = startRow * @lineHeight - @scrollTop tile.left = -@scrollLeft tile.height = @tileSize * @lineHeight @@ -1171,8 +1173,8 @@ class TextEditorPresenter @lineDecorationsByScreenRow = {} @lineNumberDecorationsByScreenRow = {} @customGutterDecorationsByGutterNameAndScreenRow = {} + @visibleHighlights = {} - visibleHighlights = {} return unless 0 <= @startRow <= @endRow <= Infinity for markerId, decorations of @model.decorationsForScreenRowRange(@startRow, @endRow - 1) @@ -1181,12 +1183,11 @@ class TextEditorPresenter if decoration.isType('line') or decoration.isType('gutter') @addToLineDecorationCaches(decoration, range) else if decoration.isType('highlight') - visibleHighlights[decoration.id] = @updateHighlightState(decoration) + @updateHighlightState(decoration) for tileId, tileState of @state.content.tiles for id, highlight of tileState.highlights - unless visibleHighlights[id] - delete tileState.highlights[id] + delete tileState.highlights[id] unless @visibleHighlights[tileId]?[id]? return @@ -1300,6 +1301,9 @@ class TextEditorPresenter highlightState.deprecatedRegionClass = properties.deprecatedRegionClass highlightState.regions = @buildHighlightRegions(tileStartRow, tileRange) + @visibleHighlights[tileStartRow] ?= {} + @visibleHighlights[tileStartRow][decoration.id] = true + startRow = tileEndRow @emitDidUpdateState()