parseNode method
void
parseNode(
- dynamic node,
- dynamic style
Implementation
void parseNode(node, style) {
if(node.nodeType != XmlNodeType.ELEMENT) return;
//if(node.nodeType == XmlNodeType.Node) return;
final transform = getNodeTransform(node);
bool traverseChildNodes = true;
dynamic path;
switch (node.name.local) {
case 'svg':
break;
case 'style':
parseCSSStylesheet(node);
break;
case 'g':
style = parseStyle(node, style);
break;
case 'path':
style = parseStyle(node, style);
if (node.getAttribute('d') != null) {
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);
// final usedNodeId = node.href.baseVal.substring(1);
// final usedNode = node.viewportElement.getElementById(usedNodeId);
// if (usedNode != null) {
// parseNode(usedNode, style);
// }
// else {
// console.info("SVGLoader: 'use node' references non-existent node id: $usedNodeId");
// }
throw("SVGLoader: 'use node' references non-existent node.");
//break;
default:
// Console.log( node );
}
if (path != null) {
if (style["fill"] != null && style["fill"] != 'none') {
(path.color as Color).setStyle(style["fill"]);
}
transformPath(path, currentTransform);
paths.add(path);
path.userData = {"node": node, "style": style};
}
if (traverseChildNodes) {
final nodes = (node as XmlElement).children;//.toList();//.childElements.toList();
for (int i = 0; i < nodes.length; i++) {
parseNode(nodes[i], style);
}
}
if (transform != null) {
if(transformStack.isNotEmpty){
transformStack.removeLast();
if (transformStack.isNotEmpty) {
currentTransform.setFrom(transformStack[transformStack.length - 1]);
}
else {
currentTransform.identity();
}
}
}
}