Files
nothoughts/node_modules/pixi.js/lib/scene/text-bitmap/BitmapFontManager.mjs.map
2025-08-04 18:57:35 +02:00

1 line
14 KiB
Plaintext

{"version":3,"file":"BitmapFontManager.mjs","sources":["../../../src/scene/text-bitmap/BitmapFontManager.ts"],"sourcesContent":["import { Cache } from '../../assets/cache/Cache';\nimport { deprecation, v8_0_0 } from '../../utils/logging/deprecation';\nimport { warn } from '../../utils/logging/warn';\nimport { TextStyle } from '../text/TextStyle';\nimport { DynamicBitmapFont } from './DynamicBitmapFont';\nimport { getBitmapTextLayout } from './utils/getBitmapTextLayout';\nimport { resolveCharacters } from './utils/resolveCharacters';\n\nimport type { TextStyleOptions } from '../text/TextStyle';\nimport type { BitmapFont } from './BitmapFont';\nimport type { BitmapTextLayoutData } from './utils/getBitmapTextLayout';\n\nlet fontCount = 0;\n\n/**\n *\n * The options for installing a new BitmapFont. Once installed the font will be available for use in the BitmapText.\n * It can be accessed by the `fontFamily` property of the TextStyle.\n *\n * Install a new BitmapFont will create the characters provided for the font and store them in the cache.\n * But don't worry, if a character is requested that hasn't been generated yet, it will be created on the fly.\n * @memberof text\n */\nexport interface BitmapFontInstallOptions\n{\n /** the name of the font, this will be the name you use in the fontFamily of text style to access this font */\n name?: string;\n /**\n * Characters included in the font set. You can also use ranges.\n * For example, `[['a', 'z'], ['A', 'Z'], \"!@#$%^&*()~{}[] \"]`.\n * Don't forget to include spaces ' ' in your character set!\n * @default BitmapFont.ALPHANUMERIC\n */\n chars?: string | (string | string[])[];\n /**\n * Render resolution for glyphs.\n * @default 1\n */\n resolution?: number;\n /**\n * Padding between glyphs on texture atlas. Lower values could mean more visual artifacts\n * and bleeding from other glyphs, larger values increase the space required on the texture.\n * @default 4\n */\n padding?: number;\n /**\n * Skip generation of kerning information for the BitmapFont.\n * If true, this could potentially increase the performance, but may impact the rendered text appearance.\n * @default false\n */\n skipKerning?: boolean;\n /** Style options to render with BitmapFont. */\n style?: TextStyle | TextStyleOptions;\n}\n\n/**\n * The BitmapFontManager is a helper that exists to install and uninstall fonts\n * into the cache for BitmapText objects.\n * @memberof text\n * @name BitmapFontManager\n * @example\n * import { BitmapFontManager, BitmapText } from 'pixi.js';\n *\n * BitmapFontManager.install({\n * name: 'TitleFont',\n * style: {}\n * });\n *\n * const title = new BitmapText({ text: 'This is the title', style: { fontFamily: 'TitleFont' }});\n */\nclass BitmapFontManagerClass\n{\n /**\n * This character set includes all the letters in the alphabet (both lower- and upper- case).\n * @type {string[][]}\n * @example\n * BitmapFont.from('ExampleFont', style, { chars: BitmapFont.ALPHA })\n */\n public readonly ALPHA = [['a', 'z'], ['A', 'Z'], ' '];\n\n /**\n * This character set includes all decimal digits (from 0 to 9).\n * @type {string[][]}\n * @example\n * BitmapFont.from('ExampleFont', style, { chars: BitmapFont.NUMERIC })\n */\n public readonly NUMERIC = [['0', '9']];\n\n /**\n * This character set is the union of `BitmapFont.ALPHA` and `BitmapFont.NUMERIC`.\n * @type {string[][]}\n */\n public readonly ALPHANUMERIC = [['a', 'z'], ['A', 'Z'], ['0', '9'], ' '];\n\n /**\n * This character set consists of all the ASCII table.\n * @member {string[][]}\n * @see http://www.asciitable.com/\n */\n public readonly ASCII = [[' ', '~']];\n\n /** Default options for installing a new BitmapFont. */\n public defaultOptions: Omit<BitmapFontInstallOptions, 'style'> = {\n chars: this.ALPHANUMERIC,\n resolution: 1,\n padding: 4,\n skipKerning: false,\n };\n\n /**\n * Get a font for the specified text and style.\n * @param text - The text to get the font for\n * @param style - The style to use\n */\n public getFont(text: string, style: TextStyle): BitmapFont\n {\n let fontFamilyKey = `${style.fontFamily as string}-bitmap`;\n let overrideFill = true;\n\n // assuming there is no texture we can use a tint!\n if (style._fill.fill && !style._stroke)\n {\n fontFamilyKey += style._fill.fill.styleKey;\n overrideFill = false;\n }\n else if (style._stroke || style.dropShadow)\n {\n // if there is a stoke, we need to use the style key as this the font generated cannot be tinted\n // due to the fact the font has at least two colors.\n let key = style.styleKey;\n\n // remove the font size..\n key = key.substring(0, key.lastIndexOf('-'));\n\n fontFamilyKey = `${key}-bitmap`;\n overrideFill = false;\n }\n\n // first get us the the right font...\n if (!Cache.has(fontFamilyKey))\n {\n const fnt = new DynamicBitmapFont({\n style,\n overrideFill,\n overrideSize: true,\n ...this.defaultOptions,\n });\n\n fontCount++;\n\n // warn users if they have created too many dynamic fonts\n if (fontCount > 50)\n {\n // eslint-disable-next-line max-len\n warn('BitmapText', `You have dynamically created ${fontCount} bitmap fonts, this can be inefficient. Try pre installing your font styles using \\`BitmapFont.install({name:\"style1\", style})\\``);\n }\n\n fnt.once('destroy', () =>\n {\n fontCount--;\n Cache.remove(fontFamilyKey);\n });\n\n Cache.set(\n fontFamilyKey as string,\n fnt\n );\n }\n\n const dynamicFont = Cache.get(fontFamilyKey);\n\n (dynamicFont as DynamicBitmapFont).ensureCharacters?.(text);\n\n return dynamicFont;\n }\n\n /**\n * Get the layout of a text for the specified style.\n * @param text - The text to get the layout for\n * @param style - The style to use\n * @param trimEnd - Whether to ignore whitespaces at the end of each line\n */\n public getLayout(text: string, style: TextStyle, trimEnd: boolean = true): BitmapTextLayoutData\n {\n const bitmapFont = this.getFont(text, style);\n\n return getBitmapTextLayout([...text], style, bitmapFont, trimEnd);\n }\n\n /**\n * Measure the text using the specified style.\n * @param text - The text to measure\n * @param style - The style to use\n * @param trimEnd - Whether to ignore whitespaces at the end of each line\n */\n public measureText(\n text: string,\n style: TextStyle,\n trimEnd: boolean = true\n ): { width: number; height: number; scale: number; offsetY: number }\n {\n return this.getLayout(text, style, trimEnd);\n }\n\n /**\n * Generates a bitmap-font for the given style and character set\n * @param options - Setup options for font generation.\n * @returns Font generated by style options.\n * @example\n * import { BitmapFontManager, BitmapText } from 'pixi.js';\n *\n * BitmapFontManager.install('TitleFont', {\n * fontFamily: 'Arial',\n * fontSize: 12,\n * strokeThickness: 2,\n * fill: 'purple',\n * });\n *\n * const title = new BitmapText({ text: 'This is the title', fontFamily: 'TitleFont' });\n */\n public install(options: BitmapFontInstallOptions): BitmapFont;\n /** @deprecated since 7.0.0 */\n public install(name: string, style?: TextStyle | TextStyleOptions, options?: BitmapFontInstallOptions): BitmapFont;\n // eslint-disable-next-line max-len\n public install(...args: [string | BitmapFontInstallOptions, (TextStyle | TextStyleOptions)?, BitmapFontInstallOptions?]): BitmapFont\n {\n let options = args[0] as BitmapFontInstallOptions;\n\n if (typeof options === 'string')\n {\n options = {\n name: options,\n style: args[1],\n chars: args[2]?.chars,\n resolution: args[2]?.resolution,\n padding: args[2]?.padding,\n skipKerning: args[2]?.skipKerning,\n } as BitmapFontInstallOptions;\n\n // #if _DEBUG\n // eslint-disable-next-line max-len\n deprecation(v8_0_0, 'BitmapFontManager.install(name, style, options) is deprecated, use BitmapFontManager.install({name, style, ...options})');\n // #endif\n }\n\n const name = options?.name;\n\n if (!name)\n {\n throw new Error('[BitmapFontManager] Property `name` is required.');\n }\n\n options = { ...this.defaultOptions, ...options };\n\n const textStyle = options.style;\n\n const style = textStyle instanceof TextStyle ? textStyle : new TextStyle(textStyle);\n const overrideFill = style._fill.fill !== null && style._fill.fill !== undefined;\n const font = new DynamicBitmapFont({\n style,\n overrideFill,\n skipKerning: options.skipKerning,\n padding: options.padding,\n resolution: options.resolution,\n overrideSize: false\n });\n\n const flatChars = resolveCharacters(options.chars);\n\n font.ensureCharacters(flatChars.join(''));\n\n Cache.set(`${name}-bitmap`, font);\n\n font.once('destroy', () => Cache.remove(`${name}-bitmap`));\n\n return font;\n }\n\n /**\n * Uninstalls a bitmap font from the cache.\n * @param {string} name - The name of the bitmap font to uninstall.\n */\n public uninstall(name: string)\n {\n const cacheKey = `${name}-bitmap`;\n const font = Cache.get<BitmapFont>(cacheKey);\n\n if (font)\n {\n Cache.remove(cacheKey);\n font.destroy();\n }\n }\n}\n\nexport const BitmapFontManager = new BitmapFontManagerClass();\n"],"names":[],"mappings":"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"}