public void TestNoFx()
        {
            SvgRadialGradientElement elm = Util.GetXmlElement("<radialGradient fy='5' />", "", "radialGradient") as SvgRadialGradientElement;

            Assert.AreEqual(5, elm.Fx.AnimVal.Value, "fx");
            Assert.AreEqual(5, elm.Fy.AnimVal.Value, "fy");
        }
        public void TestSize()
        {
            SvgRadialGradientElement elm = Util.GetXmlElement("<radialGradient cx='1' cy='2' r='3' fx='4' fy='5' />", "", "radialGradient") as SvgRadialGradientElement;

            Assert.AreEqual(1, elm.Cx.AnimVal.Value, "cx");
            Assert.AreEqual(2, elm.Cy.AnimVal.Value, "cy");
            Assert.AreEqual(3, elm.R.AnimVal.Value, "r");
            Assert.AreEqual(4, elm.Fx.AnimVal.Value, "fx");
            Assert.AreEqual(5, elm.Fy.AnimVal.Value, "fy");
        }
Ejemplo n.º 3
0
        public override Brush GetBrush(Rect elementBounds, WpfDrawingContext context, Transform viewTransform)
        {
            SvgLinearGradientElement linearGrad = _gradientElement as SvgLinearGradientElement;

            if (linearGrad != null)
            {
                return(GetLinearGradientBrush(linearGrad, viewTransform));
            }

            SvgRadialGradientElement radialGrad = _gradientElement as SvgRadialGradientElement;

            if (radialGrad != null)
            {
                return(GetRadialGradientBrush(radialGrad));
            }

            return(new SolidColorBrush(Colors.Black));
        }
Ejemplo n.º 4
0
        public override Brush GetBrush(RectangleF bounds)
        {
            SvgLinearGradientElement linearGradient = _gradientElement as SvgLinearGradientElement;

            if (linearGradient != null)
            {
                return(GetLinearGradientBrush(linearGradient, bounds));
            }

            SvgRadialGradientElement radialGradient = _gradientElement as SvgRadialGradientElement;

            if (radialGradient != null)
            {
                return(GetRadialGradientBrush(radialGradient, bounds));
            }

            return(new SolidBrush(Color.Black));
        }
Ejemplo n.º 5
0
        public Region GetRadialRegion(RectangleF bounds)
        {
            SvgRadialGradientElement res = _gradientElement as SvgRadialGradientElement;

            if (_gradientElement == null)
            {
                return(null);
            }

            float fCenterX = (float)res.Cx.AnimVal.Value;
            float fCenterY = (float)res.Cy.AnimVal.Value;
            float fFocusX  = (float)res.Fx.AnimVal.Value;
            float fFocusY  = (float)res.Fy.AnimVal.Value;
            float fRadius  = (float)res.R.AnimVal.Value;

            float fEffectiveCX      = fCenterX;
            float fEffectiveCY      = fCenterY;
            float fEffectiveFX      = fFocusX;
            float fEffectiveFY      = fFocusY;
            float fEffectiveRadiusX = fRadius;
            float fEffectiveRadiusY = fRadius;

            if (res.GradientUnits.AnimVal.Equals((ushort)SvgUnitType.ObjectBoundingBox))
            {
                fEffectiveCX      = bounds.Left + fCenterX * (bounds.Width);
                fEffectiveCY      = bounds.Top + fCenterY * (bounds.Height);
                fEffectiveFX      = bounds.Left + fFocusX * (bounds.Width);
                fEffectiveFY      = bounds.Top + fFocusY * (bounds.Height);
                fEffectiveRadiusX = fRadius * bounds.Width;
                fEffectiveRadiusY = fRadius * bounds.Height;
            }

            GraphicsPath gp2 = new GraphicsPath();

            gp2.AddEllipse(fEffectiveCX - fEffectiveRadiusX, fEffectiveCY - fEffectiveRadiusY,
                           2 * fEffectiveRadiusX, 2 * fEffectiveRadiusY);

            return(new Region(gp2));
        }
Ejemplo n.º 6
0
 public virtual void VisitRadialGradientElement(SvgRadialGradientElement element)
 => DefaultVisit(element);
