提交 8f34b9e2 编写于 作者: M Martin Aeschlimann

themes: move tokenColors normalization to tokenColors getter

上级 add35181
...@@ -58,12 +58,39 @@ export class ColorThemeData implements IColorTheme { ...@@ -58,12 +58,39 @@ export class ColorThemeData implements IColorTheme {
} }
get tokenColors(): ITokenColorizationRule[] { get tokenColors(): ITokenColorizationRule[] {
const result: ITokenColorizationRule[] = [];
// the default rule (scope empty) is always the first rule. Ignore all other default rules.
const foreground = this.getColor(editorForeground) || this.getDefault(editorForeground)!;
const background = this.getColor(editorBackground) || this.getDefault(editorBackground)!;
result.push({
settings: {
foreground: Color.Format.CSS.formatHexA(foreground),
background: Color.Format.CSS.formatHexA(background)
}
});
let hasDefaultTokens = false;
function addRule(rule: ITokenColorizationRule) {
if (rule.scope && rule.settings) {
if (rule.scope === 'token.info-token') {
hasDefaultTokens = true;
}
result.push(rule);
}
}
this.themeTokenColors.forEach(addRule);
// Add the custom colors after the theme colors // Add the custom colors after the theme colors
// so that they will override them // so that they will override them
return this.themeTokenColors.concat(this.customTokenColors); this.customTokenColors.forEach(addRule);
}
if (!hasDefaultTokens) {
defaultThemeColors[this.type].forEach(addRule);
}
return result;
}
public getColor(colorId: ColorIdentifier, useDefault?: boolean): Color | undefined { public getColor(colorId: ColorIdentifier, useDefault?: boolean): Color | undefined {
let color: Color | undefined = this.customColorMap[colorId]; let color: Color | undefined = this.customColorMap[colorId];
...@@ -93,9 +120,6 @@ export class ColorThemeData implements IColorTheme { ...@@ -93,9 +120,6 @@ export class ColorThemeData implements IColorTheme {
if (types.isObject(themeSpecificColors)) { if (types.isObject(themeSpecificColors)) {
this.overwriteCustomColors(themeSpecificColors); this.overwriteCustomColors(themeSpecificColors);
} }
if (this.themeTokenColors && this.themeTokenColors.length) {
updateDefaultRuleSettings(this.themeTokenColors[0], this);
}
} }
private overwriteCustomColors(colors: IColorCustomizations) { private overwriteCustomColors(colors: IColorCustomizations) {
...@@ -155,32 +179,13 @@ export class ColorThemeData implements IColorTheme { ...@@ -155,32 +179,13 @@ export class ColorThemeData implements IColorTheme {
if (!this.location) { if (!this.location) {
return Promise.resolve(undefined); return Promise.resolve(undefined);
} }
this.themeTokenColors = [];
this.colorMap = {};
return _loadColorTheme(fileService, this.location, this.themeTokenColors, this.colorMap).then(_ => { return _loadColorTheme(fileService, this.location, this.themeTokenColors, this.colorMap).then(_ => {
this.isLoaded = true; this.isLoaded = true;
this.sanitizeTokenColors();
}); });
} }
/**
* Place the default settings first and add the token-info rules
*/
private sanitizeTokenColors() {
let hasDefaultTokens = false;
let updatedTokenColors: ITokenColorizationRule[] = [updateDefaultRuleSettings({ settings: {} }, this)];
this.themeTokenColors.forEach(rule => {
if (rule.scope && rule.settings) {
if (rule.scope === 'token.info-token') {
hasDefaultTokens = true;
}
updatedTokenColors.push(rule);
}
});
if (!hasDefaultTokens) {
updatedTokenColors.push(...defaultThemeColors[this.type]);
}
this.themeTokenColors = updatedTokenColors;
}
toStorageData() { toStorageData() {
let colorMapData = {}; let colorMapData = {};
for (let key in this.colorMap) { for (let key in this.colorMap) {
...@@ -200,7 +205,7 @@ export class ColorThemeData implements IColorTheme { ...@@ -200,7 +205,7 @@ export class ColorThemeData implements IColorTheme {
} }
hasEqualData(other: ColorThemeData) { hasEqualData(other: ColorThemeData) {
return objects.equals(this.colorMap, other.colorMap) && objects.equals(this.tokenColors, other.tokenColors); return objects.equals(this.colorMap, other.colorMap) && objects.equals(this.themeTokenColors, other.themeTokenColors);
} }
get baseTheme(): string { get baseTheme(): string {
...@@ -220,7 +225,7 @@ export class ColorThemeData implements IColorTheme { ...@@ -220,7 +225,7 @@ export class ColorThemeData implements IColorTheme {
static createUnloadedTheme(id: string): ColorThemeData { static createUnloadedTheme(id: string): ColorThemeData {
let themeData = new ColorThemeData(id, '', '__' + id); let themeData = new ColorThemeData(id, '', '__' + id);
themeData.isLoaded = false; themeData.isLoaded = false;
themeData.themeTokenColors = [{ settings: {} }]; themeData.themeTokenColors = [];
themeData.watch = false; themeData.watch = false;
return themeData; return themeData;
} }
...@@ -228,7 +233,7 @@ export class ColorThemeData implements IColorTheme { ...@@ -228,7 +233,7 @@ export class ColorThemeData implements IColorTheme {
static createLoadedEmptyTheme(id: string, settingsId: string): ColorThemeData { static createLoadedEmptyTheme(id: string, settingsId: string): ColorThemeData {
let themeData = new ColorThemeData(id, '', settingsId); let themeData = new ColorThemeData(id, '', settingsId);
themeData.isLoaded = true; themeData.isLoaded = true;
themeData.themeTokenColors = [{ settings: {} }]; themeData.themeTokenColors = [];
themeData.watch = false; themeData.watch = false;
return themeData; return themeData;
} }
...@@ -357,14 +362,6 @@ function _loadSyntaxTokens(fileService: IFileService, themeLocation: URI, result ...@@ -357,14 +362,6 @@ function _loadSyntaxTokens(fileService: IFileService, themeLocation: URI, result
}); });
} }
function updateDefaultRuleSettings(defaultRule: ITokenColorizationRule, theme: ColorThemeData): ITokenColorizationRule {
const foreground = theme.getColor(editorForeground) || theme.getDefault(editorForeground)!;
const background = theme.getColor(editorBackground) || theme.getDefault(editorBackground)!;
defaultRule.settings.foreground = Color.Format.CSS.formatHexA(foreground);
defaultRule.settings.background = Color.Format.CSS.formatHexA(background);
return defaultRule;
}
let defaultThemeColors: { [baseTheme: string]: ITokenColorizationRule[] } = { let defaultThemeColors: { [baseTheme: string]: ITokenColorizationRule[] } = {
'light': [ 'light': [
{ scope: 'token.info-token', settings: { foreground: '#316bcd' } }, { scope: 'token.info-token', settings: { foreground: '#316bcd' } },
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册