internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Line line) { var rect = line.GetBoundingRect(rootElement).ToSharpDX(); var stroke = await line.Stroke.ToSharpDX(renderTarget, rect); if (stroke == null || line.StrokeThickness <= 0) { return; } var layer = line.CreateAndPushLayerIfNecessary(renderTarget, rootElement); renderTarget.DrawLine( new Vector2( rect.Left + (float)line.X1, rect.Top + (float)line.Y1), new Vector2( rect.Left + (float)line.X2, rect.Top + (float)line.Y2), stroke, (float)line.StrokeThickness, line.GetStrokeStyle(compositionEngine.D2DFactory)); if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle) { var rect = rectangle.GetBoundingRect(rootElement).ToSharpDX(); var fill = await rectangle.Fill.ToSharpDX(renderTarget, rect); var stroke = await rectangle.Stroke.ToSharpDX(renderTarget, rect); try { var layer = rectangle.CreateAndPushLayerIfNecessary(renderTarget, rootElement); if (rectangle.RadiusX > 0 && rectangle.RadiusY > 0) { var roundedRect = new SharpDX.Direct2D1.RoundedRectangle(); roundedRect.Rect = rect; roundedRect.RadiusX = (float)rectangle.RadiusX; roundedRect.RadiusY = (float)rectangle.RadiusY; if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); roundedRect.Rect = rect.Eroded(halfThickness); if (fill != null) { renderTarget.FillRoundedRectangle(roundedRect, fill); } renderTarget.DrawRoundedRectangle( roundedRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRoundedRectangle(roundedRect, fill); } } else { if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); if (fill != null) { renderTarget.FillRectangle(rect.Eroded(halfThickness), fill); } var strokeRect = rect.Eroded(halfThickness); renderTarget.DrawRectangle( strokeRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRectangle(rect, fill); } } if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } } finally { if (fill != null) { fill.Dispose(); } if (stroke != null) { stroke.Dispose(); } } }