提交 88a4b7a0 编写于 作者: B Benjamin Pasero

title - make fullscreen state available to browser

上级 ae23162b
......@@ -9,9 +9,11 @@ import * as Platform from 'vs/base/common/platform';
import Event, { Emitter } from 'vs/base/common/event';
import { IDisposable } from 'vs/base/common/lifecycle';
class ZoomManager {
class WindowManager {
public static INSTANCE = new ZoomManager();
public static INSTANCE = new WindowManager();
private _fullscreen: boolean;
private _zoomLevel: number = 0;
private _zoomFactor: number = 0;
......@@ -22,6 +24,9 @@ class ZoomManager {
private _onDidChangeZoomLevel: Emitter<number> = new Emitter<number>();
public onDidChangeZoomLevel: Event<number> = this._onDidChangeZoomLevel.event;
private _onDidChangeFullscreen: Emitter<void> = new Emitter<void>();
public onDidChangeFullscreen: Event<void> = this._onDidChangeFullscreen.event;
public getZoomLevel(): number {
return this._zoomLevel;
}
......@@ -62,27 +67,49 @@ class ZoomManager {
(<any>ctx).backingStorePixelRatio || 1;
return dpr / bsr;
}
public setFullscreen(fullscreen: boolean): void {
if (this._fullscreen === fullscreen) {
return;
}
this._fullscreen = fullscreen;
this._onDidChangeFullscreen.fire();
}
public isFullscreen(): boolean {
return this._fullscreen;
}
}
/** A zoom index, e.g. 1, 2, 3 */
export function getZoomLevel(): number {
return ZoomManager.INSTANCE.getZoomLevel();
return WindowManager.INSTANCE.getZoomLevel();
}
/** The zoom scale for an index, e.g. 1, 1.2, 1.4 */
export function getZoomFactor(): number {
return ZoomManager.INSTANCE.getZoomFactor();
return WindowManager.INSTANCE.getZoomFactor();
}
export function getPixelRatio(): number {
return ZoomManager.INSTANCE.getPixelRatio();
return WindowManager.INSTANCE.getPixelRatio();
}
export function setZoomLevel(zoomLevel: number): void {
ZoomManager.INSTANCE.setZoomLevel(zoomLevel);
WindowManager.INSTANCE.setZoomLevel(zoomLevel);
}
export function setZoomFactor(zoomFactor: number): void {
ZoomManager.INSTANCE.setZoomFactor(zoomFactor);
WindowManager.INSTANCE.setZoomFactor(zoomFactor);
}
export function onDidChangeZoomLevel(callback: (zoomLevel: number) => void): IDisposable {
return ZoomManager.INSTANCE.onDidChangeZoomLevel(callback);
return WindowManager.INSTANCE.onDidChangeZoomLevel(callback);
}
export function setFullscreen(fullscreen: boolean): void {
WindowManager.INSTANCE.setFullscreen(fullscreen);
}
export function isFullscreen(): boolean {
return WindowManager.INSTANCE.isFullscreen();
}
export function onDidChangeFullscreen(callback: () => void): IDisposable {
return WindowManager.INSTANCE.onDidChangeFullscreen(callback);
}
const userAgent = navigator.userAgent;
......
......@@ -96,6 +96,7 @@ export interface IWindowConfiguration extends ParsedArgs {
userEnv: platform.IProcessEnvironment;
zoomLevel?: number;
fullscreen?: boolean;
workspacePath?: string;
......@@ -442,6 +443,9 @@ export class VSCodeWindow {
windowConfiguration.zoomLevel = zoomLevel;
}
// Set fullscreen state
windowConfiguration.fullscreen = this._win.isFullScreen();
// Config (combination of process.argv and window configuration)
const environment = parseArgs(process.argv);
const config = objects.assign(environment, windowConfiguration);
......
......@@ -140,6 +140,7 @@ export class ElectronIntegration {
// Fullscreen Events
ipc.on('vscode:enterFullScreen', (event) => {
this.partService.joinCreation().then(() => {
browser.setFullscreen(true);
this.partService.addClass('fullscreen');
if (!this.partService.isTitleBarHidden()) {
......@@ -150,6 +151,7 @@ export class ElectronIntegration {
ipc.on('vscode:leaveFullScreen', (event) => {
this.partService.joinCreation().then(() => {
browser.setFullscreen(false);
this.partService.removeClass('fullscreen');
if (!this.partService.isTitleBarHidden()) {
......
......@@ -9,6 +9,7 @@ import nls = require('vs/nls');
import { TPromise } from 'vs/base/common/winjs.base';
import { WorkbenchShell } from 'vs/workbench/electron-browser/shell';
import { IOptions } from 'vs/workbench/common/options';
import * as browser from 'vs/base/browser/browser';
import { domContentLoaded } from 'vs/base/browser/dom';
import errors = require('vs/base/common/errors');
import platform = require('vs/base/common/platform');
......@@ -29,6 +30,8 @@ import fs = require('fs');
import gracefulFs = require('graceful-fs');
import { IPath, IOpenFileRequest } from 'vs/workbench/electron-browser/common';
import { webFrame } from 'electron';
gracefulFs.gracefulify(fs); // enable gracefulFs
const timers = (<any>window).MonacoEnvironment.timers;
......@@ -40,10 +43,18 @@ export interface IWindowConfiguration extends ParsedArgs, IOpenFileRequest {
userEnv: any; /* vs/code/electron-main/env/IProcessEnvironment*/
workspacePath?: string;
zoomLevel?: number;
fullscreen?: boolean;
}
export function startup(configuration: IWindowConfiguration): TPromise<void> {
// Ensure others can listen to zoom level changes
browser.setZoomLevel(webFrame.getZoomLevel());
browser.setZoomFactor(webFrame.getZoomFactor());
browser.setFullscreen(!!configuration.fullscreen);
// Shell Options
const filesToOpen = configuration.filesToOpen && configuration.filesToOpen.length ? toInputs(configuration.filesToOpen) : null;
const filesToCreate = configuration.filesToCreate && configuration.filesToCreate.length ? toInputs(configuration.filesToCreate) : null;
......
......@@ -18,7 +18,6 @@ import errors = require('vs/base/common/errors');
import { toErrorMessage } from 'vs/base/common/errorMessage';
import product from 'vs/platform/product';
import pkg from 'vs/platform/package';
import * as browser from 'vs/base/browser/browser';
import { ContextViewService } from 'vs/platform/contextview/browser/contextViewService';
import timer = require('vs/base/common/timer');
import { Workbench } from 'vs/workbench/electron-browser/workbench';
......@@ -87,7 +86,7 @@ import { IURLService } from 'vs/platform/url/common/url';
import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions';
import { WorkspaceConfigurationService } from 'vs/workbench/services/configuration/node/configurationService';
import { ExtensionHostProcessWorker } from 'vs/workbench/electron-browser/extensionHost';
import { remote, webFrame } from 'electron';
import { remote } from 'electron';
// self registering services
import 'vs/platform/opener/browser/opener.contribution';
......@@ -365,10 +364,6 @@ export class WorkbenchShell {
this.onUnexpectedError(error);
});
// Ensure others can listen to zoom level changes
browser.setZoomLevel(webFrame.getZoomLevel());
browser.setZoomFactor(webFrame.getZoomFactor());
// Shell Class for CSS Scoping
$(this.container).addClass('monaco-shell');
......
......@@ -5,7 +5,7 @@
'use strict';
import 'vs/css!./messageList';
import 'vs/css!./media/messageList';
import nls = require('vs/nls');
import { TPromise } from 'vs/base/common/winjs.base';
import { Builder, $ } from 'vs/base/browser/builder';
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册