internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Jupiter.Shapes.Path path) { var rect = path.GetBoundingRect(rootElement).ToSharpDX(); var fill = await path.Fill.ToSharpDX(renderTarget, rect); var stroke = await path.Stroke.ToSharpDX(renderTarget, rect); var layer = path.CreateAndPushLayerIfNecessary(renderTarget, rootElement); var oldTransform = renderTarget.Transform; renderTarget.Transform = new Matrix3x2( 1, 0, 0, 1, rect.Left, rect.Top); //renderTarget.PushLayer(ref layerParameters, layer); var d2dGeometry = path.Data.ToSharpDX(compositionEngine.D2DFactory, rect); if (fill != null) { renderTarget.FillGeometry(d2dGeometry, fill, null); } if (stroke != null && path.StrokeThickness > 0) { renderTarget.DrawGeometry( d2dGeometry, stroke, (float)path.StrokeThickness, path.GetStrokeStyle(compositionEngine.D2DFactory));} //if (path.StrokeThickness > 0 && // stroke != null) //{ // var halfThickness = (float)(path.StrokeThickness * 0.5); // roundedRect.Rect = rect.Eroded(halfThickness); // if (fill != null) // { // renderTarget.FillRoundedRectangle(roundedRect, fill); // } // renderTarget.DrawRoundedRectangle( // roundedRect, // stroke, // (float)path.StrokeThickness, // path.GetStrokeStyle(compositionEngine.D2DFactory)); //} //else //{ // renderTarget.FillRoundedRectangle(roundedRect, fill); //} if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } renderTarget.Transform = oldTransform; }