119 lines
6.6 KiB
JavaScript
119 lines
6.6 KiB
JavaScript
shadow$provide.module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$svg$SVGParser = function(global, require, module, exports) {
|
|
function renderChildren(svg, session, fillStyle, strokeStyle) {
|
|
const children = svg.children, {fillStyle:f1, strokeStyle:s1} = parseSVGStyle.parseSVGStyle(svg, session);
|
|
f1 && fillStyle ? fillStyle = {...fillStyle, ...f1} : f1 && (fillStyle = f1);
|
|
s1 && strokeStyle ? strokeStyle = {...strokeStyle, ...s1} : s1 && (strokeStyle = s1);
|
|
var noStyle = !fillStyle && !strokeStyle;
|
|
noStyle && (fillStyle = {color:0});
|
|
let height;
|
|
switch(svg.nodeName.toLowerCase()) {
|
|
case "path":
|
|
var x1 = svg.getAttribute("d");
|
|
svg = svg.getAttribute("fill-rule");
|
|
var x = pathOperations.extractSubpaths(x1);
|
|
var y = 1 < x.length;
|
|
if ("evenodd" === svg && y) {
|
|
if (svg = x.map(subpath => ({path:subpath, area:pathOperations.calculatePathArea(subpath)})), svg.sort((a, b) => b.area - a.area), 3 < x.length || !fillOperations.checkForNestedPattern(svg)) {
|
|
for (x1 = 0; x1 < svg.length; x1++) {
|
|
x = svg[x1];
|
|
y = 0 === x1;
|
|
session.context.beginPath();
|
|
var width = new GraphicsPath.GraphicsPath(void 0, !0);
|
|
pathOperations.appendSVGPath(x.path, width);
|
|
session.context.path(width);
|
|
y ? (fillStyle && session.context.fill(fillStyle), strokeStyle && session.context.stroke(strokeStyle)) : session.context.cut();
|
|
}
|
|
} else {
|
|
for (x1 = 0; x1 < svg.length; x1++) {
|
|
x = svg[x1], y = 1 === x1 % 2, session.context.beginPath(), width = new GraphicsPath.GraphicsPath(void 0, !0), pathOperations.appendSVGPath(x.path, width), session.context.path(width), y ? session.context.cut() : (fillStyle && session.context.fill(fillStyle), strokeStyle && session.context.stroke(strokeStyle));
|
|
}
|
|
}
|
|
} else {
|
|
svg = new GraphicsPath.GraphicsPath(x1, svg ? "evenodd" === svg : !0), session.context.path(svg), fillStyle && session.context.fill(fillStyle), strokeStyle && session.context.stroke(strokeStyle);
|
|
}
|
|
break;
|
|
case "circle":
|
|
x = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "cx", 0);
|
|
y = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "cy", 0);
|
|
svg = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "r", 0);
|
|
session.context.ellipse(x, y, svg, svg);
|
|
fillStyle && session.context.fill(fillStyle);
|
|
strokeStyle && session.context.stroke(strokeStyle);
|
|
break;
|
|
case "rect":
|
|
x = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "x", 0);
|
|
y = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "y", 0);
|
|
width = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "width", 0);
|
|
height = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "height", 0);
|
|
x1 = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "rx", 0);
|
|
svg = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "ry", 0);
|
|
x1 || svg ? session.context.roundRect(x, y, width, height, x1 || svg) : session.context.rect(x, y, width, height);
|
|
fillStyle && session.context.fill(fillStyle);
|
|
strokeStyle && session.context.stroke(strokeStyle);
|
|
break;
|
|
case "ellipse":
|
|
x = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "cx", 0);
|
|
y = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "cy", 0);
|
|
x1 = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "rx", 0);
|
|
svg = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "ry", 0);
|
|
session.context.beginPath();
|
|
session.context.ellipse(x, y, x1, svg);
|
|
fillStyle && session.context.fill(fillStyle);
|
|
strokeStyle && session.context.stroke(strokeStyle);
|
|
break;
|
|
case "line":
|
|
x1 = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "x1", 0);
|
|
x = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "y1", 0);
|
|
y = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "x2", 0);
|
|
svg = parseSVGFloatAttribute.parseSVGFloatAttribute(svg, "y2", 0);
|
|
session.context.beginPath();
|
|
session.context.moveTo(x1, x);
|
|
session.context.lineTo(y, svg);
|
|
strokeStyle && session.context.stroke(strokeStyle);
|
|
break;
|
|
case "polygon":
|
|
svg = svg.getAttribute("points");
|
|
svg = svg.match(/-?\d+/g).map(n => parseInt(n, 10));
|
|
session.context.poly(svg, !0);
|
|
fillStyle && session.context.fill(fillStyle);
|
|
strokeStyle && session.context.stroke(strokeStyle);
|
|
break;
|
|
case "polyline":
|
|
svg = svg.getAttribute("points");
|
|
svg = svg.match(/-?\d+/g).map(n => parseInt(n, 10));
|
|
session.context.poly(svg, !1);
|
|
strokeStyle && session.context.stroke(strokeStyle);
|
|
break;
|
|
case "g":
|
|
case "svg":
|
|
break;
|
|
default:
|
|
warn.warn(`[SVG parser] <${svg.nodeName}> elements unsupported`);
|
|
}
|
|
noStyle && (fillStyle = null);
|
|
for (noStyle = 0; noStyle < children.length; noStyle++) {
|
|
renderChildren(children[noStyle], session, fillStyle, strokeStyle);
|
|
}
|
|
}
|
|
var warn = require("module$node_modules$pixi_DOT_js$lib$utils$logging$warn"), GraphicsPath = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$path$GraphicsPath"), parseSVGDefinitions = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$svg$parseSVGDefinitions"), parseSVGFloatAttribute = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$svg$parseSVGFloatAttribute"), parseSVGStyle = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$svg$parseSVGStyle"),
|
|
fillOperations = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$svg$utils$fillOperations"), pathOperations = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$svg$utils$pathOperations");
|
|
"use strict";
|
|
exports.SVGParser = function(svg, graphicsContext) {
|
|
if ("string" === typeof svg) {
|
|
var div = document.createElement("div");
|
|
div.innerHTML = svg.trim();
|
|
svg = div.querySelector("svg");
|
|
}
|
|
div = {context:graphicsContext, defs:{}, path:new GraphicsPath.GraphicsPath()};
|
|
parseSVGDefinitions.parseSVGDefinitions(svg, div);
|
|
const children = svg.children, {fillStyle, strokeStyle} = parseSVGStyle.parseSVGStyle(svg, div);
|
|
for (svg = 0; svg < children.length; svg++) {
|
|
const child = children[svg];
|
|
"defs" !== child.nodeName.toLowerCase() && renderChildren(child, div, fillStyle, strokeStyle);
|
|
}
|
|
return graphicsContext;
|
|
};
|
|
};
|
|
|
|
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$svg$SVGParser.js.map
|