Ejemplo n.º 7
0
        private Brush GetRadialGradientBrush(SvgRadialGradientElement res)
        {
            double centerX = res.Cx.AnimVal.Value;
            double centerY = res.Cy.AnimVal.Value;
            double focusX  = res.Fx.AnimVal.Value;
            double focusY  = res.Fy.AnimVal.Value;
            double radius  = res.R.AnimVal.Value;

            GradientStopCollection gradientStops = GetGradientStops(res.Stops);

            if (gradientStops == null || gradientStops.Count == 0)
            {
                return(null);
            }

            RadialGradientBrush brush = new RadialGradientBrush(gradientStops);

            brush.RadiusX        = radius;
            brush.RadiusY        = radius;
            brush.Center         = new Point(centerX, centerY);
            brush.GradientOrigin = new Point(focusX, focusY);

            if (res.SpreadMethod != null)
            {
                SvgSpreadMethod spreadMethod = (SvgSpreadMethod)res.SpreadMethod.AnimVal;

                if (spreadMethod != SvgSpreadMethod.None)
                {
                    brush.SpreadMethod = WpfConvert.ToSpreadMethod(spreadMethod);
                }
            }
            if (res.GradientUnits != null)
            {
                SvgUnitType mappingMode = (SvgUnitType)res.GradientUnits.AnimVal;
                if (mappingMode == SvgUnitType.ObjectBoundingBox)
                {
                    brush.MappingMode = BrushMappingMode.RelativeToBoundingBox;
                }
                else if (mappingMode == SvgUnitType.UserSpaceOnUse)
                {
                    brush.MappingMode = BrushMappingMode.Absolute;

                    if (res.Fx.AnimVal.UnitType == SvgLengthType.Percentage)
                    {
                        brush.GradientOrigin = brush.Center;
                    }
                }
            }

            MatrixTransform transform = GetTransformMatrix(res);

            if (transform != null && !transform.Matrix.IsIdentity)
            {
                brush.Transform = transform;
            }

            string colorInterpolation = res.GetPropertyValue("color-interpolation");

            if (!string.IsNullOrWhiteSpace(colorInterpolation))
            {
                if (colorInterpolation == "linearRGB")
                {
                    brush.ColorInterpolationMode = ColorInterpolationMode.SRgbLinearInterpolation;
                }
                else
                {
                    brush.ColorInterpolationMode = ColorInterpolationMode.ScRgbLinearInterpolation;
                }
            }

            return(brush);
        }
Ejemplo n.º 8
0
        private PathGradientBrush GetRadialGradientBrush(SvgRadialGradientElement res, RectangleF bounds)
        {
            float fCenterX = (float)res.Cx.AnimVal.Value;
            float fCenterY = (float)res.Cy.AnimVal.Value;
            float fFocusX  = (float)res.Fx.AnimVal.Value;
            float fFocusY  = (float)res.Fy.AnimVal.Value;
            float fRadius  = (float)res.R.AnimVal.Value;

            float fEffectiveCX      = fCenterX;
            float fEffectiveCY      = fCenterY;
            float fEffectiveFX      = fFocusX;
            float fEffectiveFY      = fFocusY;
            float fEffectiveRadiusX = fRadius;
            float fEffectiveRadiusY = fRadius;

            if (res.GradientUnits.AnimVal.Equals(SvgUnitType.ObjectBoundingBox))
            {
                fEffectiveCX      = bounds.Left + fCenterX * (bounds.Width);
                fEffectiveCY      = bounds.Top + fCenterY * (bounds.Height);
                fEffectiveFX      = bounds.Left + fFocusX * (bounds.Width);
                fEffectiveFY      = bounds.Top + fFocusY * (bounds.Height);
                fEffectiveRadiusX = fRadius * bounds.Width;
                fEffectiveRadiusY = fRadius * bounds.Height;
            }

            GraphicsPath gp = new GraphicsPath();

            gp.AddEllipse(fEffectiveCX - fEffectiveRadiusX,
                          fEffectiveCY - fEffectiveRadiusY, 2 * fEffectiveRadiusX, 2 * fEffectiveRadiusY);

            PathGradientBrush brush = new PathGradientBrush(gp);

            brush.CenterPoint = new PointF(fEffectiveFX, fEffectiveFY);

            XmlNodeList stops = res.Stops;

            ColorBlend cb = new ColorBlend();

            List <Color> adjcolors    = new List <Color>();
            List <float> adjpositions = new List <float>();

            GetColorsAndPositions(stops, adjpositions, adjcolors);

            // Need to invert the colors for some bizarre reason
            adjcolors.Reverse();
            adjpositions.Reverse();
            for (int i = 0; i < adjpositions.Count; i++)
            {
                adjpositions[i] = 1 - adjpositions[i];
            }

            cb.Colors    = adjcolors.ToArray();
            cb.Positions = adjpositions.ToArray();

            brush.InterpolationColors = cb;

            //			ISvgTransformable transElm = (ISvgTransformable)res;
            //			SvgTransformList svgTList = (SvgTransformList)transElm.transform.AnimVal;
            //			brush.Transform = svgTList.matrix.matrix;

            if (res.GetPropertyValue("color-interpolation") == "linearRGB")
            {
                //GdipSetPathGradientGammaCorrection(brush, true);
            }
            else
            {
                //GdipSetPathGradientGammaCorrection(brush, false);
            }

            /*
             * How to do brush.GammaCorrection = true on a PathGradientBrush? / nikgus
             * */

            return(brush);
        }
