UNPKG

pixi.js

Version:

<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">

1 lines 5.58 kB
{"version":3,"file":"parseSVGDefinitions.mjs","sources":["../../../../../src/scene/graphics/shared/svg/parseSVGDefinitions.ts"],"sourcesContent":["import { Color } from '../../../../color/Color';\nimport { warn } from '../../../../utils/logging/warn';\nimport { FillGradient } from '../fill/FillGradient';\nimport { parseSVGFloatAttribute } from './parseSVGFloatAttribute';\n\nimport type { Session } from './SVGParser';\n\n/**\n * Parses SVG gradient definitions and stores them in the session for later use.\n * Currently supports linear gradients and has placeholder support for radial gradients.\n * @param svg - The root SVG element to parse definitions from\n * @param session - The parsing session to store definitions in\n * @internal\n */\nexport function parseSVGDefinitions(svg: SVGElement, session: Session): void\n{\n // Find all <defs> elements in the SVG\n const definitions = svg.querySelectorAll('defs');\n\n // Process each <defs> element\n for (let i = 0; i < definitions.length; i++)\n {\n const definition = definitions[i];\n\n // Process each child element in the <defs>\n for (let j = 0; j < definition.children.length; j++)\n {\n const child = definition.children[j];\n\n // Handle different types of gradient definitions\n switch (child.nodeName.toLowerCase())\n {\n case 'lineargradient':\n // Store the parsed linear gradient in the session defs using the gradient's ID\n session.defs[child.id] = parseLinearGradient(child as SVGElement);\n break;\n case 'radialgradient':\n session.defs[child.id] = parseRadialGradient(child as SVGElement);\n break;\n default:\n break;\n }\n }\n }\n}\n\n/**\n * Parses an SVG linear gradient element into a FillGradient.\n * @param child - The SVG linear gradient element to parse\n * @returns A FillGradient configured based on the SVG element\n */\nfunction parseLinearGradient(child: SVGElement): FillGradient\n{\n // Parse the gradient vector coordinates (defaults: horizontal line from 0 to 1)\n const x0 = parseSVGFloatAttribute(child, 'x1', 0);\n const y0 = parseSVGFloatAttribute(child, 'y1', 0);\n const x1 = parseSVGFloatAttribute(child, 'x2', 1);\n const y1 = parseSVGFloatAttribute(child, 'y2', 0);\n\n // Get the gradient coordinate system\n const gradientUnit = child.getAttribute('gradientUnits') || 'objectBoundingBox';\n\n // Create gradient with coordinates and space mapping\n const gradient = new FillGradient(\n x0,\n y0,\n x1,\n y1,\n gradientUnit === 'objectBoundingBox' ? 'local' : 'global'\n );\n\n // Process each gradient stop\n for (let k = 0; k < child.children.length; k++)\n {\n const stop = child.children[k] as SVGElement;\n\n // Get stop position (0-1) and color\n const offset = parseSVGFloatAttribute(stop, 'offset', 0);\n const color = Color.shared.setValue(stop.getAttribute('stop-color')).toNumber();\n\n gradient.addColorStop(offset, color);\n }\n\n return gradient;\n}\n\n/**\n * Placeholder function for parsing SVG radial gradients.\n * Currently returns a simple horizontal linear gradient and logs a warning.\n * @param _child - The SVG radial gradient element (currently unused)\n * @returns A default linear gradient\n */\nfunction parseRadialGradient(_child: SVGElement): FillGradient\n{\n // #if _DEBUG\n warn('[SVG Parser] Radial gradients are not yet supported');\n // #endif\n\n return new FillGradient(0, 0, 1, 0);\n}\n"],"names":[],"mappings":";;;;;;AAcgB,SAAA,mBAAA,CAAoB,KAAiB,OACrD,EAAA;AAEI,EAAM,MAAA,WAAA,GAAc,GAAI,CAAA,gBAAA,CAAiB,MAAM,CAAA,CAAA;AAG/C,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,CAAY,QAAQ,CACxC,EAAA,EAAA;AACI,IAAM,MAAA,UAAA,GAAa,YAAY,CAAC,CAAA,CAAA;AAGhC,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,UAAW,CAAA,QAAA,CAAS,QAAQ,CAChD,EAAA,EAAA;AACI,MAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,QAAA,CAAS,CAAC,CAAA,CAAA;AAGnC,MAAQ,QAAA,KAAA,CAAM,QAAS,CAAA,WAAA,EACvB;AAAA,QACI,KAAK,gBAAA;AAED,UAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,EAAE,CAAA,GAAI,oBAAoB,KAAmB,CAAA,CAAA;AAChE,UAAA,MAAA;AAAA,QACJ,KAAK,gBAAA;AACD,UAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,EAAE,CAAA,GAAI,oBAAoB,KAAmB,CAAA,CAAA;AAChE,UAAA,MAAA;AAAA,QACJ;AACI,UAAA,MAAA;AAAA,OACR;AAAA,KACJ;AAAA,GACJ;AACJ,CAAA;AAOA,SAAS,oBAAoB,KAC7B,EAAA;AAEI,EAAA,MAAM,EAAK,GAAA,sBAAA,CAAuB,KAAO,EAAA,IAAA,EAAM,CAAC,CAAA,CAAA;AAChD,EAAA,MAAM,EAAK,GAAA,sBAAA,CAAuB,KAAO,EAAA,IAAA,EAAM,CAAC,CAAA,CAAA;AAChD,EAAA,MAAM,EAAK,GAAA,sBAAA,CAAuB,KAAO,EAAA,IAAA,EAAM,CAAC,CAAA,CAAA;AAChD,EAAA,MAAM,EAAK,GAAA,sBAAA,CAAuB,KAAO,EAAA,IAAA,EAAM,CAAC,CAAA,CAAA;AAGhD,EAAA,MAAM,YAAe,GAAA,KAAA,CAAM,YAAa,CAAA,eAAe,CAAK,IAAA,mBAAA,CAAA;AAG5D,EAAA,MAAM,WAAW,IAAI,YAAA;AAAA,IACjB,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,YAAA,KAAiB,sBAAsB,OAAU,GAAA,QAAA;AAAA,GACrD,CAAA;AAGA,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,QAAA,CAAS,QAAQ,CAC3C,EAAA,EAAA;AACI,IAAM,MAAA,IAAA,GAAO,KAAM,CAAA,QAAA,CAAS,CAAC,CAAA,CAAA;AAG7B,IAAA,MAAM,MAAS,GAAA,sBAAA,CAAuB,IAAM,EAAA,QAAA,EAAU,CAAC,CAAA,CAAA;AACvD,IAAM,MAAA,KAAA,GAAQ,MAAM,MAAO,CAAA,QAAA,CAAS,KAAK,YAAa,CAAA,YAAY,CAAC,CAAA,CAAE,QAAS,EAAA,CAAA;AAE9E,IAAS,QAAA,CAAA,YAAA,CAAa,QAAQ,KAAK,CAAA,CAAA;AAAA,GACvC;AAEA,EAAO,OAAA,QAAA,CAAA;AACX,CAAA;AAQA,SAAS,oBAAoB,MAC7B,EAAA;AAEI,EAAA,IAAA,CAAK,qDAAqD,CAAA,CAAA;AAG1D,EAAA,OAAO,IAAI,YAAA,CAAa,CAAG,EAAA,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AACtC;;;;"}