/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; import { SizeStatusBarEntry } from './sizeStatusBarEntry'; import { ZoomStatusBarEntry } from './zoomStatusBarEntry'; import { Disposable } from './dispose'; export class Preview extends Disposable { public static readonly viewType = 'imagePreview.previewEditor'; private _active = true; constructor( private readonly extensionRoot: vscode.Uri, resource: vscode.Uri, private readonly webviewEditor: vscode.WebviewEditor, private readonly sizeStatusBarEntry: SizeStatusBarEntry, private readonly zoomStatusBarEntry: ZoomStatusBarEntry, ) { super(); const resourceRoot = resource.with({ path: resource.path.replace(/\/[^\/]+?\.\w+$/, '/'), }); webviewEditor.webview.options = { enableScripts: true, localResourceRoots: [ resourceRoot, extensionRoot, ] }; webviewEditor.webview.html = this.getWebiewContents(webviewEditor, resource); this._register(webviewEditor.webview.onDidReceiveMessage(message => { switch (message.type) { case 'size': { this.sizeStatusBarEntry.update(message.value); break; } case 'zoom': { this.zoomStatusBarEntry.update(message.value); break; } } })); this._register(zoomStatusBarEntry.onDidChangeScale(e => { this.webviewEditor.webview.postMessage({ type: 'setScale', scale: e.scale }); })); this._register(webviewEditor.onDidChangeViewState(() => { this.update(); })); this._register(webviewEditor.onDidDispose(() => { if (this._active) { this.sizeStatusBarEntry.hide(); this.zoomStatusBarEntry.hide(); } })); this.update(); } private update() { this._active = this.webviewEditor.active; if (this._active) { this.sizeStatusBarEntry.show(); this.zoomStatusBarEntry.show(); } else { this.sizeStatusBarEntry.hide(); this.zoomStatusBarEntry.hide(); } } private getWebiewContents(webviewEditor: vscode.WebviewEditor, resource: vscode.Uri): string { const settings = { isMac: process.platform === 'darwin', src: this.getResourcePath(webviewEditor, resource) }; return /* html */`