preload fonts so that when first opening an actor / item sheet, they are already available and the sheet is rendered faster

This commit is contained in:
Johannes Loher 2021-07-08 23:25:00 +02:00
parent e7f6477127
commit dff760a7f1
2 changed files with 39 additions and 0 deletions

37
src/module/fonts.ts Normal file
View file

@ -0,0 +1,37 @@
type CSSOMString = string;
type FontFaceLoadStatus = "unloaded" | "loading" | "loaded" | "error";
type FontFaceSetStatus = "loading" | "loaded";
interface FontFace {
family: CSSOMString;
style: CSSOMString;
weight: CSSOMString;
stretch: CSSOMString;
unicodeRange: CSSOMString;
variant: CSSOMString;
featureSettings: CSSOMString;
variationSettings: CSSOMString;
display: CSSOMString;
readonly status: FontFaceLoadStatus;
readonly loaded: Promise<FontFace>;
load(): Promise<FontFace>;
}
interface FontFaceSet {
readonly status: FontFaceSetStatus;
readonly ready: Promise<FontFaceSet>;
check(font: string, text?: string): boolean;
load(font: string, text?: string): Promise<FontFace[]>;
}
declare global {
interface Document {
fonts: FontFaceSet;
}
}
const fonts = ["Lora", "Wood Stamp"];
export async function preloadFonts() {
return Promise.all(fonts.map((font) => document.fonts.load(`1rem ${font}`)));
}