UNPKG

pixi.js

Version:

PixiJS — The HTML5 Creation Engine =============

1 lines 36.2 kB
{"version":3,"file":"Color.mjs","sources":["../../src/color/Color.ts"],"sourcesContent":["import { colord, extend } from '@pixi/colord';\nimport namesPlugin from '@pixi/colord/plugins/names';\n\nimport type { AnyColor, HslaColor, HslColor, HsvaColor, HsvColor, RgbaColor, RgbColor } from '@pixi/colord';\n\nextend([namesPlugin]);\n\n/**\n * Pixi supports multiple color formats, including CSS color strings, hex, numbers, and arrays.\n *\n * When providing values for any of the color properties, you can use any of the {@link color.ColorSource} formats.\n * ```typescript\n * import { Color } from 'pixi.js';\n *\n * // All of these are valid:\n * sprite.tint = 'red';\n * sprite.tint = 0xff0000;\n * sprite.tint = '#ff0000';\n * sprite.tint = new Color('red');\n *\n * // Same for graphics fill/stroke colors and other color values:\n * graphics.fill({ color: 'red' });\n * graphics.fill({ color: 0xff0000 });\n * graphics.stroke({ color: '#ff0000' });\n * graphics.stroke({ color: new Color('red')};\n * ```\n * @namespace color\n */\n\n/**\n * RGBA color array.\n *\n * `[number, number, number, number]`\n * @memberof color\n */\nexport type RgbaArray = [number, number, number, number];\n\n/**\n * Valid formats to use when defining any color properties, also valid for the {@link color.Color} constructor.\n *\n * These types are extended from [colord](https://www.npmjs.com/package/colord) with some PixiJS-specific extensions.\n *\n * Possible value types are:\n * - [Color names](https://www.w3.org/TR/css-color-4/#named-colors):\n * `'red'`, `'green'`, `'blue'`, `'white'`, etc.\n * - RGB hex integers (`0xRRGGBB`):\n * `0xff0000`, `0x00ff00`, `0x0000ff`, etc.\n * - [RGB(A) hex strings](https://www.w3.org/TR/css-color-4/#hex-notation):\n * - 6 digits (`RRGGBB`): `'ff0000'`, `'#00ff00'`, `'0x0000ff'`, etc.\n * - 3 digits (`RGB`): `'f00'`, `'#0f0'`, `'0x00f'`, etc.\n * - 8 digits (`RRGGBBAA`): `'ff000080'`, `'#00ff0080'`, `'0x0000ff80'`, etc.\n * - 4 digits (`RGBA`): `'f008'`, `'#0f08'`, `'0x00f8'`, etc.\n * - RGB(A) objects:\n * `{ r: 255, g: 0, b: 0 }`, `{ r: 255, g: 0, b: 0, a: 0.5 }`, etc.\n * - [RGB(A) strings](https://www.w3.org/TR/css-color-4/#rgb-functions):\n * `'rgb(255, 0, 0)'`, `'rgb(100% 0% 0%)'`, `'rgba(255, 0, 0, 0.5)'`, `'rgba(100% 0% 0% / 50%)'`, etc.\n * - RGB(A) arrays:\n * `[1, 0, 0]`, `[1, 0, 0, 0.5]`, etc.\n * - RGB(A) Float32Array:\n * `new Float32Array([1, 0, 0])`, `new Float32Array([1, 0, 0, 0.5])`, etc.\n * - RGB(A) Uint8Array:\n * `new Uint8Array([255, 0, 0])`, `new Uint8Array([255, 0, 0, 128])`, etc.\n * - RGB(A) Uint8ClampedArray:\n * `new Uint8ClampedArray([255, 0, 0])`, `new Uint8ClampedArray([255, 0, 0, 128])`, etc.\n * - HSL(A) objects:\n * `{ h: 0, s: 100, l: 50 }`, `{ h: 0, s: 100, l: 50, a: 0.5 }`, etc.\n * - [HSL(A) strings](https://www.w3.org/TR/css-color-4/#the-hsl-notation):\n * `'hsl(0, 100%, 50%)'`, `'hsl(0deg 100% 50%)'`, `'hsla(0, 100%, 50%, 0.5)'`, `'hsla(0deg 100% 50% / 50%)'`, etc.\n * - HSV(A) objects:\n * `{ h: 0, s: 100, v: 100 }`, `{ h: 0, s: 100, v: 100, a: 0.5 }`, etc.\n * - {@link color.Color} objects.\n * @since 7.2.0\n * @memberof color\n */\nexport type ColorSource =\n | string\n | number\n | number[]\n | Float32Array\n | Uint8Array\n | Uint8ClampedArray\n | HslColor\n | HslaColor\n | HsvColor\n | HsvaColor\n | RgbColor\n | RgbaColor\n | Color\n // eslint-disable-next-line @typescript-eslint/ban-types\n | Number;\n\ntype ColorSourceTypedArray = Float32Array | Uint8Array | Uint8ClampedArray;\n\n/**\n * Color utility class. Can accept any {@link color.ColorSource} format in its constructor.\n * ```js\n * import { Color } from 'pixi.js';\n *\n * new Color('red').toArray(); // [1, 0, 0, 1]\n * new Color(0xff0000).toArray(); // [1, 0, 0, 1]\n * new Color('ff0000').toArray(); // [1, 0, 0, 1]\n * new Color('#f00').toArray(); // [1, 0, 0, 1]\n * new Color('0xff0000ff').toArray(); // [1, 0, 0, 1]\n * new Color('#f00f').toArray(); // [1, 0, 0, 1]\n * new Color({ r: 255, g: 0, b: 0, a: 0.5 }).toArray(); // [1, 0, 0, 0.5]\n * new Color('rgb(255, 0, 0, 0.5)').toArray(); // [1, 0, 0, 0.5]\n * new Color([1, 1, 1]).toArray(); // [1, 1, 1, 1]\n * new Color([1, 0, 0, 0.5]).toArray(); // [1, 0, 0, 0.5]\n * new Color(new Float32Array([1, 0, 0, 0.5])).toArray(); // [1, 0, 0, 0.5]\n * new Color(new Uint8Array([255, 0, 0, 255])).toArray(); // [1, 0, 0, 1]\n * new Color(new Uint8ClampedArray([255, 0, 0, 255])).toArray(); // [1, 0, 0, 1]\n * new Color({ h: 0, s: 100, l: 50, a: 0.5 }).toArray(); // [1, 0, 0, 0.5]\n * new Color('hsl(0, 100%, 50%, 50%)').toArray(); // [1, 0, 0, 0.5]\n * new Color({ h: 0, s: 100, v: 100, a: 0.5 }).toArray(); // [1, 0, 0, 0.5]\n * ```\n * @since 7.2.0\n * @memberof color\n */\nexport class Color\n{\n /**\n * Default Color object for static uses\n * @example\n * import { Color } from 'pixi.js';\n * Color.shared.setValue(0xffffff).toHex(); // '#ffffff'\n */\n public static readonly shared = new Color();\n\n /**\n * Temporary Color object for static uses internally.\n * As to not conflict with Color.shared.\n * @ignore\n */\n private static readonly _temp = new Color();\n\n /** Pattern for hex strings */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private static readonly HEX_PATTERN = /^(#|0x)?(([a-f0-9]{3}){1,2}([a-f0-9]{2})?)$/i;\n\n /** Internal color source, from constructor or set value */\n private _value: Exclude<ColorSource, Color> | null;\n\n /** Normalized rgba component, floats from 0-1 */\n private _components: Float32Array;\n\n /** Cache color as number */\n private _int: number;\n\n /** An array of the current Color. Only populated when `toArray` functions are called */\n private _arrayRgba: number[] | null;\n private _arrayRgb: number[] | null;\n\n /**\n * @param {ColorSource} value - Optional value to use, if not provided, white is used.\n */\n constructor(value: ColorSource = 0xffffff)\n {\n this._value = null;\n this._components = new Float32Array(4);\n this._components.fill(1);\n this._int = 0xffffff;\n this.value = value;\n }\n\n /** Get red component (0 - 1) */\n get red(): number\n {\n return this._components[0];\n }\n\n /** Get green component (0 - 1) */\n get green(): number\n {\n return this._components[1];\n }\n\n /** Get blue component (0 - 1) */\n get blue(): number\n {\n return this._components[2];\n }\n\n /** Get alpha component (0 - 1) */\n get alpha(): number\n {\n return this._components[3];\n }\n\n /**\n * Set the value, suitable for chaining\n * @param value\n * @see Color.value\n */\n public setValue(value: ColorSource): this\n {\n this.value = value;\n\n return this;\n }\n\n /**\n * The current color source.\n *\n * When setting:\n * - Setting to an instance of `Color` will copy its color source and components.\n * - Otherwise, `Color` will try to normalize the color source and set the components.\n * If the color source is invalid, an `Error` will be thrown and the `Color` will left unchanged.\n *\n * Note: The `null` in the setter's parameter type is added to match the TypeScript rule: return type of getter\n * must be assignable to its setter's parameter type. Setting `value` to `null` will throw an `Error`.\n *\n * When getting:\n * - A return value of `null` means the previous value was overridden (e.g., {@link Color.multiply multiply},\n * {@link Color.premultiply premultiply} or {@link Color.round round}).\n * - Otherwise, the color source used when setting is returned.\n */\n set value(value: ColorSource | null)\n {\n // Support copying from other Color objects\n if (value instanceof Color)\n {\n this._value = this._cloneSource(value._value);\n this._int = value._int;\n this._components.set(value._components);\n }\n else if (value === null)\n {\n throw new Error('Cannot set Color#value to null');\n }\n else if (this._value === null || !this._isSourceEqual(this._value, value))\n {\n this._normalize(value);\n this._value = this._cloneSource(value);\n }\n }\n get value(): Exclude<ColorSource, Color> | null\n {\n return this._value;\n }\n\n /**\n * Copy a color source internally.\n * @param value - Color source\n */\n private _cloneSource(value: Exclude<ColorSource, Color> | null): Exclude<ColorSource, Color> | null\n {\n if (typeof value === 'string' || typeof value === 'number' || value instanceof Number || value === null)\n {\n return value;\n }\n else if (Array.isArray(value) || ArrayBuffer.isView(value))\n {\n return value.slice(0);\n }\n else if (typeof value === 'object' && value !== null)\n {\n return { ...value };\n }\n\n return value;\n }\n\n /**\n * Equality check for color sources.\n * @param value1 - First color source\n * @param value2 - Second color source\n * @returns `true` if the color sources are equal, `false` otherwise.\n */\n private _isSourceEqual(value1: Exclude<ColorSource, Color>, value2: Exclude<ColorSource, Color>): boolean\n {\n const type1 = typeof value1;\n const type2 = typeof value2;\n\n // Mismatched types\n if (type1 !== type2)\n {\n return false;\n }\n // Handle numbers/strings and things that extend Number\n // important to do the instanceof Number first, as this is \"object\" type\n else if (type1 === 'number' || type1 === 'string' || value1 instanceof Number)\n {\n return value1 === value2;\n }\n // Handle Arrays and TypedArrays\n else if (\n (Array.isArray(value1) && Array.isArray(value2))\n || (ArrayBuffer.isView(value1) && ArrayBuffer.isView(value2))\n )\n {\n if (value1.length !== value2.length)\n {\n return false;\n }\n\n return value1.every((v, i) => v === value2[i]);\n }\n // Handle Objects\n else if (value1 !== null && value2 !== null)\n {\n const keys1 = Object.keys(value1) as (keyof typeof value1)[];\n const keys2 = Object.keys(value2) as (keyof typeof value2)[];\n\n if (keys1.length !== keys2.length)\n {\n return false;\n }\n\n return keys1.every((key) => value1[key] === value2[key]);\n }\n\n return value1 === value2;\n }\n\n /**\n * Convert to a RGBA color object.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toRgb(); // returns { r: 1, g: 1, b: 1, a: 1 }\n */\n public toRgba(): RgbaColor\n {\n const [r, g, b, a] = this._components;\n\n return { r, g, b, a };\n }\n\n /**\n * Convert to a RGB color object.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toRgb(); // returns { r: 1, g: 1, b: 1 }\n */\n public toRgb(): RgbColor\n {\n const [r, g, b] = this._components;\n\n return { r, g, b };\n }\n\n /** Convert to a CSS-style rgba string: `rgba(255,255,255,1.0)`. */\n public toRgbaString(): string\n {\n const [r, g, b] = this.toUint8RgbArray();\n\n return `rgba(${r},${g},${b},${this.alpha})`;\n }\n\n /**\n * Convert to an [R, G, B] array of clamped uint8 values (0 to 255).\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toUint8RgbArray(); // returns [255, 255, 255]\n * @param {number[]|Uint8Array|Uint8ClampedArray} [out] - Output array\n */\n public toUint8RgbArray(): number[];\n public toUint8RgbArray<T extends number[] | Uint8Array | Uint8ClampedArray>(out: T): T;\n public toUint8RgbArray<T extends number[] | Uint8Array | Uint8ClampedArray>(out?: T): T\n {\n const [r, g, b] = this._components;\n\n if (!this._arrayRgb)\n {\n this._arrayRgb = [];\n }\n\n out = out || this._arrayRgb as T;\n\n out[0] = Math.round(r * 255);\n out[1] = Math.round(g * 255);\n out[2] = Math.round(b * 255);\n\n return out;\n }\n\n /**\n * Convert to an [R, G, B, A] array of normalized floats (numbers from 0.0 to 1.0).\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toArray(); // returns [1, 1, 1, 1]\n * @param {number[]|Float32Array} [out] - Output array\n */\n public toArray(): number[];\n public toArray<T extends number[] | Float32Array>(out: T): T;\n public toArray<T extends number[] | Float32Array>(out?: T): T\n {\n if (!this._arrayRgba)\n {\n this._arrayRgba = [];\n }\n\n out = out || this._arrayRgba as T;\n const [r, g, b, a] = this._components;\n\n out[0] = r;\n out[1] = g;\n out[2] = b;\n out[3] = a;\n\n return out;\n }\n\n /**\n * Convert to an [R, G, B] array of normalized floats (numbers from 0.0 to 1.0).\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toRgbArray(); // returns [1, 1, 1]\n * @param {number[]|Float32Array} [out] - Output array\n */\n public toRgbArray(): number[];\n public toRgbArray<T extends number[] | Float32Array>(out: T): T;\n public toRgbArray<T extends number[] | Float32Array>(out?: T): T\n {\n if (!this._arrayRgb)\n {\n this._arrayRgb = [];\n }\n\n out = out || this._arrayRgb as T;\n const [r, g, b] = this._components;\n\n out[0] = r;\n out[1] = g;\n out[2] = b;\n\n return out;\n }\n\n /**\n * Convert to a hexadecimal number.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toNumber(); // returns 16777215\n */\n public toNumber(): number\n {\n return this._int;\n }\n\n /**\n * Convert to a BGR number\n * @example\n * import { Color } from 'pixi.js';\n * new Color(0xffcc99).toBgrNumber(); // returns 0x99ccff\n */\n public toBgrNumber(): number\n {\n const [r, g, b] = this.toUint8RgbArray();\n\n return (b << 16) + (g << 8) + r;\n }\n\n /**\n * Convert to a hexadecimal number in little endian format (e.g., BBGGRR).\n * @example\n * import { Color } from 'pixi.js';\n * new Color(0xffcc99).toLittleEndianNumber(); // returns 0x99ccff\n * @returns {number} - The color as a number in little endian format.\n */\n public toLittleEndianNumber(): number\n {\n const value = this._int;\n\n return (value >> 16) + (value & 0xff00) + ((value & 0xff) << 16);\n }\n\n /**\n * Multiply with another color. This action is destructive, and will\n * override the previous `value` property to be `null`.\n * @param {ColorSource} value - The color to multiply by.\n */\n public multiply(value: ColorSource): this\n {\n const [r, g, b, a] = Color._temp.setValue(value)._components;\n\n this._components[0] *= r;\n this._components[1] *= g;\n this._components[2] *= b;\n this._components[3] *= a;\n\n this._refreshInt();\n this._value = null;\n\n return this;\n }\n\n /**\n * Converts color to a premultiplied alpha format. This action is destructive, and will\n * override the previous `value` property to be `null`.\n * @param alpha - The alpha to multiply by.\n * @param {boolean} [applyToRGB=true] - Whether to premultiply RGB channels.\n * @returns {Color} - Itself.\n */\n public premultiply(alpha: number, applyToRGB = true): this\n {\n if (applyToRGB)\n {\n this._components[0] *= alpha;\n this._components[1] *= alpha;\n this._components[2] *= alpha;\n }\n this._components[3] = alpha;\n\n this._refreshInt();\n this._value = null;\n\n return this;\n }\n\n /**\n * Premultiplies alpha with current color.\n * @param {number} alpha - The alpha to multiply by.\n * @param {boolean} [applyToRGB=true] - Whether to premultiply RGB channels.\n * @returns {number} tint multiplied by alpha\n */\n public toPremultiplied(alpha: number, applyToRGB = true): number\n {\n if (alpha === 1.0)\n {\n return (0xff << 24) + this._int;\n }\n if (alpha === 0.0)\n {\n return applyToRGB ? 0 : this._int;\n }\n let r = (this._int >> 16) & 0xff;\n let g = (this._int >> 8) & 0xff;\n let b = this._int & 0xff;\n\n if (applyToRGB)\n {\n r = ((r * alpha) + 0.5) | 0;\n g = ((g * alpha) + 0.5) | 0;\n b = ((b * alpha) + 0.5) | 0;\n }\n\n return ((alpha * 255) << 24) + (r << 16) + (g << 8) + b;\n }\n\n /**\n * Convert to a hexadecimal string.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toHex(); // returns \"#ffffff\"\n */\n public toHex(): string\n {\n const hexString = this._int.toString(16);\n\n return `#${'000000'.substring(0, 6 - hexString.length) + hexString}`;\n }\n\n /**\n * Convert to a hexadecimal string with alpha.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toHexa(); // returns \"#ffffffff\"\n */\n public toHexa(): string\n {\n const alphaValue = Math.round(this._components[3] * 255);\n const alphaString = alphaValue.toString(16);\n\n return this.toHex() + '00'.substring(0, 2 - alphaString.length) + alphaString;\n }\n\n /**\n * Set alpha, suitable for chaining.\n * @param alpha\n */\n public setAlpha(alpha: number): this\n {\n this._components[3] = this._clamp(alpha);\n\n return this;\n }\n\n /**\n * Normalize the input value into rgba\n * @param value - Input value\n */\n private _normalize(value: Exclude<ColorSource, Color>): void\n {\n let r: number | undefined;\n let g: number | undefined;\n let b: number | undefined;\n let a: number | undefined;\n\n // Number is a primitive so typeof works fine, but in the case\n // that someone creates a class that extends Number, we also\n // need to check for instanceof Number\n if (\n (typeof value === 'number' || value instanceof Number)\n && (value as number) >= 0\n && (value as number) <= 0xffffff\n )\n {\n const int = value as number; // cast required because instanceof Number is ambiguous for TS\n\n r = ((int >> 16) & 0xff) / 255;\n g = ((int >> 8) & 0xff) / 255;\n b = (int & 0xff) / 255;\n a = 1.0;\n }\n else if (\n (Array.isArray(value) || value instanceof Float32Array)\n // Can be rgb or rgba\n && value.length >= 3\n && value.length <= 4\n )\n {\n // make sure all values are 0 - 1\n value = this._clamp(value);\n [r, g, b, a = 1.0] = value;\n }\n else if (\n (value instanceof Uint8Array || value instanceof Uint8ClampedArray)\n // Can be rgb or rgba\n && value.length >= 3\n && value.length <= 4\n )\n {\n // make sure all values are 0 - 255\n value = this._clamp(value, 0, 255);\n [r, g, b, a = 255] = value;\n r /= 255;\n g /= 255;\n b /= 255;\n a /= 255;\n }\n else if (typeof value === 'string' || typeof value === 'object')\n {\n if (typeof value === 'string')\n {\n const match = Color.HEX_PATTERN.exec(value);\n\n if (match)\n {\n // Normalize hex string, remove 0x or # prefix\n value = `#${match[2]}`;\n }\n }\n\n const color = colord(value as AnyColor);\n\n if (color.isValid())\n {\n ({ r, g, b, a } = color.rgba);\n r /= 255;\n g /= 255;\n b /= 255;\n }\n }\n\n // Cache normalized values for rgba and hex integer\n if (r !== undefined)\n {\n this._components[0] = r as number;\n this._components[1] = g as number;\n this._components[2] = b as number;\n this._components[3] = a as number;\n this._refreshInt();\n }\n else\n {\n throw new Error(`Unable to convert color ${value}`);\n }\n }\n\n /** Refresh the internal color rgb number */\n private _refreshInt(): void\n {\n // Clamp values to 0 - 1\n this._clamp(this._components);\n\n const [r, g, b] = this._components;\n\n this._int = ((r * 255) << 16) + ((g * 255) << 8) + ((b * 255) | 0);\n }\n\n /**\n * Clamps values to a range. Will override original values\n * @param value - Value(s) to clamp\n * @param min - Minimum value\n * @param max - Maximum value\n */\n private _clamp<T extends number | number[] | ColorSourceTypedArray>(value: T, min = 0, max = 1): T\n {\n if (typeof value === 'number')\n {\n return Math.min(Math.max(value, min), max) as T;\n }\n\n value.forEach((v, i) =>\n {\n value[i] = Math.min(Math.max(v, min), max);\n });\n\n return value;\n }\n\n /**\n * Check if the value is a color-like object\n * @param value - Value to check\n * @returns True if the value is a color-like object\n * @static\n * @example\n * import { Color } from 'pixi.js';\n * Color.isColorLike('white'); // returns true\n * Color.isColorLike(0xffffff); // returns true\n * Color.isColorLike([1, 1, 1]); // returns true\n */\n public static isColorLike(value: unknown): value is ColorSource\n {\n return (\n typeof value === 'number'\n || typeof value === 'string'\n || value instanceof Number\n || value instanceof Color\n || Array.isArray(value)\n || value instanceof Uint8Array\n || value instanceof Uint8ClampedArray\n || value instanceof Float32Array\n || ((value as RgbColor).r !== undefined\n && (value as RgbColor).g !== undefined\n && (value as RgbColor).b !== undefined)\n || ((value as RgbaColor).r !== undefined\n && (value as RgbaColor).g !== undefined\n && (value as RgbaColor).b !== undefined\n && (value as RgbaColor).a !== undefined)\n || ((value as HslColor).h !== undefined\n && (value as HslColor).s !== undefined\n && (value as HslColor).l !== undefined)\n || ((value as HslaColor).h !== undefined\n && (value as HslaColor).s !== undefined\n && (value as HslaColor).l !== undefined\n && (value as HslaColor).a !== undefined)\n || ((value as HsvColor).h !== undefined\n && (value as HsvColor).s !== undefined\n && (value as HsvColor).v !== undefined)\n || ((value as HsvaColor).h !== undefined\n && (value as HsvaColor).s !== undefined\n && (value as HsvaColor).v !== undefined\n && (value as HsvaColor).a !== undefined)\n );\n }\n}\n"],"names":[],"mappings":"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"}