123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import { CSSIcon } from '../../../base/common/codicons.js';
- import { Emitter } from '../../../base/common/event.js';
- import { Disposable, toDisposable } from '../../../base/common/lifecycle.js';
- import { createDecorator } from '../../instantiation/common/instantiation.js';
- import * as platform from '../../registry/common/platform.js';
- import { ColorScheme } from './theme.js';
- export const IThemeService = createDecorator('themeService');
- export var ThemeColor;
- (function (ThemeColor) {
- function isThemeColor(obj) {
- return obj && typeof obj === 'object' && typeof obj.id === 'string';
- }
- ThemeColor.isThemeColor = isThemeColor;
- })(ThemeColor || (ThemeColor = {}));
- export function themeColorFromId(id) {
- return { id };
- }
- export var ThemeIcon;
- (function (ThemeIcon) {
- function isThemeIcon(obj) {
- return obj && typeof obj === 'object' && typeof obj.id === 'string' && (typeof obj.color === 'undefined' || ThemeColor.isThemeColor(obj.color));
- }
- ThemeIcon.isThemeIcon = isThemeIcon;
- const _regexFromString = new RegExp(`^\\$\\((${CSSIcon.iconNameExpression}(?:${CSSIcon.iconModifierExpression})?)\\)$`);
- function fromString(str) {
- const match = _regexFromString.exec(str);
- if (!match) {
- return undefined;
- }
- let [, name] = match;
- return { id: name };
- }
- ThemeIcon.fromString = fromString;
- function modify(icon, modifier) {
- let id = icon.id;
- const tildeIndex = id.lastIndexOf('~');
- if (tildeIndex !== -1) {
- id = id.substring(0, tildeIndex);
- }
- if (modifier) {
- id = `${id}~${modifier}`;
- }
- return { id };
- }
- ThemeIcon.modify = modify;
- function getModifier(icon) {
- const tildeIndex = icon.id.lastIndexOf('~');
- if (tildeIndex !== -1) {
- return icon.id.substring(tildeIndex + 1);
- }
- return undefined;
- }
- ThemeIcon.getModifier = getModifier;
- function isEqual(ti1, ti2) {
- var _a, _b;
- return ti1.id === ti2.id && ((_a = ti1.color) === null || _a === void 0 ? void 0 : _a.id) === ((_b = ti2.color) === null || _b === void 0 ? void 0 : _b.id);
- }
- ThemeIcon.isEqual = isEqual;
- function asThemeIcon(codicon, color) {
- return { id: codicon.id, color: color ? themeColorFromId(color) : undefined };
- }
- ThemeIcon.asThemeIcon = asThemeIcon;
- ThemeIcon.asClassNameArray = CSSIcon.asClassNameArray;
- ThemeIcon.asClassName = CSSIcon.asClassName;
- ThemeIcon.asCSSSelector = CSSIcon.asCSSSelector;
- })(ThemeIcon || (ThemeIcon = {}));
- export function getThemeTypeSelector(type) {
- switch (type) {
- case ColorScheme.DARK: return 'vs-dark';
- case ColorScheme.HIGH_CONTRAST: return 'hc-black';
- default: return 'vs';
- }
- }
- // static theming participant
- export const Extensions = {
- ThemingContribution: 'base.contributions.theming'
- };
- class ThemingRegistry {
- constructor() {
- this.themingParticipants = [];
- this.themingParticipants = [];
- this.onThemingParticipantAddedEmitter = new Emitter();
- }
- onColorThemeChange(participant) {
- this.themingParticipants.push(participant);
- this.onThemingParticipantAddedEmitter.fire(participant);
- return toDisposable(() => {
- const idx = this.themingParticipants.indexOf(participant);
- this.themingParticipants.splice(idx, 1);
- });
- }
- getThemingParticipants() {
- return this.themingParticipants;
- }
- }
- let themingRegistry = new ThemingRegistry();
- platform.Registry.add(Extensions.ThemingContribution, themingRegistry);
- export function registerThemingParticipant(participant) {
- return themingRegistry.onColorThemeChange(participant);
- }
- /**
- * Utility base class for all themable components.
- */
- export class Themable extends Disposable {
- constructor(themeService) {
- super();
- this.themeService = themeService;
- this.theme = themeService.getColorTheme();
- // Hook up to theme changes
- this._register(this.themeService.onDidColorThemeChange(theme => this.onThemeChange(theme)));
- }
- onThemeChange(theme) {
- this.theme = theme;
- this.updateStyles();
- }
- updateStyles() {
- // Subclasses to override
- }
- }
|