From 51b83f5d29e7e3e6013fa4e4879e2208e1694a87 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Thu, 23 Feb 2017 18:06:31 +0100 Subject: [PATCH] Fixes #21007: Minimap in output panel does not immediately respond to theme change --- src/vs/editor/browser/viewParts/minimap/minimap.ts | 10 ++++++---- src/vs/editor/common/view/viewEvents.ts | 13 ++++++++++++- src/vs/editor/common/viewModel/viewEventHandler.ts | 9 +++++++++ src/vs/editor/common/viewModel/viewModelImpl.ts | 4 ++++ 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/vs/editor/browser/viewParts/minimap/minimap.ts b/src/vs/editor/browser/viewParts/minimap/minimap.ts index d41d5534feb..65a8f43f5bb 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimap.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimap.ts @@ -372,7 +372,6 @@ export class Minimap extends ViewPart { private readonly _canvas: FastDomNode; private readonly _slider: FastDomNode; private readonly _tokensColorTracker: MinimapTokensColorTracker; - private readonly _tokensColorTrackerListener: IDisposable; private readonly _mouseDownListener: IDisposable; private readonly _minimapCharRenderer: MinimapCharRenderer; @@ -405,7 +404,6 @@ export class Minimap extends ViewPart { this._domNode.domNode.appendChild(this._slider.domNode); this._tokensColorTracker = MinimapTokensColorTracker.getInstance(); - this._tokensColorTrackerListener = this._tokensColorTracker.onDidChange(() => this._buffers = null); this._minimapCharRenderer = getOrCreateMinimapCharRenderer(); @@ -438,7 +436,6 @@ export class Minimap extends ViewPart { } public dispose(): void { - this._tokensColorTrackerListener.dispose(); this._mouseDownListener.dispose(); super.dispose(); } @@ -455,7 +452,6 @@ export class Minimap extends ViewPart { this._canvas.domNode.width = this._options.canvasInnerWidth; this._canvas.domNode.height = this._options.canvasInnerHeight; this._slider.setWidth(this._options.minimapWidth); - this._buffers = null; } private _getBuffer(): ImageData { @@ -477,6 +473,7 @@ export class Minimap extends ViewPart { } this._options = opts; this._lastRenderData = null; + this._buffers = null; this._applyLayout(); return true; } @@ -517,6 +514,11 @@ export class Minimap extends ViewPart { } return false; } + public onTokensColorsChanged(e: viewEvents.ViewTokensColorsChangedEvent): boolean { + this._lastRenderData = null; + this._buffers = null; + return true; + } public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { this._lastRenderData = null; return true; diff --git a/src/vs/editor/common/view/viewEvents.ts b/src/vs/editor/common/view/viewEvents.ts index 286e9515353..b58280fe427 100644 --- a/src/vs/editor/common/view/viewEvents.ts +++ b/src/vs/editor/common/view/viewEvents.ts @@ -25,7 +25,8 @@ export const enum ViewEventType { ViewScrollChanged = 12, ViewScrollRequest = 13, ViewTokensChanged = 14, - ViewZonesChanged = 15, + ViewTokensColorsChanged = 15, + ViewZonesChanged = 16, } export class ViewConfigurationChangedEvent { @@ -270,6 +271,15 @@ export class ViewTokensChangedEvent { } } +export class ViewTokensColorsChangedEvent { + + public readonly type = ViewEventType.ViewTokensColorsChanged; + + constructor() { + // Nothing to do + } +} + export class ViewZonesChangedEvent { public readonly type = ViewEventType.ViewZonesChanged; @@ -294,5 +304,6 @@ export type ViewEvent = ( | ViewScrollChangedEvent | ViewScrollRequestEvent | ViewTokensChangedEvent + | ViewTokensColorsChangedEvent | ViewZonesChangedEvent ); diff --git a/src/vs/editor/common/viewModel/viewEventHandler.ts b/src/vs/editor/common/viewModel/viewEventHandler.ts index 1f57e5a3cb6..585088c920a 100644 --- a/src/vs/editor/common/viewModel/viewEventHandler.ts +++ b/src/vs/editor/common/viewModel/viewEventHandler.ts @@ -74,6 +74,9 @@ export class ViewEventHandler { public onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean { return false; } + public onTokensColorsChanged(e: viewEvents.ViewTokensColorsChangedEvent): boolean { + return false; + } public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { return false; } @@ -173,6 +176,12 @@ export class ViewEventHandler { } break; + case viewEvents.ViewEventType.ViewTokensColorsChanged: + if (this.onTokensColorsChanged(e)) { + shouldRender = true; + } + break; + case viewEvents.ViewEventType.ViewZonesChanged: if (this.onZonesChanged(e)) { shouldRender = true; diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 957d48bda28..26d4f637372 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -19,6 +19,7 @@ import { MinimapLinesRenderingData, ViewLineRenderingData, ViewModelDecoration, import { SplitLinesCollection } from 'vs/editor/common/viewModel/splitLinesCollection'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import * as errors from 'vs/base/common/errors'; +import { MinimapTokensColorTracker } from 'vs/editor/common/view/minimapCharRenderer'; export class CoordinatesConverter implements ICoordinatesConverter { @@ -128,6 +129,9 @@ export class ViewModel implements IViewModel { this._toDispose.push(this.configuration.onDidChange((e) => { this.onEvents([new EmitterEvent(editorCommon.EventType.ConfigurationChanged, e)]); })); + this._toDispose.push(MinimapTokensColorTracker.getInstance().onDidChange(() => { + this._emit([new viewEvents.ViewTokensColorsChangedEvent()]); + })); this._listeners = []; }