diff --git a/spec/lines-yardstick-spec.coffee b/spec/lines-yardstick-spec.coffee index 68af04da4..88e56f2df 100644 --- a/spec/lines-yardstick-spec.coffee +++ b/spec/lines-yardstick-spec.coffee @@ -33,6 +33,7 @@ describe "LinesYardstick", -> mockPresenter = isBatching: -> true setScreenRowsToMeasure: (screenRows) -> screenRowsToMeasure = screenRows + clearScreenRowsToMeasure: -> setScreenRowsToMeasure = [] getPreMeasurementState: -> state = {} for screenRow in screenRowsToMeasure diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 2c8b173e3..7b8f50f13 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -114,6 +114,16 @@ describe "TextEditorPresenter", -> expect(stateFn(presenter).tiles[10]).toBeDefined() expect(stateFn(presenter).tiles[12]).toBeDefined() + presenter.clearScreenRowsToMeasure() + + 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[10]).toBeUndefined() + expect(stateFn(presenter).tiles[12]).toBeUndefined() + it "excludes invalid tiles for screen rows to measure", -> presenter = buildPresenter(explicitHeight: 6, scrollTop: 0, lineHeight: 1, tileSize: 2) presenter.setScreenRowsToMeasure([20, 30]) # unexisting rows diff --git a/src/lines-yardstick.coffee b/src/lines-yardstick.coffee index 94a08e81d..7432bc82e 100644 --- a/src/lines-yardstick.coffee +++ b/src/lines-yardstick.coffee @@ -17,6 +17,9 @@ class LinesYardstick @presenter.setScreenRowsToMeasure(screenRows) @lineNodesProvider.updateSync(@presenter.getPreMeasurementState()) + clearScreenRowsForMeasurement: -> + @presenter.clearScreenRowsToMeasure() + screenPositionForPixelPosition: (pixelPosition) -> targetTop = pixelPosition.top targetLeft = pixelPosition.left @@ -75,6 +78,8 @@ class LinesYardstick previousColumn = column column += charLength + @clearScreenRowsForMeasurement() + if targetLeft <= previousLeft + (charWidth / 2) new Point(row, previousColumn) else @@ -92,6 +97,8 @@ class LinesYardstick top = targetRow * @model.getLineHeightInPixels() left = @leftPixelPositionForScreenPosition(targetRow, targetColumn) + @clearScreenRowsForMeasurement() + {top, left} leftPixelPositionForScreenPosition: (row, column) -> diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index e6707b7fe..b0591b10f 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -395,6 +395,12 @@ class TextEditorPresenter @shouldUpdateLineNumbersState = true @shouldUpdateDecorations = true + clearScreenRowsToMeasure: -> + @screenRowsToMeasure = [] + @shouldUpdateLinesState = true + @shouldUpdateLineNumbersState = true + @shouldUpdateDecorations = true + updateTilesState: -> return unless @startRow? and @endRow? and @lineHeight?