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); }
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 { })
public static AM.IBrush?ToLinearGradientBrush(this LinearGradientShader linearGradientShader) { if (linearGradientShader.Colors is { } && linearGradientShader.ColorPos is { })