parseNode method

void parseNode(
  1. dynamic node,
  2. 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();
      }
    }
  }
}