diff --git a/src/vs/base/browser/ui/codicons/codicon/codicon.css b/src/vs/base/browser/ui/codicons/codicon/codicon.css index 28e1c742b0d..a0593f7cbff 100644 --- a/src/vs/base/browser/ui/codicons/codicon/codicon.css +++ b/src/vs/base/browser/ui/codicons/codicon/codicon.css @@ -5,7 +5,7 @@ @font-face { font-family: "codicon"; - src: url("./codicon.ttf?b72c513f65e30cf5c3607d5a7971b6a9") format("truetype"); + src: url("./codicon.ttf?5d4d76ab2ce5108968ad644d591a16a6") format("truetype"); } .codicon[class*='codicon-'] { @@ -20,3 +20,5 @@ -webkit-user-select: none; -ms-user-select: none; } + +/* icon rules are dynamically created in codiconStyles */ diff --git a/src/vs/base/browser/ui/codicons/codicons.ts b/src/vs/base/browser/ui/codicons/codiconStyles.ts similarity index 53% rename from src/vs/base/browser/ui/codicons/codicons.ts rename to src/vs/base/browser/ui/codicons/codiconStyles.ts index 29ad66ef5e4..899af845e8f 100644 --- a/src/vs/base/browser/ui/codicons/codicons.ts +++ b/src/vs/base/browser/ui/codicons/codiconStyles.ts @@ -8,32 +8,32 @@ import 'vs/css!./codicon/codicon-modifications'; import 'vs/css!./codicon/codicon-animations'; import { Codicon, iconRegistry } from 'vs/base/common/codicons'; -import { createCSSRule, createStyleSheet } from 'vs/base/browser/dom'; - -let codiconStyleSheet: undefined | HTMLStyleElement; - -function getOrCreateStyleSheet(): HTMLStyleElement { - if (!codiconStyleSheet) { - codiconStyleSheet = createStyleSheet(); - codiconStyleSheet.className = 'codiconStyleSheet'; - } - return codiconStyleSheet; -} +import { createStyleSheet } from 'vs/base/browser/dom'; +import { RunOnceScheduler } from 'vs/base/common/async'; function initialize() { - for (let c of iconRegistry.all) { - register(c); + let codiconStyleSheet = createStyleSheet(); + codiconStyleSheet.id = 'codiconStyles'; + + function updateAll() { + const rules = []; + for (let c of iconRegistry.all) { + rules.push(formatRule(c)); + } + codiconStyleSheet.innerHTML = rules.join('\n'); } - iconRegistry.onDidRegister(register); + + const delayer = new RunOnceScheduler(updateAll, 0); + iconRegistry.onDidRegister(() => delayer.schedule()); + delayer.schedule(); } - -function register(c: Codicon) { +function formatRule(c: Codicon) { let def = c.definition; while (def instanceof Codicon) { def = def.definition; } - createCSSRule(`.codicon-${c.id}:before`, `content: '${def.character}'`, getOrCreateStyleSheet()); + return `.codicon-${c.id}:before { content: '${def.character}'; }`; } initialize(); diff --git a/src/vs/code/electron-browser/issue/issueReporterMain.ts b/src/vs/code/electron-browser/issue/issueReporterMain.ts index 5e84ca25447..dcd7c52f566 100644 --- a/src/vs/code/electron-browser/issue/issueReporterMain.ts +++ b/src/vs/code/electron-browser/issue/issueReporterMain.ts @@ -8,7 +8,7 @@ import * as os from 'os'; import * as browser from 'vs/base/browser/browser'; import { $ } from 'vs/base/browser/dom'; import { Button } from 'vs/base/browser/ui/button/button'; -import 'vs/base/browser/ui/codicons/codicons'; // make sure codicon css is loaded +import 'vs/base/browser/ui/codicons/codiconStyles'; // make sure codicon css is loaded import { CodiconLabel } from 'vs/base/browser/ui/codicons/codiconLabel'; import * as collections from 'vs/base/common/collections'; import { debounce } from 'vs/base/common/decorators'; diff --git a/src/vs/editor/contrib/suggest/suggestWidget.ts b/src/vs/editor/contrib/suggest/suggestWidget.ts index ffe26f6dd24..2c0e2d5a3f8 100644 --- a/src/vs/editor/contrib/suggest/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/suggestWidget.ts @@ -5,7 +5,7 @@ import 'vs/css!./media/suggest'; import 'vs/css!./media/suggestStatusBar'; -import 'vs/base/browser/ui/codicons/codicons'; // The codicon symbol styles are defined here and must be loaded +import 'vs/base/browser/ui/codicons/codiconStyles'; // The codicon symbol styles are defined here and must be loaded import 'vs/editor/contrib/documentSymbols/outlineTree'; // The codicon symbol colors are defined here and must be loaded import * as nls from 'vs/nls'; import { createMatches } from 'vs/base/common/filters'; diff --git a/src/vs/editor/editor.all.ts b/src/vs/editor/editor.all.ts index b1a6c4a8286..89eb4edd67f 100644 --- a/src/vs/editor/editor.all.ts +++ b/src/vs/editor/editor.all.ts @@ -48,3 +48,5 @@ import 'vs/editor/contrib/wordPartOperations/wordPartOperations'; // Load up these strings even in VSCode, even if they are not used // in order to get them translated import 'vs/editor/common/standaloneStrings'; + +import 'vs/base/browser/ui/codicons/codiconStyles'; // The codicons are defined here and must be loaded