using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace RealTimeGraphEx.ExtensionMethods { public static class BrushExtensions { public static SharpDX.Direct2D1.Brush ToDxBrush(this Brush brush, SharpDX.Direct2D1.RenderTarget renderTarget) { if (brush == null) return null; if (brush.GetType() == typeof(SolidColorBrush)) { return new SharpDX.Direct2D1.SolidColorBrush(renderTarget, new SharpDX.Color4((brush as SolidColorBrush).Color.ToRgba()), new SharpDX.Direct2D1.BrushProperties() { Opacity = (float)brush.Opacity }); } else if (brush.GetType() == typeof(LinearGradientBrush)) { var linear = brush as LinearGradientBrush; var startPoint = new SharpDX.Vector2((float)linear.StartPoint.X, (float)linear.StartPoint.Y); var endPoint = new SharpDX.Vector2((float)linear.EndPoint.X, (float)linear.EndPoint.Y); SharpDX.Direct2D1.GradientStop[] stops = new SharpDX.Direct2D1.GradientStop[linear.GradientStops.Count]; for (int i = 0; i < linear.GradientStops.Count; i++) { stops[i] = new SharpDX.Direct2D1.GradientStop(); stops[i].Color = new SharpDX.Color4(linear.GradientStops[i].Color.ToRgba()); stops[i].Position = (float)linear.GradientStops[i].Offset; } var dxBrush = new SharpDX.Direct2D1.LinearGradientBrush( renderTarget, new SharpDX.Direct2D1.LinearGradientBrushProperties() { StartPoint = startPoint, EndPoint = endPoint, }, new SharpDX.Direct2D1.GradientStopCollection(renderTarget, stops)); return dxBrush; // var linearGradientBrush = new SharpDX.Direct2D1.LinearGradientBrush(renderTarget, new SharpDX.Direct2D1.LinearGradientBrushProperties() // { // StartPoint = new SharpDX.Vector2(50, 0), // EndPoint = new SharpDX.Vector2(450, 0), // }, //new SharpDX.Direct2D1.GradientStopCollection(renderTarget, new SharpDX.Direct2D1.GradientStop[] // { // new SharpDX.Direct2D1.GradientStop() // { // Color = SharpDX.Color.Blue, // Position = 0, // }, // new SharpDX.Direct2D1.GradientStop() // { // Color = SharpDX.Color.Green, // Position = 1, // } // })); // return linearGradientBrush; } else { return null; } } } }