public void SetGradient(Brush brush)
        {
            if (brush is LinearGradientBrush linearGradientBrush)
            {
                var p1 = linearGradientBrush.StartPoint;
                var x1 = (float)p1.X;
                var y1 = (float)p1.Y;

                var p2 = linearGradientBrush.EndPoint;
                var x2 = (float)p2.X;
                var y2 = (float)p2.Y;

                var gradientBrushData = linearGradientBrush.GetGradientBrushData();
                var colors            = gradientBrushData.Item1;
                var offsets           = gradientBrushData.Item2;

                var linearGradientShader = new LinearGradientShader(colors, offsets, x1, y1, x2, y2);
                SetShaderFactory(new GradientShaderFactory(linearGradientShader));
            }

            if (brush is RadialGradientBrush radialGradientBrush)
            {
                var   center  = radialGradientBrush.Center;
                float centerX = (float)center.X;
                float centerY = (float)center.Y;
                float radius  = (float)radialGradientBrush.Radius;

                var gradientBrushData = radialGradientBrush.GetGradientBrushData();
                var colors            = gradientBrushData.Item1;
                var offsets           = gradientBrushData.Item2;

                var radialGradientShader = new RadialGradientShader(colors, offsets, centerX, centerY, radius);
                SetShaderFactory(new GradientShaderFactory(radialGradientShader));
            }
        }
        public static AM.IBrush?ToLinearGradientBrush(this LinearGradientShader linearGradientShader)
        {
            if (linearGradientShader.Colors != null && linearGradientShader.ColorPos != null)
            {
                var linearGradientBrush = new AM.LinearGradientBrush
                {
                    SpreadMethod = linearGradientShader.Mode.ToGradientSpreadMethod()
                };

                var startPoint = linearGradientShader.Start.ToPoint();
                linearGradientBrush.StartPoint = new A.RelativePoint(startPoint, A.RelativeUnit.Relative);

                var endPoint = linearGradientShader.End.ToPoint();
                linearGradientBrush.EndPoint = new A.RelativePoint(endPoint, A.RelativeUnit.Relative);

                linearGradientBrush.GradientStops = new AM.GradientStops();

                for (int i = 0; i < linearGradientShader.Colors.Length; i++)
                {
                    var color        = linearGradientShader.Colors[i].ToColor();
                    var offset       = linearGradientShader.ColorPos[i];
                    var gradientStop = new AM.GradientStop(color, offset);
                    linearGradientBrush.GradientStops.Add(gradientStop);
                }

                // TODO: linearGradientShader.LocalMatrix

                return(linearGradientBrush);
            }

            return(null);
        }
Beispiel #3
0
        public static AM.IBrush?ToLinearGradientBrush(this LinearGradientShader linearGradientShader)
        {
            if (linearGradientShader.Colors is null || linearGradientShader.ColorPos is null)
            {
                return(null);
            }

            var spreadMethod = linearGradientShader.Mode.ToGradientSpreadMethod();
            var start        = linearGradientShader.Start.ToPoint();
            var end          = linearGradientShader.End.ToPoint();

            if (linearGradientShader.LocalMatrix is { })
Beispiel #4
0
 public static AM.IBrush?ToLinearGradientBrush(this LinearGradientShader linearGradientShader)
 {
     if (linearGradientShader.Colors is { } && linearGradientShader.ColorPos is { })