Ejemplo n.º 9
0
        public static RadialGradientBrush ConstructBrush(SvgRadialGradientElement gradient, Rect bounds, Matrix transform)
        {
            if (gradient.Stops.Count == 0)
            {
                return(null);
            }

            double centerX = gradient.Cx.AnimVal.Value;
            double centerY = gradient.Cy.AnimVal.Value;
            double focusX  = gradient.Fx.AnimVal.Value;
            double focusY  = gradient.Fy.AnimVal.Value;
            double radius  = gradient.R.AnimVal.Value;

            GradientStopCollection gradientStops = ToGradientStops(gradient.Stops);

            RadialGradientBrush brush = new RadialGradientBrush(gradientStops);

            brush.RadiusX        = radius;
            brush.RadiusY        = radius;
            brush.Center         = new Point(centerX, centerY);
            brush.GradientOrigin = new Point(focusX, focusY);

            if (gradient.SpreadMethod != null)
            {
                SvgSpreadMethod      spreadMethod = (SvgSpreadMethod)gradient.SpreadMethod.AnimVal;
                GradientSpreadMethod sm;
                if (TryGetSpreadMethod(spreadMethod, out sm))
                {
                    brush.SpreadMethod = sm;
                }
            }

            SvgUnitType mappingMode = SvgUnitType.ObjectBoundingBox;

            if (gradient.GradientUnits != null)
            {
                mappingMode = (SvgUnitType)gradient.GradientUnits.AnimVal;
                if (mappingMode == SvgUnitType.ObjectBoundingBox)
                {
                    brush.MappingMode = BrushMappingMode.RelativeToBoundingBox;
                }
                else if (mappingMode == SvgUnitType.UserSpaceOnUse)
                {
                    brush.MappingMode = BrushMappingMode.Absolute;
                    brush.Center.Offset(bounds.X, bounds.Y);
                    brush.GradientOrigin.Offset(bounds.X, bounds.Y);
                }
            }

            Matrix brushTransform = ToWpfMatrix(((SvgTransformList)gradient.GradientTransform.AnimVal).TotalMatrix);

            if (mappingMode == SvgUnitType.UserSpaceOnUse)
            {
                brushTransform *= transform;
            }
            if (!brushTransform.IsIdentity)
            {
                brush.Transform = new MatrixTransform(brushTransform);
            }

            string colorInterpolation = gradient.GetPropertyValue("color-interpolation");

            if (!string.IsNullOrWhiteSpace(colorInterpolation))
            {
                if (colorInterpolation == CssConstants.ValLinearRgb)
                {
                    brush.ColorInterpolationMode = ColorInterpolationMode.SRgbLinearInterpolation;
                }
                else
                {
                    brush.ColorInterpolationMode = ColorInterpolationMode.ScRgbLinearInterpolation;
                }
            }

            return(brush);
        }
