mirror of https://git.tuxpa.in/a/code-server.git
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
|
/*---------------------------------------------------------------------------------------------
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||
|
*--------------------------------------------------------------------------------------------*/
|
||
|
|
||
|
import * as vscode from 'vscode';
|
||
|
import * as nls from 'vscode-nls';
|
||
|
import { PreviewStatusBarEntry as OwnedStatusBarEntry } from './ownedStatusBarEntry';
|
||
|
|
||
|
const localize = nls.loadMessageBundle();
|
||
|
|
||
|
const selectZoomLevelCommandId = '_imagePreview.selectZoomLevel';
|
||
|
|
||
|
export type Scale = number | 'fit';
|
||
|
|
||
|
export class ZoomStatusBarEntry extends OwnedStatusBarEntry {
|
||
|
|
||
|
private readonly _onDidChangeScale = this._register(new vscode.EventEmitter<{ scale: Scale }>());
|
||
|
public readonly onDidChangeScale = this._onDidChangeScale.event;
|
||
|
|
||
|
constructor() {
|
||
|
super({
|
||
|
id: 'imagePreview.zoom',
|
||
|
name: localize('zoomStatusBar.name', "Image Zoom"),
|
||
|
alignment: vscode.StatusBarAlignment.Right,
|
||
|
priority: 102 /* to the left of editor size entry (101) */,
|
||
|
});
|
||
|
|
||
|
this._register(vscode.commands.registerCommand(selectZoomLevelCommandId, async () => {
|
||
|
type MyPickItem = vscode.QuickPickItem & { scale: Scale };
|
||
|
|
||
|
const scales: Scale[] = [10, 5, 2, 1, 0.5, 0.2, 'fit'];
|
||
|
const options = scales.map((scale): MyPickItem => ({
|
||
|
label: this.zoomLabel(scale),
|
||
|
scale
|
||
|
}));
|
||
|
|
||
|
const pick = await vscode.window.showQuickPick(options, {
|
||
|
placeHolder: localize('zoomStatusBar.placeholder', "Select zoom level")
|
||
|
});
|
||
|
if (pick) {
|
||
|
this._onDidChangeScale.fire({ scale: pick.scale });
|
||
|
}
|
||
|
}));
|
||
|
|
||
|
this.entry.command = selectZoomLevelCommandId;
|
||
|
}
|
||
|
|
||
|
public show(owner: string, scale: Scale) {
|
||
|
this.showItem(owner, this.zoomLabel(scale));
|
||
|
}
|
||
|
|
||
|
private zoomLabel(scale: Scale): string {
|
||
|
return scale === 'fit'
|
||
|
? localize('zoomStatusBar.wholeImageLabel', "Whole Image")
|
||
|
: `${Math.round(scale * 100)}%`;
|
||
|
}
|
||
|
}
|