parseNode method
dynamic
parseNode(
- dynamic node,
- dynamic style
Implementation
parseNode(node, style) {
if (node.nodeType != 1) return;
var transform = getNodeTransform(node);
var traverseChildNodes = true;
var path;
switch (node.nodeName) {
case 'svg':
break;
case 'style':
parseCSSStylesheet(node);
break;
case 'g':
style = parseStyle(node, style);
break;
case 'path':
style = parseStyle(node, style);
if (node.hasAttribute('d')) {
path = parsePathNode(node);
}
break;
case 'rect':
style = parseStyle(node, style);
path = parseRectNode(node);
break;
case 'polygon':
style = parseStyle(node, style);
path = parsePolygonNode(node);
break;
case 'polyline':
style = parseStyle(node, style);
path = parsePolylineNode(node);
break;
case 'circle':
style = parseStyle(node, style);
path = parseCircleNode(node);
break;
case 'ellipse':
style = parseStyle(node, style);
path = parseEllipseNode(node);
break;
case 'line':
style = parseStyle(node, style);
path = parseLineNode(node);
break;
case 'defs':
traverseChildNodes = false;
break;
case 'use':
style = parseStyle(node, style);
var usedNodeId = node.href.baseVal.substring(1);
var usedNode = node.viewportElement.getElementById(usedNodeId);
if (usedNode != null) {
parseNode(usedNode, style);
} else {
print("SVGLoader: 'use node' references non-existent node id: $usedNodeId");
}
break;
default:
// console.log( node );
}
if (path != null) {
if (style["fill"] != null && style["fill"] != 'none') {
path.color.setStyle(style["fill"]);
}
transformPath(path, currentTransform);
paths.add(path);
path.userData = {"node": node, "style": style};
}
if (traverseChildNodes) {
var nodes = node.childNodes;
for (var i = 0; i < nodes.length; i++) {
parseNode(nodes[i], style);
}
}
if (transform != null) {
transformStack.removeLast();
if (transformStack.isNotEmpty) {
currentTransform.copy(transformStack[transformStack.length - 1]);
} else {
currentTransform.identity();
}
}
}