Ejemplo n.º 10
0
        private CanvasRadialGradientBrush CreateRadialGradient(CanvasDrawingSession session, Rect area, SvgRadialGradientElement element)
        {
            if (this.ResourceCache.ContainsKey(element))
            {
                return((CanvasRadialGradientBrush)this.ResourceCache[element]);
            }

            var stops = element.ChildNodes.Cast <SvgStopElement>().Select(s =>
            {
                var alpha = s.Style.StopOpacity.HasValue ? (byte)(255.0F * s.Style.StopOpacity.Value) : (byte)0xff;
                var stop  = new CanvasGradientStop()
                {
                    Position = s.Offset,
                    Color    = Color.FromArgb(alpha, s.Style.StopColor.RgbColor.Red, s.Style.StopColor.RgbColor.Green, s.Style.StopColor.RgbColor.Blue)
                };
                return(stop);
            }).ToArray();

            var m = element.GradientTransform.Result;

            if (element.GradientUnits == SvgUnitType.ObjectBoundingBox)
            {
                m = new SvgMatrix(area.Width, 0.0, 0.0, area.Height, area.X, area.Y) * m;
            }
            var transform = new Matrix3x2 {
                M11 = (float)m.A, M12 = (float)m.B, M21 = (float)m.C, M22 = (float)m.D, M31 = (float)m.E, M32 = (float)m.F
            };

            var centerX      = this.LengthConverter.ConvertX(element.CenterX);
            var centerY      = this.LengthConverter.ConvertY(element.CenterY);
            var focusX       = this.LengthConverter.ConvertX(element.FocusX);
            var focusY       = this.LengthConverter.ConvertY(element.FocusY);
            var radiusX      = this.LengthConverter.ConvertX(element.Radius);
            var radiusY      = this.LengthConverter.ConvertY(element.Radius);
            var spreadMethod = GetSpreadMethod(element.SpreadMethod);
            var brush        = new CanvasRadialGradientBrush(this.ResourceCreator, stops, spreadMethod, CanvasAlphaMode.Straight)
            {
                OriginOffset = new Vector2 {
                    X = focusX - centerX, Y = focusY - centerY
                },
                Center = new Vector2 {
                    X = centerX, Y = centerY
                },
                RadiusX   = radiusX,
                RadiusY   = radiusY,
                Transform = transform,
            };

            this.DisposableObjects.Add(brush);
            this.ResourceCache.Add(element, brush);
            return(brush);
        }
Ejemplo n.º 11
0
        private Brush GetRadialGradientBrush(SvgRadialGradientElement res)
        {
            var refElem = res.ReferencedElement;

            double centerX = res.Cx.AnimVal.Value;
            double centerY = res.Cy.AnimVal.Value;

            // 'fx', 'fy', and 'fr' define the start circle for the radial gradient.
            double focusX = res.Fx.AnimVal.Value;
            double focusY = res.Fy.AnimVal.Value;
            double radius = res.R.AnimVal.Value;

            var lengthUnit = res.Cx.AnimVal.UnitType;

            // If attribute 'fx' is not specified, 'fx' will coincide with the presentational
            // value of 'cx' for the element whether the value for 'cx' was inherited or not.
            if (lengthUnit == SvgLengthType.Percentage)
            {
                if (!res.HasAttribute("fx") && (refElem == null || !refElem.HasAttribute("fx")))
                {
                    focusX = centerX;
                }
                else if (focusX.Equals(0.0))
                {
                    focusX = centerX;
                    if (focusX > 0 && focusX >= radius)
                    {
                        focusX = (centerX > radius) ? centerX - radius : focusX = radius;
                    }
                }
                else
                {
                    if (focusX > 0 && focusX >= radius)
                    {
                        focusX = (centerX > radius) ? centerX - radius : focusX = radius;
                    }
                }
            }

            lengthUnit = res.Cy.AnimVal.UnitType;
            // If attribute 'fy' is not specified, 'fy' will coincide with the presentational
            // value of 'cy' for the element whether the value for 'cy' was inherited or not.
            if (lengthUnit == SvgLengthType.Percentage)
            {
                if (!res.HasAttribute("fy") && (refElem == null || !refElem.HasAttribute("fy")))
                {
                    focusY = centerY;
                }
                else if (focusY.Equals(0.0))
                {
                    focusY = centerY;
                    if (focusY > 0 && focusY >= radius)
                    {
                        focusY = (centerY > radius) ? centerY - radius : focusY = radius;
                    }
                }
                else
                {
                    if (focusY > 0 && focusY >= radius)
                    {
                        focusY = (centerY > radius) ? centerY - radius : focusY = radius;
                    }
                }
            }

            GradientStopCollection gradientStops = GetGradientStops(res.Stops);

            if (gradientStops == null || gradientStops.Count == 0)
            {
                return(null);
            }

            RadialGradientBrush brush = new RadialGradientBrush(gradientStops);

            brush.RadiusX        = radius;
            brush.RadiusY        = radius;
            brush.Center         = new Point(centerX, centerY);
            brush.GradientOrigin = new Point(focusX, focusY);

            if (res.SpreadMethod != null)
            {
                SvgSpreadMethod spreadMethod = (SvgSpreadMethod)res.SpreadMethod.AnimVal;

                if (spreadMethod != SvgSpreadMethod.None)
                {
                    brush.SpreadMethod = WpfConvert.ToSpreadMethod(spreadMethod);
                }
            }
            if (res.GradientUnits != null)
            {
                SvgUnitType mappingMode = (SvgUnitType)res.GradientUnits.AnimVal;
                if (mappingMode == SvgUnitType.ObjectBoundingBox)
                {
                    brush.MappingMode = BrushMappingMode.RelativeToBoundingBox;
                }
                else if (mappingMode == SvgUnitType.UserSpaceOnUse)
                {
                    brush.MappingMode = BrushMappingMode.Absolute;

                    if (res.Fx.AnimVal.UnitType == SvgLengthType.Percentage)
                    {
                        brush.GradientOrigin = brush.Center;
                    }

                    _isUserSpace = true;
                }
            }

            MatrixTransform transform = GetTransformMatrix(res);

            if (transform != null && !transform.Matrix.IsIdentity)
            {
                brush.Transform = transform;
            }

            string colorInterpolation = res.GetPropertyValue("color-interpolation");

            if (!string.IsNullOrWhiteSpace(colorInterpolation))
            {
                if (string.Equals(colorInterpolation, "linearRGB", StringComparison.OrdinalIgnoreCase))
                {
                    brush.ColorInterpolationMode = ColorInterpolationMode.SRgbLinearInterpolation;
                }
                else
                {
                    brush.ColorInterpolationMode = ColorInterpolationMode.ScRgbLinearInterpolation;
                }
            }

            return(brush);
        }
