private SvgSvgElement MoveIntoSvgElement()
        {
            SvgDocument   doc    = _patternElement.OwnerDocument;
            SvgSvgElement svgElm = doc.CreateElement("", "svg", SvgDocument.SvgNamespace) as SvgSvgElement;

            XmlNodeList children = _patternElement.Children;

            if (children.Count > 0)
            {
                oldParent = children[0].ParentNode as XmlElement;
            }

            for (int i = 0; i < children.Count; i++)
            {
                svgElm.AppendChild(children[i]);
            }

            if (_patternElement.HasAttribute("viewBox"))
            {
                svgElm.SetAttribute("viewBox", _patternElement.GetAttribute("viewBox"));
            }
            svgElm.SetAttribute("x", "0");
            svgElm.SetAttribute("y", "0");
            svgElm.SetAttribute("width", _patternElement.GetAttribute("width"));
            svgElm.SetAttribute("height", _patternElement.GetAttribute("height"));

            if (_patternElement.PatternContentUnits.AnimVal.Equals((ushort)SvgUnitType.ObjectBoundingBox))
            {
                svgElm.SetAttribute("viewBox", "0 0 1 1");
            }

            _patternElement.AppendChild(svgElm);

            return(svgElm);
        }
Esempio n. 2
0
//        private SvgSvgElement MoveIntoSvgElement()
//        {
//            SvgDocument doc = _patternElement.OwnerDocument;
//            SvgSvgElement svgElm = doc.CreateElement("", "svg", SvgDocument.SvgNamespace) as SvgSvgElement;

//            XmlNodeList children = _patternElement.Children;
//            if (children.Count > 0)
//            {
//                oldParent = children[0].ParentNode as XmlElement;
//            }

//            for (int i = 0; i < children.Count; i++)
//            {
//                svgElm.AppendChild(children[i]);
//            }

//            if (_patternElement.HasAttribute("viewBox"))
//            {
//                svgElm.SetAttribute("viewBox", _patternElement.GetAttribute("viewBox"));
//            }
//            //svgElm.SetAttribute("x", "0");
//            //svgElm.SetAttribute("y", "0");
//            svgElm.SetAttribute("x",      _patternElement.GetAttribute("x"));
//            svgElm.SetAttribute("y",      _patternElement.GetAttribute("y"));
//            svgElm.SetAttribute("width",  _patternElement.GetAttribute("width"));
//            svgElm.SetAttribute("height", _patternElement.GetAttribute("height"));

//            if (_patternElement.PatternContentUnits.AnimVal.Equals((ushort)SvgUnitType.ObjectBoundingBox))
//            {
////                svgElm.SetAttribute("viewBox", "0 0 1 1");
//            }
//            else
//            {
//                _isUserSpace = true;
//            }

//            _patternElement.AppendChild(svgElm);

//            return svgElm;
//        }

        //private void MoveOutOfSvgElement(SvgSvgElement svgElm)
        //{
        //    while (svgElm.ChildNodes.Count > 0)
        //    {
        //        oldParent.AppendChild(svgElm.ChildNodes[0]);
        //    }

        //    _patternElement.RemoveChild(svgElm);
        //}

        private void PrepareTargetPattern()
        {
            var renderedElement = _patternElement;

            if (renderedElement.ReferencedElement != null)
            {
                SvgPatternElement svgElm = _patternElement.CloneNode(true) as SvgPatternElement;

                renderedElement = _patternElement.ReferencedElement;
                if (svgElm.IsEmpty)
                {
                    XmlNodeList children = renderedElement.Children;
                    if (children.Count > 0)
                    {
                        foreach (SvgElement element in children)
                        {
                            svgElm.AppendChild(element.Clone());
                        }
                    }
                }

                var inheritedAttributes = renderedElement.Attributes;
                foreach (XmlAttribute attr in inheritedAttributes)
                {
                    if (!svgElm.HasAttribute(attr.Name))
                    {
                        svgElm.SetAttribute(attr.Name, attr.Value);
                    }
                }

                _patternElement.AppendChild(svgElm);

//                renderedElement = svgElm;

                while (renderedElement.ReferencedElement != null)
                {
                    renderedElement     = renderedElement.ReferencedElement;
                    inheritedAttributes = renderedElement.Attributes;
                    foreach (XmlAttribute attr in inheritedAttributes)
                    {
                        if (!svgElm.HasAttribute(attr.Name))
                        {
                            svgElm.SetAttribute(attr.Name, attr.Value);
                        }
                    }
                }

                svgElm.Id       = "";
                renderedElement = svgElm;
            }

            _renderedElement = renderedElement;
        }