From f86d894939ec08ac4e3aa92ad97e410076bdba74 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Thu, 2 Feb 2017 17:28:36 +0100 Subject: [PATCH] Create char offset in FastRenderedViewLine only when needed --- .../browser/viewParts/lines/viewLine.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/vs/editor/browser/viewParts/lines/viewLine.ts b/src/vs/editor/browser/viewParts/lines/viewLine.ts index cb1ef2b6b7d..b1b357f08bd 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLine.ts +++ b/src/vs/editor/browser/viewParts/lines/viewLine.ts @@ -247,7 +247,7 @@ class FastRenderedViewLine implements IRenderedViewLine { private readonly _characterMapping: CharacterMapping; private readonly _charWidth: number; - private readonly _charOffset: Uint32Array; + private _charOffset: Uint32Array; constructor(domNode: FastDomNode, renderLineInput: RenderLineInput, characterMapping: CharacterMapping) { this.domNode = domNode; @@ -255,7 +255,7 @@ class FastRenderedViewLine implements IRenderedViewLine { this._characterMapping = characterMapping; this._charWidth = renderLineInput.spaceWidth; - this._charOffset = FastRenderedViewLine._createCharOffset(characterMapping); + this._charOffset = null; } private static _createCharOffset(characterMapping: CharacterMapping): Uint32Array { @@ -281,8 +281,16 @@ class FastRenderedViewLine implements IRenderedViewLine { return result; } + private _getOrCreateCharOffset(): Uint32Array { + if (this._charOffset === null) { + this._charOffset = FastRenderedViewLine._createCharOffset(this._characterMapping); + } + return this._charOffset; + } + public getWidth(): number { - return this._getCharPosition(this._charOffset.length); + const charOffset = this._getOrCreateCharOffset(); + return this._getCharPosition(charOffset.length); } public getVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] { @@ -309,11 +317,12 @@ class FastRenderedViewLine implements IRenderedViewLine { } private _getCharPosition(column: number): number { - if (this._charOffset.length === 0) { + const charOffset = this._getOrCreateCharOffset(); + if (charOffset.length === 0) { // No characters on this line return 0; } - return Math.round(this._charWidth * this._charOffset[column - 1]); + return Math.round(this._charWidth * charOffset[column - 1]); } public getColumnOfNodeOffset(lineNumber: number, spanNode: HTMLElement, offset: number): number { -- GitLab