Ejemplo n.º 12
0
        private PathGradientBrush GetBrush(SvgRadialGradientElement res, RectangleF bounds)
        {
            float fCenterX = (float)res.Cx.AnimVal.Value;
            float fCenterY = (float)res.Cy.AnimVal.Value;
            float fFocusX  = (float)res.Fx.AnimVal.Value;
            float fFocusY  = (float)res.Fy.AnimVal.Value;
            float fRadius  = (float)res.R.AnimVal.Value;

            float fEffectiveCX      = fCenterX;
            float fEffectiveCY      = fCenterY;
            float fEffectiveFX      = fFocusX;
            float fEffectiveFY      = fFocusY;
            float fEffectiveRadiusX = fRadius;
            float fEffectiveRadiusY = fRadius;

            if (res.GradientUnits.AnimVal.Equals((ushort)SvgUnitType.ObjectBoundingBox))
            {
                fEffectiveCX      = bounds.Left + fCenterX * (bounds.Width);
                fEffectiveCY      = bounds.Top + fCenterY * (bounds.Height);
                fEffectiveFX      = bounds.Left + fFocusX * (bounds.Width);
                fEffectiveFY      = bounds.Top + fFocusY * (bounds.Height);
                fEffectiveRadiusX = fRadius * bounds.Width;
                fEffectiveRadiusY = fRadius * bounds.Height;
            }

            GraphicsPath gp = new GraphicsPath();

            gp.AddEllipse(fEffectiveCX - fEffectiveRadiusX,
                          fEffectiveCY - fEffectiveRadiusY, 2 * fEffectiveRadiusX, 2 * fEffectiveRadiusY);

            PathGradientBrush brush = new PathGradientBrush(gp);

            brush.CenterPoint = new PointF(fEffectiveFX, fEffectiveFY);

            XmlNodeList stops = res.Stops;

            //List<Color> adjcolors = new List<Color>();
            //List<float> adjpositions = new List<float>();
            //GetColorsAndPositions(stops, adjpositions, adjcolors);
            //// Need to invert the colors for some bizarre reason
            //adjcolors.Reverse();
            //adjpositions.Reverse();
            //for (int i = 0; i < adjpositions.Count; i++)
            //{
            //    adjpositions[i] = 1 - adjpositions[i];
            //}
            //cb.Colors    = adjcolors.ToArray();
            //cb.Positions = adjpositions.ToArray();

            var gradientStops = this.GetGradientStops(stops);

            gradientStops.Reverse();
            for (int i = 0; i < gradientStops.Count; i++)
            {
                gradientStops[i].Offset = 1 - gradientStops[i].Offset;
            }

            int stopCount = gradientStops.Count;

            ColorBlend cb = new ColorBlend(stopCount);

            var colors    = new Color[stopCount];
            var positions = new float[stopCount];

            for (int i = 0; i < stopCount; i++)
            {
                var gradientStop = gradientStops[i];
                colors[i]    = gradientStop.Color;
                positions[i] = gradientStop.Offset;
            }

            cb.Colors    = colors;
            cb.Positions = positions;

            brush.InterpolationColors = cb;

            //			ISvgTransformable transElm = (ISvgTransformable)res;
            //			SvgTransformList svgTList = (SvgTransformList)transElm.transform.AnimVal;
            //			brush.Transform = svgTList.matrix.matrix;

            //if (res.GetPropertyValue("color-interpolation") == CssConstants.ValLinearRgb)
            //{
            //    //GdipSetPathGradientGammaCorrection(brush, true);
            //}
            //else
            //{
            //    //GdipSetPathGradientGammaCorrection(brush, false);
            //}

            ///*
            //       * How to do brush.GammaCorrection = true on a PathGradientBrush? / nikgus
            //       * */

            return(brush);
        }
