///
import { Container } from '@pixi/display';
import type { Dict } from '@pixi/utils';
import type { ExtensionMetadata } from '@pixi/core';
import type { IDestroyOptions } from '@pixi/display';
import type { ITextStyle } from '@pixi/text';
import type { Loader } from '@pixi/loaders';
import { LoaderResource } from '@pixi/loaders';
import { Mesh } from '@pixi/mesh';
import { ObservablePoint } from '@pixi/math';
import type { Rectangle } from '@pixi/math';
import type { Renderer } from '@pixi/core';
import { TextStyle } from '@pixi/text';
import type { TextStyleAlign } from '@pixi/text';
import { Texture } from '@pixi/core';
/**
* Auto-detect BitmapFont parsing format based on data.
* @private
* @param {any} data - Data to detect format
* @returns {any} Format or null
*/
export declare function autoDetectFormat(data: unknown): typeof formats[number] | null;
/**
* BitmapFont represents a typeface available for use with the BitmapText class. Use the `install`
* method for adding a font to be used.
* @memberof PIXI
*/
export declare class BitmapFont {
/**
* This character set includes all the letters in the alphabet (both lower- and upper- case).
* @type {string[][]}
* @example
* BitmapFont.from("ExampleFont", style, { chars: BitmapFont.ALPHA })
*/
static readonly ALPHA: (string | string[])[];
/**
* This character set includes all decimal digits (from 0 to 9).
* @type {string[][]}
* @example
* BitmapFont.from("ExampleFont", style, { chars: BitmapFont.NUMERIC })
*/
static readonly NUMERIC: string[][];
/**
* This character set is the union of `BitmapFont.ALPHA` and `BitmapFont.NUMERIC`.
* @type {string[][]}
*/
static readonly ALPHANUMERIC: (string | string[])[];
/**
* This character set consists of all the ASCII table.
* @member {string[][]}
* @see http://www.asciitable.com/
*/
static readonly ASCII: string[][];
/**
* Collection of default options when using `BitmapFont.from`.
* @property {number} [resolution=1] -
* @property {number} [textureWidth=512] -
* @property {number} [textureHeight=512] -
* @property {number} [padding=4] -
* @property {string|string[]|string[][]} chars = PIXI.BitmapFont.ALPHANUMERIC
*/
static readonly defaultOptions: IBitmapFontOptions;
/** Collection of available/installed fonts. */
static readonly available: Dict;
/** The name of the font face. */
readonly font: string;
/** The size of the font face in pixels. */
readonly size: number;
/** The line-height of the font face in pixels. */
readonly lineHeight: number;
/** The map of characters by character code. */
readonly chars: Dict;
/** The map of base page textures (i.e., sheets of glyphs). */
readonly pageTextures: Dict;
/** The range of the distance field in pixels. */
readonly distanceFieldRange: number;
/** The kind of distance field for this font or "none". */
readonly distanceFieldType: string;
private _ownsTextures;
/**
* @param data
* @param textures
* @param ownsTextures - Setting to `true` will destroy page textures
* when the font is uninstalled.
*/
constructor(data: BitmapFontData, textures: Texture[] | Dict, ownsTextures?: boolean);
/** Remove references to created glyph textures. */
destroy(): void;
/**
* Register a new bitmap font.
* @param data - The
* characters map that could be provided as xml or raw string.
* @param textures - List of textures for each page.
* @param ownsTextures - Set to `true` to destroy page textures
* when the font is uninstalled. By default fonts created with
* `BitmapFont.from` or from the `BitmapFontLoader` are `true`.
* @returns {PIXI.BitmapFont} Result font object with font, size, lineHeight
* and char fields.
*/
static install(data: string | XMLDocument | BitmapFontData, textures: Texture | Texture[] | Dict, ownsTextures?: boolean): BitmapFont;
/**
* Remove bitmap font by name.
* @param name - Name of the font to uninstall.
*/
static uninstall(name: string): void;
/**
* Generates a bitmap-font for the given style and character set. This does not support
* kernings yet. With `style` properties, only the following non-layout properties are used:
*
* - {@link PIXI.TextStyle#dropShadow|dropShadow}
* - {@link PIXI.TextStyle#dropShadowDistance|dropShadowDistance}
* - {@link PIXI.TextStyle#dropShadowColor|dropShadowColor}
* - {@link PIXI.TextStyle#dropShadowBlur|dropShadowBlur}
* - {@link PIXI.TextStyle#dropShadowAngle|dropShadowAngle}
* - {@link PIXI.TextStyle#fill|fill}
* - {@link PIXI.TextStyle#fillGradientStops|fillGradientStops}
* - {@link PIXI.TextStyle#fillGradientType|fillGradientType}
* - {@link PIXI.TextStyle#fontFamily|fontFamily}
* - {@link PIXI.TextStyle#fontSize|fontSize}
* - {@link PIXI.TextStyle#fontVariant|fontVariant}
* - {@link PIXI.TextStyle#fontWeight|fontWeight}
* - {@link PIXI.TextStyle#lineJoin|lineJoin}
* - {@link PIXI.TextStyle#miterLimit|miterLimit}
* - {@link PIXI.TextStyle#stroke|stroke}
* - {@link PIXI.TextStyle#strokeThickness|strokeThickness}
* - {@link PIXI.TextStyle#textBaseline|textBaseline}
* @param name - The name of the custom font to use with BitmapText.
* @param textStyle - Style options to render with BitmapFont.
* @param options - Setup options for font or name of the font.
* @param {string|string[]|string[][]} [options.chars=PIXI.BitmapFont.ALPHANUMERIC] - characters included
* in the font set. You can also use ranges. For example, `[['a', 'z'], ['A', 'Z'], "!@#$%^&*()~{}[] "]`.
* Don't forget to include spaces ' ' in your character set!
* @param {number} [options.resolution=1] - Render resolution for glyphs.
* @param {number} [options.textureWidth=512] - Optional width of atlas, smaller values to reduce memory.
* @param {number} [options.textureHeight=512] - Optional height of atlas, smaller values to reduce memory.
* @param {number} [options.padding=4] - Padding between glyphs on texture atlas.
* @returns Font generated by style options.
* @example
* PIXI.BitmapFont.from("TitleFont", {
* fontFamily: "Arial",
* fontSize: 12,
* strokeThickness: 2,
* fill: "purple"
* });
*
* const title = new PIXI.BitmapText("This is the title", { fontName: "TitleFont" });
*/
static from(name: string, textStyle?: TextStyle | Partial, options?: IBitmapFontOptions): BitmapFont;
}
/**
* Normalized parsed data from .fnt files.
* @memberof PIXI
*/
export declare class BitmapFontData {
/** @readonly */
info: IBitmapFontDataInfo[];
/** @readonly */
common: IBitmapFontDataCommon[];
/** @readonly */
page: IBitmapFontDataPage[];
/** @readonly */
char: IBitmapFontDataChar[];
/** @readonly */
kerning: IBitmapFontDataKerning[];
/** @readonly */
distanceField: IBitmapFontDataDistanceField[];
constructor();
}
/**
* {@link PIXI.Loader Loader} middleware for loading
* bitmap-based fonts suitable for using with {@link PIXI.BitmapText}.
* @memberof PIXI
*/
export declare class BitmapFontLoader {
/** @ignore */
static extension: ExtensionMetadata;
/**
* Called when the plugin is installed.
* @see PIXI.extensions.add
*/
static add(): void;
/**
* Called after a resource is loaded.
* @see PIXI.Loader.loaderMiddleware
* @param this
* @param {PIXI.LoaderResource} resource
* @param {Function} next
*/
static use(this: Loader, resource: LoaderResource, next: (...args: any[]) => void): void;
/**
* Get folder path from a resource.
* @param loader
* @param resource
*/
private static getBaseUrl;
/**
* Replacement for NodeJS's path.dirname
* @param {string} url - Path to get directory for
*/
private static dirname;
}
/**
* A BitmapText object will create a line or multiple lines of text using bitmap font.
*
* The primary advantage of this class over Text is that all of your textures are pre-generated and loading,
* meaning that rendering is fast, and changing text has no performance implications.
*
* Supporting character sets other than latin, such as CJK languages, may be impractical due to the number of characters.
*
* To split a line you can use '\n', '\r' or '\r\n' in your string.
*
* PixiJS can auto-generate fonts on-the-fly using BitmapFont or use fnt files provided by:
* http://www.angelcode.com/products/bmfont/ for Windows or
* http://www.bmglyph.com/ for Mac.
*
* You can also use SDF, MSDF and MTSDF BitmapFonts for vector-like scaling appearance provided by:
* https://github.com/soimy/msdf-bmfont-xml for SDF and MSDF fnt files or
* https://github.com/Chlumsky/msdf-atlas-gen for SDF, MSDF and MTSDF json files
*
* A BitmapText can only be created when the font is loaded.
*
* ```js
* // in this case the font is in a file called 'desyrel.fnt'
* let bitmapText = new PIXI.BitmapText("text using a fancy font!", {
* fontName: "Desyrel",
* fontSize: 35,
* align: "right"
* });
* ```
* @memberof PIXI
*/
export declare class BitmapText extends Container {
static styleDefaults: Partial;
/** Set to `true` if the BitmapText needs to be redrawn. */
dirty: boolean;
/**
* The resolution / device pixel ratio of the canvas.
*
* This is set to automatically match the renderer resolution by default, but can be overridden by setting manually.
* @default PIXI.settings.RESOLUTION
*/
_resolution: number;
_autoResolution: boolean;
/**
* Private tracker for the width of the overall text.
* @private
*/
protected _textWidth: number;
/**
* Private tracker for the height of the overall text.
* @private
*/
protected _textHeight: number;
/**
* Private tracker for the current text.
* @private
*/
protected _text: string;
/**
* The max width of this bitmap text in pixels. If the text provided is longer than the
* value provided, line breaks will be automatically inserted in the last whitespace.
* Disable by setting value to 0
* @private
*/
protected _maxWidth: number;
/**
* The max line height. This is useful when trying to use the total height of the Text,
* ie: when trying to vertically align. (Internally used)
* @private
*/
protected _maxLineHeight: number;
/**
* Letter spacing. This is useful for setting the space between characters.
* @private
*/
protected _letterSpacing: number;
/**
* Text anchor.
* @readonly
* @private
*/
protected _anchor: ObservablePoint;
/**
* Private tracker for the current font.
* @private
*/
protected _font?: BitmapFont;
/**
* Private tracker for the current font name.
* @private
*/
protected _fontName: string;
/**
* Private tracker for the current font size.
* @private
*/
protected _fontSize?: number;
/**
* Private tracker for the current text align.
* @type {string}
* @private
*/
protected _align: TextStyleAlign;
/** Collection of page mesh data. */
protected _activePagesMeshData: PageMeshData[];
/**
* Private tracker for the current tint.
* @private
*/
protected _tint: number;
/**
* If true PixiJS will Math.floor() x/y values when rendering.
* @default PIXI.settings.ROUND_PIXELS
*/
protected _roundPixels: boolean;
/** Cached char texture is destroyed when BitmapText is destroyed. */
private _textureCache;
/**
* @param text - A string that you would like the text to display.
* @param style - The style parameters.
* @param {string} style.fontName - The installed BitmapFont name.
* @param {number} [style.fontSize] - The size of the font in pixels, e.g. 24. If undefined,
*. this will default to the BitmapFont size.
* @param {string} [style.align='left'] - Alignment for multiline text ('left', 'center', 'right' or 'justify'),
* does not affect single line text.
* @param {number} [style.tint=0xFFFFFF] - The tint color.
* @param {number} [style.letterSpacing=0] - The amount of spacing between letters.
* @param {number} [style.maxWidth=0] - The max width of the text before line wrapping.
*/
constructor(text: string, style?: Partial);
/** Renders text and updates it when needed. This should only be called if the BitmapFont is regenerated. */
updateText(): void;
updateTransform(): void;
_render(renderer: Renderer): void;
/**
* Validates text before calling parent's getLocalBounds
* @returns - The rectangular bounding area
*/
getLocalBounds(): Rectangle;
/**
* Updates text when needed
* @private
*/
protected validate(): void;
/**
* The tint of the BitmapText object.
* @default 0xffffff
*/
get tint(): number;
set tint(value: number);
/**
* The alignment of the BitmapText object.
* @member {string}
* @default 'left'
*/
get align(): TextStyleAlign;
set align(value: TextStyleAlign);
/** The name of the BitmapFont. */
get fontName(): string;
set fontName(value: string);
/** The size of the font to display. */
get fontSize(): number;
set fontSize(value: number | undefined);
/**
* The anchor sets the origin point of the text.
*
* The default is `(0,0)`, this means the text's origin is the top left.
*
* Setting the anchor to `(0.5,0.5)` means the text's origin is centered.
*
* Setting the anchor to `(1,1)` would mean the text's origin point will be the bottom right corner.
*/
get anchor(): ObservablePoint;
set anchor(value: ObservablePoint);
/** The text of the BitmapText object. */
get text(): string;
set text(text: string);
/**
* The max width of this bitmap text in pixels. If the text provided is longer than the
* value provided, line breaks will be automatically inserted in the last whitespace.
* Disable by setting the value to 0.
*/
get maxWidth(): number;
set maxWidth(value: number);
/**
* The max line height. This is useful when trying to use the total height of the Text,
* i.e. when trying to vertically align.
* @readonly
*/
get maxLineHeight(): number;
/**
* The width of the overall text, different from fontSize,
* which is defined in the style object.
* @readonly
*/
get textWidth(): number;
/** Additional space between characters. */
get letterSpacing(): number;
set letterSpacing(value: number);
/**
* If true PixiJS will Math.floor() x/y values when rendering, stopping pixel interpolation.
* Advantages can include sharper image quality (like text) and faster rendering on canvas.
* The main disadvantage is movement of objects may appear less smooth.
* To set the global default, change {@link PIXI.settings.ROUND_PIXELS}
* @default PIXI.settings.ROUND_PIXELS
*/
get roundPixels(): boolean;
set roundPixels(value: boolean);
/**
* The height of the overall text, different from fontSize,
* which is defined in the style object.
* @readonly
*/
get textHeight(): number;
/**
* The resolution / device pixel ratio of the canvas.
*
* This is set to automatically match the renderer resolution by default, but can be overridden by setting manually.
* @default 1
*/
get resolution(): number;
set resolution(value: number);
destroy(options?: boolean | IDestroyOptions): void;
}
declare const formats: readonly [typeof TextFormat, typeof XMLFormat, typeof XMLStringFormat];
export declare interface IBitmapFontCharacter {
xOffset: number;
yOffset: number;
xAdvance: number;
texture: Texture;
page: number;
kerning: Dict;
}
/** @memberof PIXI */
export declare interface IBitmapFontDataChar {
/** Unique id of character */
id: number;
/** {@link PIXI.IBitmapFontDataPage} id */
page: number;
/** x-position of character in page. */
x: number;
/** y-position of character in page. */
y: number;
/** Width of character in page. */
width: number;
/** Height of character in page. */
height: number;
/** x-offset to apply when rendering character */
xoffset: number;
/** y-offset to apply when rendering character. */
yoffset: number;
/** Advancement to apply to next character. */
xadvance: number;
}
/** @memberof PIXI */
export declare interface IBitmapFontDataCommon {
/** Line height, in pixels. */
lineHeight: number;
}
/** @memberof PIXI */
export declare interface IBitmapFontDataDistanceField {
/** Type of distance field */
fieldType: string;
/** Range of distance */
distanceRange: number;
}
/** @memberof PIXI */
export declare interface IBitmapFontDataInfo {
/** Font face */
face: string;
/** Font size */
size: number;
}
/** @memberof PIXI */
export declare interface IBitmapFontDataKerning {
/** First character of pair */
first: number;
/** Second character of pair */
second: number;
/** x-offset to apply between first & second characters when they are next to each other. */
amount: number;
}
/** @memberof PIXI */
export declare interface IBitmapFontDataPage {
/** Unique id for bitmap texture */
id: number;
/** File name */
file: string;
}
/** @memberof PIXI */
export declare interface IBitmapFontOptions {
/**
* The character set to generate.
* @default PIXI.BitmapFont.ALPHANUMERIC
*/
chars?: string | (string | string[])[];
/**
* The resolution for rendering.
* @default 1
*/
resolution?: number;
/**
* The padding between glyphs in the atlas.
* @default 4
*/
padding?: number;
/**
* The width of the texture atlas.
* @default 512
*/
textureWidth?: number;
/**
* The height of the texture atlas.
* @default 512
*/
textureHeight?: number;
/**
* Skip generation of kerning information for the BitmapFont.
* If true, this could potentially increase the performance, but may impact the rendered text appearance.
* @default false
*/
skipKerning?: boolean;
}
/**
* Internal data format used to convert to BitmapFontData.
* @private
*/
export declare interface IBitmapFontRawData {
info: {
face: string;
size: string;
}[];
common: {
lineHeight: string;
}[];
page: {
id: string;
file: string;
}[];
chars: {
count: number;
}[];
char: {
id: string;
page: string;
x: string;
y: string;
width: string;
height: string;
xoffset: string;
yoffset: string;
xadvance: string;
}[];
kernings?: {
count: number;
}[];
kerning?: {
first: string;
second: string;
amount: string;
}[];
distanceField?: {
fieldType: string;
distanceRange: string;
}[];
}
export declare interface IBitmapTextFontDescriptor {
name: string;
size: number;
}
export declare interface IBitmapTextStyle {
fontName: string;
fontSize: number;
tint: number;
align: TextStyleAlign;
letterSpacing: number;
maxWidth: number;
}
declare interface PageMeshData {
index: number;
indexCount: number;
vertexCount: number;
uvsCount: number;
total: number;
mesh: Mesh;
vertices?: Float32Array;
uvs?: Float32Array;
indices?: Uint16Array;
}
/**
* BitmapFont format that's Text-based.
* @private
*/
export declare class TextFormat {
/**
* Check if resource refers to txt font data.
* @param data
* @returns - True if resource could be treated as font data, false otherwise.
*/
static test(data: unknown): boolean;
/**
* Convert text font data to a javascript object.
* @param txt - Raw string data to be converted
* @returns - Parsed font data
*/
static parse(txt: string): BitmapFontData;
}
/**
* BitmapFont format that's XML-based.
* @private
*/
export declare class XMLFormat {
/**
* Check if resource refers to xml font data.
* @param data
* @returns - True if resource could be treated as font data, false otherwise.
*/
static test(data: unknown): boolean;
/**
* Convert the XML into BitmapFontData that we can use.
* @param xml
* @returns - Data to use for BitmapFont
*/
static parse(xml: XMLDocument): BitmapFontData;
}
/**
* BitmapFont format that's XML-based.
* @private
*/
export declare class XMLStringFormat {
/**
* Check if resource refers to text xml font data.
* @param data
* @returns - True if resource could be treated as font data, false otherwise.
*/
static test(data: unknown): boolean;
/**
* Convert the text XML into BitmapFontData that we can use.
* @param xmlTxt
* @returns - Data to use for BitmapFont
*/
static parse(xmlTxt: string): BitmapFontData;
}
export { }