From f4bc9f1ecd72449dfdaf09ebbe6082833218504c Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sun, 24 Jul 2022 19:47:18 -0700 Subject: [PATCH 1/4] Pull fonts using latest font access API in Chrome Part of #958 --- addons/xterm-addon-ligatures/src/font.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/addons/xterm-addon-ligatures/src/font.ts b/addons/xterm-addon-ligatures/src/font.ts index 4075cc6c..3a3c799a 100644 --- a/addons/xterm-addon-ligatures/src/font.ts +++ b/addons/xterm-addon-ligatures/src/font.ts @@ -65,6 +65,22 @@ export default async function load(fontFamily: string, cacheSize: number): Promi console.error(err.name, err.message); } } + // Latest proposal + else if ('queryLocalFonts' in window) { + const fonts: Record = {}; + try { + const fontsIterator = await (window as any).queryLocalFonts(); // await (navigator as unknown as IFontAccessNavigator).fonts.query(); + for (const metadata of fontsIterator) { + if (!fonts.hasOwnProperty(metadata.family)) { + fonts[metadata.family] = []; + } + fonts[metadata.family].push(metadata); + } + fontsPromise = Promise.resolve(fonts); + } catch (err: any) { + console.error(err.name, err.message); + } + } // Node environment or no font access API else { try { From 4744ef34b2029415605448fa38c89f07bc0095bd Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sun, 24 Jul 2022 20:44:06 -0700 Subject: [PATCH 2/4] Remove unneeded comment --- addons/xterm-addon-ligatures/src/font.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/xterm-addon-ligatures/src/font.ts b/addons/xterm-addon-ligatures/src/font.ts index 3a3c799a..e2e40d98 100644 --- a/addons/xterm-addon-ligatures/src/font.ts +++ b/addons/xterm-addon-ligatures/src/font.ts @@ -69,7 +69,7 @@ export default async function load(fontFamily: string, cacheSize: number): Promi else if ('queryLocalFonts' in window) { const fonts: Record = {}; try { - const fontsIterator = await (window as any).queryLocalFonts(); // await (navigator as unknown as IFontAccessNavigator).fonts.query(); + const fontsIterator = await (window as any).queryLocalFonts(); for (const metadata of fontsIterator) { if (!fonts.hasOwnProperty(metadata.family)) { fonts[metadata.family] = []; From 78ddb4b14a72136113dacc2b1f2d04d1a7e79285 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Mon, 25 Jul 2022 07:00:58 -0700 Subject: [PATCH 3/4] Add link to font access api change --- addons/xterm-addon-ligatures/src/font.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/xterm-addon-ligatures/src/font.ts b/addons/xterm-addon-ligatures/src/font.ts index e2e40d98..8336cefc 100644 --- a/addons/xterm-addon-ligatures/src/font.ts +++ b/addons/xterm-addon-ligatures/src/font.ts @@ -106,7 +106,9 @@ export default async function load(fontFamily: string, cacheSize: number): Promi if (fonts.hasOwnProperty(family) && fonts[family].length > 0) { const font = fonts[family][0]; if ('blob' in font) { - return loadBuffer(await (await font.blob()).arrayBuffer(), { cacheSize }); + const bytes = await font.blob(); + const buffer = await bytes.arrayBuffer(); + return loadBuffer(buffer, { cacheSize }); } return await loadFile(font.path, { cacheSize }); } From 5664ff310109658f61554612cb9a9e3da4081833 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Mon, 25 Jul 2022 07:42:38 -0700 Subject: [PATCH 4/4] Fix ligature tests in node --- addons/xterm-addon-ligatures/src/font.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/xterm-addon-ligatures/src/font.ts b/addons/xterm-addon-ligatures/src/font.ts index 8336cefc..5c5f0a6c 100644 --- a/addons/xterm-addon-ligatures/src/font.ts +++ b/addons/xterm-addon-ligatures/src/font.ts @@ -65,8 +65,8 @@ export default async function load(fontFamily: string, cacheSize: number): Promi console.error(err.name, err.message); } } - // Latest proposal - else if ('queryLocalFonts' in window) { + // Latest proposal https://bugs.chromium.org/p/chromium/issues/detail?id=1312603 + else if (typeof process !== 'object' && 'queryLocalFonts' in window) { const fonts: Record = {}; try { const fontsIterator = await (window as any).queryLocalFonts();