From 97511c739ebd2061f513d54898331f15bd0d4167 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Wed, 15 Feb 2017 18:16:13 +0100 Subject: [PATCH] Some cleanup in minimap --- .../browser/viewParts/minimap/minimap.ts | 53 +++++++++---------- .../common/view/runtimeMinimapCharRenderer.ts | 25 ++++----- .../test/browser/view/minimapFontCreator.ts | 4 +- .../common/view/minimapCharRenderer.test.ts | 6 +-- 4 files changed, 40 insertions(+), 48 deletions(-) diff --git a/src/vs/editor/browser/viewParts/minimap/minimap.ts b/src/vs/editor/browser/viewParts/minimap/minimap.ts index 87eb207877e..35a24fad9da 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimap.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimap.ts @@ -9,9 +9,9 @@ import 'vs/css!./minimap'; import { ViewPart } from 'vs/editor/browser/view/viewPart'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import { IRenderingContext, IRestrictedRenderingContext } from 'vs/editor/common/view/renderingContext'; -import { createMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer'; +import { getOrCreateMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer'; import * as browser from 'vs/base/browser/browser'; -import { ParsedColor, MinimapTokensColorTracker, Constants } from 'vs/editor/common/view/minimapCharRenderer'; +import { MinimapCharRenderer, ParsedColor, MinimapTokensColorTracker, Constants } from 'vs/editor/common/view/minimapCharRenderer'; import * as editorCommon from 'vs/editor/common/editorCommon'; import { CharCode } from 'vs/base/common/charCode'; import { IViewLayout, MinimapLineRenderingData } from 'vs/editor/common/viewModel/viewModel'; @@ -20,8 +20,6 @@ import { FastDomNode, createFastDomNode } from 'vs/base/browser/styleMutator'; import { IDisposable } from 'vs/base/common/lifecycle'; import { EditorScrollbar } from 'vs/editor/browser/viewParts/editorScrollbar/editorScrollbar'; -let charRenderer2 = createMinimapCharRenderer(); // TODO@minimap - const enum RenderMinimap { None = 0, Small = 1, @@ -225,6 +223,8 @@ export class Minimap extends ViewPart { private readonly _tokensColorTracker: MinimapTokensColorTracker; private readonly _tokensColorTrackerListener: IDisposable; + private readonly _minimapCharRenderer: MinimapCharRenderer; + private _options: MinimapOptions; private _lastLayout: MinimapLayout; private _backgroundFillData: Uint8ClampedArray; @@ -255,10 +255,13 @@ export class Minimap extends ViewPart { this._tokensColorTracker = MinimapTokensColorTracker.getInstance(); this._tokensColorTrackerListener = this._tokensColorTracker.onDidChange(() => this._backgroundFillData = null); + this._minimapCharRenderer = getOrCreateMinimapCharRenderer(); + this._applyLayout(); } public dispose(): void { + this._tokensColorTrackerListener.dispose(); super.dispose(); } @@ -325,17 +328,17 @@ export class Minimap extends ViewPart { this._lastLayout = null; return true; } - public onModelDecorationsChanged(e: editorCommon.IViewDecorationsChangedEvent): boolean { - return false; - } public onModelLinesDeleted(e: editorCommon.IViewLinesDeletedEvent): boolean { + // TODO@minimap: only do so when the lines are painted in the minimap this._lastLayout = null; return true; } public onModelLineChanged(e: editorCommon.IViewLineChangedEvent): boolean { + // TODO@minimap: only do so when the lines are painted in the minimap return true; } public onModelLinesInserted(e: editorCommon.IViewLinesInsertedEvent): boolean { + // TODO@minimap: only do so when the lines are painted in the minimap this._lastLayout = null; return true; } @@ -343,18 +346,6 @@ export class Minimap extends ViewPart { // TODO@minimap: only do so when the lines are painted in the minimap return true; } - public onCursorPositionChanged(e: editorCommon.IViewCursorPositionChangedEvent): boolean { - return false; - } - public onCursorSelectionChanged(e: editorCommon.IViewCursorSelectionChangedEvent): boolean { - return false; - } - public onCursorRevealRange(e: editorCommon.IViewRevealRangeEvent): boolean { - return false; - } - public onCursorScrollRequest(e: editorCommon.IViewScrollRequestEvent): boolean { - return false; - } public onConfigurationChanged(e: editorCommon.IConfigurationChangedEvent): boolean { return this._onOptionsMaybeChanged(); } @@ -362,15 +353,12 @@ export class Minimap extends ViewPart { return this._onOptionsMaybeChanged(); } public onScrollChanged(e: editorCommon.IScrollEvent): boolean { - // TODO@minimap: only do so when scrolling vertically - return true; + return e.scrollTopChanged || e.scrollHeightChanged; } public onZonesChanged(): boolean { + this._lastLayout = null; return true; } - public onViewFocusChanged(isFocused: boolean): boolean { - return false; - } // --- end event handlers @@ -424,7 +412,7 @@ export class Minimap extends ViewPart { // let start = performance.now(); let dy = 0; for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) { - Minimap._renderLine(imageData, background, renderMinimap, charWidth, this._tokensColorTracker, dy, data[lineNumber - startLineNumber]); + Minimap._renderLine(imageData, background, renderMinimap, charWidth, this._tokensColorTracker, this._minimapCharRenderer, dy, data[lineNumber - startLineNumber]); dy += minimapLineHeight; } // let end = performance.now(); @@ -433,7 +421,16 @@ export class Minimap extends ViewPart { ctx.putImageData(imageData, 0, 0); } - private static _renderLine(target: ImageData, backgroundColor: ParsedColor, renderMinimap: RenderMinimap, charWidth: number, colorTracker: MinimapTokensColorTracker, dy: number, lineData: MinimapLineRenderingData) { + private static _renderLine( + target: ImageData, + backgroundColor: ParsedColor, + renderMinimap: RenderMinimap, + charWidth: number, + colorTracker: MinimapTokensColorTracker, + minimapCharRenderer: MinimapCharRenderer, + dy: number, + lineData: MinimapLineRenderingData + ): void { const content = lineData.content; const tokens = lineData.tokens; const tabSize = lineData.tabSize; @@ -466,9 +463,9 @@ export class Minimap extends ViewPart { dx += charWidth; } else { if (renderMinimap === RenderMinimap.Large) { - charRenderer2.x2RenderChar(target, dx, dy, charCode, tokenColor, backgroundColor); + minimapCharRenderer.x2RenderChar(target, dx, dy, charCode, tokenColor, backgroundColor); } else { - charRenderer2.x1RenderChar(target, dx, dy, charCode, tokenColor, backgroundColor); + minimapCharRenderer.x1RenderChar(target, dx, dy, charCode, tokenColor, backgroundColor); } dx += charWidth; } diff --git a/src/vs/editor/common/view/runtimeMinimapCharRenderer.ts b/src/vs/editor/common/view/runtimeMinimapCharRenderer.ts index 3496f047c0e..8c84af5b6ef 100644 --- a/src/vs/editor/common/view/runtimeMinimapCharRenderer.ts +++ b/src/vs/editor/common/view/runtimeMinimapCharRenderer.ts @@ -14,22 +14,17 @@ function toUint8ClampedArrat(arr: number[]): Uint8ClampedArray { return r; } -let _x2Data: Uint8ClampedArray = null; -let _x1Data: Uint8ClampedArray = null; -function init(): void { - if (_x1Data || _x2Data) { - return; +let minimapCharRenderer: MinimapCharRenderer = null; +export function getOrCreateMinimapCharRenderer(): MinimapCharRenderer { + if (!minimapCharRenderer) { + let _x1Data = toUint8ClampedArrat(x1Data); + x1Data = null; + + let _x2Data = toUint8ClampedArrat(x2Data); + x2Data = null; + minimapCharRenderer = new MinimapCharRenderer(_x2Data, _x1Data); } - _x1Data = toUint8ClampedArrat(x1Data); - x1Data = null; - - _x2Data = toUint8ClampedArrat(x2Data); - x2Data = null; -} - -export function createMinimapCharRenderer(): MinimapCharRenderer { - init(); - return new MinimapCharRenderer(_x2Data, _x1Data); + return minimapCharRenderer; } var x2Data = [ diff --git a/src/vs/editor/test/browser/view/minimapFontCreator.ts b/src/vs/editor/test/browser/view/minimapFontCreator.ts index d6300573570..0f7afe3d376 100644 --- a/src/vs/editor/test/browser/view/minimapFontCreator.ts +++ b/src/vs/editor/test/browser/view/minimapFontCreator.ts @@ -6,7 +6,7 @@ import { Constants, MinimapCharRenderer, ParsedColor } from 'vs/editor/common/view/minimapCharRenderer'; import { MinimapCharRendererFactory } from 'vs/editor/test/common/view/minimapCharRendererFactory'; -import { createMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer'; +import { getOrCreateMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer'; let canvas = document.getElementById('my-canvas'); let ctx = canvas.getContext('2d'); @@ -28,7 +28,7 @@ let minimapCharRenderer = MinimapCharRendererFactory.create(sampleData.data); renderImageData(sampleData, 10, 100); renderMinimapCharRenderer(minimapCharRenderer, 400); -renderMinimapCharRenderer(createMinimapCharRenderer(), 600); +renderMinimapCharRenderer(getOrCreateMinimapCharRenderer(), 600); function createFakeImageData(width: number, height: number): ImageData { return { diff --git a/src/vs/editor/test/common/view/minimapCharRenderer.test.ts b/src/vs/editor/test/common/view/minimapCharRenderer.test.ts index 3340bad6afb..9612c4f6991 100644 --- a/src/vs/editor/test/common/view/minimapCharRenderer.test.ts +++ b/src/vs/editor/test/common/view/minimapCharRenderer.test.ts @@ -7,7 +7,7 @@ import * as assert from 'assert'; import { MinimapTokensColorTracker, ParsedColor, Constants } from 'vs/editor/common/view/minimapCharRenderer'; import { MinimapCharRendererFactory } from 'vs/editor/test/common/view/minimapCharRendererFactory'; -import { createMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer'; +import { getOrCreateMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer'; suite('MinimapColors', () => { @@ -137,7 +137,7 @@ suite('MinimapCharRenderer', () => { }); test('letter d @ 2x at runtime', () => { - let renderer = createMinimapCharRenderer(); + let renderer = getOrCreateMinimapCharRenderer(); let background = new ParsedColor(0, 0, 0); let color = new ParsedColor(255, 255, 255); @@ -192,7 +192,7 @@ suite('MinimapCharRenderer', () => { }); test('letter d @ 1x at runtime', () => { - let renderer = createMinimapCharRenderer(); + let renderer = getOrCreateMinimapCharRenderer(); let background = new ParsedColor(0, 0, 0); let color = new ParsedColor(255, 255, 255); -- GitLab