private void ParseGradientLink(ref RageSvgGradient currentGradient, string gradientKey)
    {
        RageSvgGradient refGradient;

        if (_gradients.TryGetValue(gradientKey, out refGradient))
        {
            currentGradient.CopyDataFrom(refGradient);
        }
    }
 public void CopyDataFrom(RageSvgGradient src)
 {
     Id         = src.Id;
     Type       = src.Type;
     X1         = src.X1;
     X2         = src.X2;
     Y1         = src.Y1;
     Y2         = src.Y2;
     StartColor = src.StartColor;
     EndColor   = src.EndColor;
 }
 private RageSvgObject()
 {
     Id          = "";
     Paths       = new List <RageSvgPathElement>();
     Parent      = null;
     PointIdx    = GroupId = PathId = 0;
     CursorPos   = Vector3.zero;
     Style       = RageSvgStyle.NewInstance();
     Gradient    = null;
     StyleString = ClipPathUnits = ClipPath = "";
 }
 public void CopyDataFrom(RageSvgStyle style)
 {
     OutlineType     = style.OutlineType;
     OutlineColor1   = style.OutlineColor1;
     OutlineColor2   = style.OutlineColor2;
     OutlineAlpha    = style.OutlineAlpha;
     OutlineWidth    = style.OutlineWidth;
     CornersType     = style.CornersType;
     FillType        = style.FillType;
     RageSvgGradient = style.RageSvgGradient;
     FillColor1      = style.FillColor1;
     FillColor2      = style.FillColor2;
     FillColor1Alpha = style.FillColor1Alpha;
     FillColor2Alpha = style.FillColor2Alpha;
     HasFill         = style.HasFill;
     HasOutline      = style.HasOutline;
     HasGradient     = style.HasGradient;
 }
 public RageSvgStyle()
 {
     OutlineType     = Spline.OutlineType.None;
     OutlineColor1   = Color.black;
     OutlineColor2   = Color.black;
     OutlineAlpha    = 1f;
     OutlineWidth    = 1f;
     CornersType     = Spline.CornerType.Beak;     //Was: Default
     FillType        = Spline.FillType.Solid;
     RageSvgGradient = null;
     FillColor1      = Color.black;
     FillColor2      = Color.black;
     FillColor1Alpha = 1f;
     FillColor2Alpha = 1f;
     HasFill         = true;
     HasOutline      = false;
     HasGradient     = false;
 }
    private void ParseGradient(XmlNode svgEntry, RageSvgObject pathData, RageSvgGradient.GradientType gradientType, bool subPath, int level)
    {
        // Initializes a new Gradient
        pathData.Gradient      = RageSvgGradient.NewInstance();
        pathData.Gradient.Type = gradientType;
        float radius = 0f;
        var   gradientTransformString = "";

        XmlAttributeCollection attributes = svgEntry.Attributes;

        if (attributes != null)
        {
            foreach (XmlAttribute svgAttribute in attributes)
            {
                string svgCommand = svgAttribute.Name;
                string svgValue   = svgAttribute.Value;
                // Parse valid Svg style commands, if any found, iterate
                // if (ParseSvgStyle(svgCommand, svgValue)) continue;

                switch (svgCommand)
                {
                //<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="170.0791" y1="85.0396" x2="170.0791" y2="28.3472">
                case ("id"):
                    pathData.Gradient.Id = svgValue;
                    break;

                case ("xlink:href"):
                    ParseGradientLink(ref pathData.Gradient, svgValue.Substring(1));
                    break;

                case ("x1"):
                    pathData.Gradient.X1 = svgValue.SvgToFloat();
                    break;

                case ("y1"):
                    pathData.Gradient.Y1 = svgValue.SvgToFloat();
                    break;

                case ("x2"):
                    pathData.Gradient.X2 = svgValue.SvgToFloat();
                    break;

                case ("y2"):
                    pathData.Gradient.Y2 = svgValue.SvgToFloat();
                    break;

                case ("cx"):
                    pathData.Gradient.X2 = svgValue.SvgToFloat();
                    break;

                case ("cy"):
                    pathData.Gradient.Y2 = svgValue.SvgToFloat();
                    break;

                case ("fx"):
                    pathData.Gradient.X1 = svgValue.SvgToFloat();
                    break;

                case ("fy"):
                    pathData.Gradient.Y1 = svgValue.SvgToFloat();
                    break;

                case ("r"):
                    radius = svgValue.SvgToFloat();
                    break;

                case ("gradientTransform"):
                    gradientTransformString = svgValue;
                    break;
                }
            }
        }

        if (!(Mathfx.Approximately(radius, 0f)))
        {
            pathData.Gradient.X2 = pathData.Gradient.X1 + radius;
            pathData.Gradient.Y2 = pathData.Gradient.Y2 + radius;
        }

        if (DebugStyleCreation)
        {
            Debug.Log("######### Gradient children Count: " + svgEntry.ChildNodes.Count);
        }

        if (svgEntry.ChildNodes.Count != 0)
        {
            level++;
            foreach (XmlNode childNode in svgEntry.ChildNodes)
            {
                ParseSvg(childNode, pathData, subPath, level);
            }
        }
        ApplyGradientTransform(gradientTransformString, pathData);

        if (_gradients.ContainsKey(pathData.Gradient.Id))
        {
            return;
        }

        if (DebugStyleCreation)
        {
            Debug.Log("Gradient entry added: " + pathData.Gradient.Id);
        }
        // After all "stop" child nodes are parsed, actually add the new dictionary item
        _gradients.Add(pathData.Gradient.Id, pathData.Gradient);
    }