browserHostColorSchemeService.ts 2.0 KB
Newer Older
M
Martin Aeschlimann 已提交
1 2 3 4 5 6 7 8 9
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { Emitter, Event } from 'vs/base/common/event';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { Disposable } from 'vs/base/common/lifecycle';
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
10
import { IHostColorSchemeService } from 'vs/workbench/services/themes/common/hostColorSchemeService';
M
Martin Aeschlimann 已提交
11 12
import { ColorScheme } from 'vs/platform/theme/common/theme';

13
export class BrowserHostColorSchemeService extends Disposable implements IHostColorSchemeService {
M
Martin Aeschlimann 已提交
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

	declare readonly _serviceBrand: undefined;

	private readonly _onDidSchemeChangeEvent = this._register(new Emitter<void>());

	constructor(
		@IWorkbenchEnvironmentService private environmentService: IWorkbenchEnvironmentService
	) {
		super();

		this.registerListeners();
	}

	private registerListeners(): void {

		window.matchMedia('(prefers-color-scheme: dark)').addListener(() => {
			this._onDidSchemeChangeEvent.fire();
		});
32 33 34
		window.matchMedia('(forced-colors: active)').addListener(() => {
			this._onDidSchemeChangeEvent.fire();
		});
M
Martin Aeschlimann 已提交
35 36 37 38 39 40 41
	}

	get onDidChangeColorScheme(): Event<void> {
		return this._onDidSchemeChangeEvent.event;
	}

	get colorScheme(): ColorScheme {
42 43 44
		if (window.matchMedia(`(forced-colors: active)`).matches) {
			return ColorScheme.HIGH_CONTRAST;
		} else if (window.matchMedia(`(prefers-color-scheme: light)`).matches) {
M
Martin Aeschlimann 已提交
45 46 47 48 49 50 51 52 53
			return ColorScheme.LIGHT;
		} else if (window.matchMedia(`(prefers-color-scheme: dark)`).matches) {
			return ColorScheme.DARK;
		}
		return this.environmentService.configuration.colorScheme;
	}

}

54
registerSingleton(IHostColorSchemeService, BrowserHostColorSchemeService, true);