提交 97511c73 编写于 作者: A Alex Dima

Some cleanup in minimap

上级 33753656
......@@ -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;
}
......
......@@ -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 = [
......
......@@ -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 = <HTMLCanvasElement>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 {
......
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册