public SvgElementInstanceList(SvgUseElement useElement, SvgElementInstance parent) { if (parent.CorrespondingElement == null) { // Handle non SVGElement cases items = new SvgElementInstance[0]; } else if (parent.CorrespondingElement is ISvgUseElement) { // Handle recursive SVGUseElement cases items = new SvgElementInstance[1]; ISvgUseElement iUseElement = (ISvgUseElement)parent.CorrespondingElement; items[0] = (SvgElementInstance)iUseElement.InstanceRoot; return; } else { XmlNodeList xmlChildNodes = parent.CorrespondingElement.ChildNodes; for (int i = 0; i < xmlChildNodes.Count; i++) { items[i] = new SvgElementInstance(xmlChildNodes[i], useElement, parent); if (i > 0) { items[i].SetPreviousSibling(items[i - 1]); items[i - 1].SetNextSibling(items[i]); } } } }
public SvgElementInstance(XmlNode refNode, SvgUseElement useElement, SvgElementInstance parent) { correspondingUseElement = (ISvgUseElement)useElement; parentNode = (SvgElementInstance)parent; correspondingElement = (ISvgElement)refNode; eventTarget = new EventTarget(this); }
public void Visit(ISvgUseElement element) { SvgUseElement useElement = (SvgUseElement)element; SvgDocument document = useElement.OwnerDocument; XmlElement refEl = useElement.ReferencedElement; if (refEl == null) { return; } bool isImported = false; // For the external node, the documents are different, and we may not be // able to insert this node, so we first import it... if (useElement.OwnerDocument != refEl.OwnerDocument) { XmlElement importedNode = useElement.OwnerDocument.ImportNode(refEl, true) as XmlElement; if (importedNode != null) { SvgElement importedSvgElement = importedNode as SvgElement; if (importedSvgElement != null) { importedSvgElement.Imported = true; importedSvgElement.ImportNode = refEl as SvgElement; importedSvgElement.ImportDocument = refEl.OwnerDocument as SvgDocument; } refEl = importedNode; isImported = true; } } XmlElement refElParent = (XmlElement)refEl.ParentNode; useElement.OwnerDocument.Static = true; useElement.CopyToReferencedElement(refEl); if (!isImported) // if imported, we do not need to remove it... { refElParent.RemoveChild(refEl); } useElement.AppendChild(refEl); // Now, render the use element... var refElement = useElement?.FirstChild; if (refElement is IElementVisitorTarget evt) { evt.Accept(this); } useElement.RemoveChild(refEl); useElement.RestoreReferencedElement(refEl); if (!isImported) { refElParent.AppendChild(refEl); } useElement.OwnerDocument.Static = false; }
public SvgElementInstance(XmlNode refNode, SvgUseElement useElement, SvgElementInstance parent) { _correspondingUseElement = useElement; _parentNode = parent; _correspondingElement = refNode as ISvgElement; _eventTarget = new EventTarget(this); }
public SvgElementInstance(XmlNode refNode, SvgUseElement useElement, SvgElementInstance parent) { correspondingUseElement = (ISvgUseElement)useElement; parentNode = (SvgElementInstance)parent; correspondingElement = (ISvgElement)refNode; eventTarget = new EventTarget(this); }