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.46 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":";;;;;;AAcO,SAAS,mBAAA,CAAoB,KAAiB,OAAA,EACrD;AAEI,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,gBAAA,CAAiB,MAAM,CAAA;AAG/C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EACxC;AACI,IAAA,MAAM,UAAA,GAAa,YAAY,CAAC,CAAA;AAGhC,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,EAAA,EAChD;AACI,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,QAAA,CAAS,CAAC,CAAA;AAGnC,MAAA,QAAQ,KAAA,CAAM,QAAA,CAAS,WAAA,EAAY;AACnC,QACI,KAAK,gBAAA;AAED,UAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,GAAI,oBAAoB,KAAmB,CAAA;AAChE,UAAA;AAAA,QACJ,KAAK,gBAAA;AACD,UAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,GAAI,oBAAoB,KAAmB,CAAA;AAChE,UAAA;AAAA,QACJ;AACI,UAAA;AAAA;AACR,IACJ;AAAA,EACJ;AACJ;AAOA,SAAS,oBAAoB,KAAA,EAC7B;AAEI,EAAA,MAAM,EAAA,GAAK,sBAAA,CAAuB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAA,GAAK,sBAAA,CAAuB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAA,GAAK,sBAAA,CAAuB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAA,GAAK,sBAAA,CAAuB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAGhD,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,YAAA,CAAa,eAAe,CAAA,IAAK,mBAAA;AAG5D,EAAA,MAAM,WAAW,IAAI,YAAA;AAAA,IACjB,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,YAAA,KAAiB,sBAAsB,OAAA,GAAU;AAAA,GACrD;AAGA,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAA,EAC3C;AACI,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAG7B,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,IAAA,EAAM,QAAA,EAAU,CAAC,CAAA;AACvD,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,QAAA,CAAS,KAAK,YAAA,CAAa,YAAY,CAAC,CAAA,CAAE,QAAA,EAAS;AAE9E,IAAA,QAAA,CAAS,YAAA,CAAa,QAAQ,KAAK,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,QAAA;AACX;AAQA,SAAS,oBAAoB,MAAA,EAC7B;AAEI,EAAA,IAAA,CAAK,qDAAqD,CAAA;AAG1D,EAAA,OAAO,IAAI,YAAA,CAAa,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AACtC;;;;"}