{"version":3,"file":"convertFillInputToFillStyle.mjs","sources":["../../../../../src/scene/graphics/shared/utils/convertFillInputToFillStyle.ts"],"sourcesContent":["import { Color } from '../../../../color/Color';\nimport { Texture } from '../../../../rendering/renderers/shared/texture/Texture';\nimport { FillGradient } from '../fill/FillGradient';\nimport { FillPattern } from '../fill/FillPattern';\n\nimport type { ColorSource } from '../../../../color/Color';\nimport type {\n    ConvertedFillStyle,\n    ConvertedStrokeStyle,\n    FillInput,\n    FillStyle,\n    StrokeInput,\n} from '../FillTypes';\n\nfunction isColorLike(value: unknown): value is ColorSource\n{\n    return Color.isColorLike(value as ColorSource);\n}\n\nfunction isFillPattern(value: unknown): value is FillPattern\n{\n    return value instanceof FillPattern;\n}\n\nfunction isFillGradient(value: unknown): value is FillGradient\n{\n    return value instanceof FillGradient;\n}\n\nfunction isTexture(value: unknown): value is Texture\n{\n    return value instanceof Texture;\n}\n\n/**\n * Handles the case where the value is a ColorLike\n * @param fill\n * @param value\n * @param defaultStyle\n * @example\n * graphics.fill(0xff0000)\n * graphics.fill(new Color(0xff0000))\n * graphics.fill({ r: 255, g: 0, b: 0 })\n */\nfunction handleColorLike(\n    fill: FillStyle,\n    value: ColorSource,\n    defaultStyle: ConvertedFillStyle\n): ConvertedFillStyle\n{\n    const temp = Color.shared.setValue(value ?? 0);\n\n    fill.color = temp.toNumber();\n    fill.alpha = temp.alpha === 1 ? defaultStyle.alpha : temp.alpha;\n    fill.texture = Texture.WHITE;\n\n    return { ...defaultStyle, ...fill } as ConvertedFillStyle;\n}\n\n/**\n * Handles the case where the value is a Texture\n * @param fill\n * @param value\n * @param defaultStyle\n * @example\n * graphics.fill(new Texture(0xff0000))\n */\nfunction handleTexture(fill: FillStyle, value: Texture, defaultStyle: ConvertedFillStyle): ConvertedFillStyle\n{\n    fill.texture = value;\n\n    return { ...defaultStyle, ...fill } as ConvertedFillStyle;\n}\n\n/**\n * Handles the case where the value is a FillPattern\n * @param fill\n * @param value\n * @param defaultStyle\n * @example\n * graphics.fill(new FillPattern(0xff0000))\n */\nfunction handleFillPattern(\n    fill: FillStyle,\n    value: FillPattern,\n    defaultStyle: ConvertedFillStyle\n): ConvertedFillStyle\n{\n    fill.fill = value;\n    fill.color = 0xffffff;\n    fill.texture = value.texture;\n    fill.matrix = value.transform;\n\n    return { ...defaultStyle, ...fill } as ConvertedFillStyle;\n}\n\n/**\n * Handles the case where the value is a FillGradient\n * @param fill\n * @param value\n * @param defaultStyle\n * @example\n * graphics.fill(new FillGradient(0, 0, 200, 0))\n */\nfunction handleFillGradient(\n    fill: FillStyle,\n    value: FillGradient,\n    defaultStyle: ConvertedFillStyle\n): ConvertedFillStyle\n{\n    value.buildGradient();\n    fill.fill = value;\n    fill.color = 0xffffff;\n    fill.texture = value.texture;\n    fill.matrix = value.transform;\n    fill.textureSpace = value.textureSpace;\n\n    return { ...defaultStyle, ...fill } as ConvertedFillStyle;\n}\n\n/**\n * Handles the case where the value is not a direct Pixi Color, PatternFill, or GradientFill but instead\n * an object with potentially `color`\n * @example\n * {\n *   color: new Color(0xff0000)\n *   alpha: 0.5,\n *   texture?: null,\n *   matrix?: null,\n * }\n * @param value\n * @param defaultStyle\n */\nfunction handleFillObject(value: FillStyle, defaultStyle: ConvertedFillStyle): ConvertedFillStyle\n{\n    const style = { ...defaultStyle, ...(value as FillStyle) };\n\n    const color = Color.shared.setValue(style.color);\n\n    style.alpha *= color.alpha;\n    style.color = color.toNumber();\n\n    return style as ConvertedFillStyle;\n}\n\n/**\n * Converts a value to a fill style, we do this as PixiJS has a number of ways to define a fill style\n * They can be a direct color, a texture, a gradient, or an object with these values in them\n * This function will take any of these input types and convert them into a single object\n * that PixiJS can understand and use internally.\n * @param value - The value to convert to a fill style\n * @param defaultStyle - The default fill style to use\n * @private\n */\nexport function toFillStyle<T extends FillInput>(\n    value: T,\n    defaultStyle: ConvertedFillStyle\n): ConvertedFillStyle\n{\n    if (value === undefined || value === null)\n    {\n        return null;\n    }\n\n    const fill: ConvertedFillStyle = {} as ConvertedFillStyle;\n    const objectStyle = value as FillStyle;\n\n    if (isColorLike(value))\n    {\n        return handleColorLike(fill, value, defaultStyle);\n    }\n    else if (isTexture(value))\n    {\n        return handleTexture(fill, value, defaultStyle);\n    }\n    else if (isFillPattern(value))\n    {\n        return handleFillPattern(fill, value, defaultStyle);\n    }\n    else if (isFillGradient(value))\n    {\n        return handleFillGradient(fill, value, defaultStyle);\n    }\n    else if (objectStyle.fill && isFillPattern(objectStyle.fill))\n    {\n        return handleFillPattern(objectStyle, objectStyle.fill, defaultStyle);\n    }\n    else if (objectStyle.fill && isFillGradient(objectStyle.fill))\n    {\n        return handleFillGradient(objectStyle, objectStyle.fill, defaultStyle);\n    }\n\n    return handleFillObject(objectStyle, defaultStyle);\n}\n\n/**\n * Converts a value to a stroke style, similar to `toFillStyle` but for strokes\n * @param value - The value to convert to a stroke style\n * @param defaultStyle - The default stroke style to use\n * @private\n */\nexport function toStrokeStyle(value: StrokeInput, defaultStyle: ConvertedStrokeStyle): ConvertedStrokeStyle\n{\n    const { width, alignment, miterLimit, cap, join, pixelLine, ...rest } = defaultStyle;\n    const fill = toFillStyle(value, rest);\n\n    if (!fill)\n    {\n        return null;\n    }\n\n    return {\n        width,\n        alignment,\n        miterLimit,\n        cap,\n        join,\n        pixelLine,\n        ...fill,\n    };\n}\n"],"names":[],"mappings":"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"}