Fixes #21007: Minimap in output panel does not immediately respond to theme change

This commit is contained in:
Alex Dima 2017-02-23 18:06:31 +01:00
parent 669ab8b0a4
commit 51b83f5d29
4 changed files with 31 additions and 5 deletions

View file

@ -372,7 +372,6 @@ export class Minimap extends ViewPart {
private readonly _canvas: FastDomNode<HTMLCanvasElement>;
private readonly _slider: FastDomNode<HTMLElement>;
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;

View file

@ -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
);

View file

@ -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;

View file

@ -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 = [];
}