Ejemplo n.º 13
0
 public GdiRadialGradientFill(SvgRadialGradientElement gradientElement)
     : base(gradientElement)
 {
 }
Ejemplo n.º 14
0
        private CanvasRadialGradientBrush CreateRadialGradient(CanvasDrawingSession session, Rect area, SvgRadialGradientElement element)
        {
            if (this.ResourceCache.ContainsKey(element))
            {
                return((CanvasRadialGradientBrush)this.ResourceCache[element]);
            }

            var stops = element.ChildNodes.Cast <SvgStopElement>().Select(s =>
            {
                var alpha = s.Style.StopOpacity.HasValue ? (byte)(255.0F * s.Style.StopOpacity.Value) : (byte)0xff;
                var stop  = new CanvasGradientStop()
                {
                    Position = s.Offset,
                    Color    = s.Style.StopColor.StopColorType == SvgStopColorType.CurrentColor
                                                ? s.Style.Color.ToPlatformColor(alpha)
                                                : s.Style.StopColor?.ToPlatformColor(alpha) ?? Color.FromArgb(alpha, 0, 0, 0)
                };
                return(stop);
            }).ToArray();

            var m         = element.GradientTransform.Result;
            var transform = new Matrix3x2 {
                M11 = (float)m.A, M12 = (float)m.B, M21 = (float)m.C, M22 = (float)m.D, M31 = (float)m.E, M32 = (float)m.F
            };

            float centerX, centerY, focusX, focusY, radiusX, radiusY;

            if (element.GradientUnits != SvgUnitType.UserSpaceOnUse)
            {
                centerX = this.LengthConverter.ConvertXForOBBU(element.CenterX, (float)area.X, (float)area.Width);
                centerY = this.LengthConverter.ConvertYForOBBU(element.CenterY, (float)area.Y, (float)area.Height);
                focusX  = this.LengthConverter.ConvertXForOBBU(element.FocusX, (float)area.X, (float)area.Width);
                focusY  = this.LengthConverter.ConvertYForOBBU(element.FocusY, (float)area.Y, (float)area.Height);
                radiusX = this.LengthConverter.ConvertXForOBBU(element.Radius, (float)area.X, (float)area.Width);
                radiusY = this.LengthConverter.ConvertYForOBBU(element.Radius, (float)area.Y, (float)area.Height);
            }
            else
            {
                centerX = this.LengthConverter.ConvertX(element.CenterX);
                centerY = this.LengthConverter.ConvertY(element.CenterY);
                focusX  = this.LengthConverter.ConvertX(element.FocusX);
                focusY  = this.LengthConverter.ConvertY(element.FocusY);
                radiusX = this.LengthConverter.ConvertX(element.Radius);
                radiusY = this.LengthConverter.ConvertY(element.Radius);
            }
            var spreadMethod = GetSpreadMethod(element.SpreadMethod);
            var brush        = new CanvasRadialGradientBrush(this.ResourceCreator, stops, spreadMethod, CanvasAlphaMode.Straight)
            {
                OriginOffset = new Vector2 {
                    X = focusX - centerX, Y = focusY - centerY
                },
                Center = new Vector2 {
                    X = centerX, Y = centerY
                },
                RadiusX   = radiusX,
                RadiusY   = radiusY,
                Transform = transform,
            };

            this.DisposableObjects.Add(brush);
            this.ResourceCache.Add(element, brush);
            return(brush);
        }
Ejemplo n.º 15
0
 public override PageElement VisitRadialGradientElement(SvgRadialGradientElement element) => null;