protected override void RenderGroup(CanvasDrawingSession session, SvgGroupElement element) { using (var t = TransformSession.CreateTransformSession(session, element.Transform.Result)) { this.RenderChildren(session, element.ChildNodes); } }
protected override void RenderUse(CanvasDrawingSession session, SvgUseElement element) { using (var t = TransformSession.CreateTransformSession(session, element.Transform.Result)) { this.RenderChild(session, element.InstanceRoot); } }
protected override void RenderLine(CanvasDrawingSession session, SvgLineElement element) { var x1 = this.LengthConverter.ConvertX(element.X1); var y1 = this.LengthConverter.ConvertY(element.Y1); var x2 = this.LengthConverter.ConvertX(element.X2); var y2 = this.LengthConverter.ConvertY(element.Y2); using (var t = TransformSession.CreateTransformSession(session, element.Transform.Result)) { var area = new Rect(Math.Min(x1, x2), Math.Min(y1, y2), Math.Abs(y2 - x1), Math.Abs(y2 - y1)); var stroke = element.Style.Stroke; if (stroke != null && stroke.PaintType != SvgPaintType.None) { var pen = this.CreatePaint(session, area, stroke, element.Style.StrokeOpacity); var width = element.Style.StrokeWidth; session.DrawLine(x1, y1, x2, y2, pen, width.HasValue ? this.LengthConverter.Convert(width.Value) : 1.0F); } } }
private void RenderGeometory(CanvasDrawingSession session, CanvasGeometry geometry, SvgMatrix transform, CssStyleDeclaration style) { bool change = false; var geometry2 = geometry; CanvasSolidColorBrush opacityBrush = null; try { using (var t = TransformSession.CreateTransformSession(session, transform)) { var clipPath = style.ClipPath; if (clipPath != null) { if (clipPath.Uri[0] != '#') { throw new ArgumentException(); } var clipPathElement = (SvgClipPathElement)this.TargetDocument.GetElementById(clipPath.Uri.Substring(1)); var clipGeometory = this.CreateClipPath(session, clipPathElement); geometry2 = geometry.CombineWith( clipGeometory, new Matrix3x2 { M11 = 1.0F, M12 = 0.0F, M21 = 0.0F, M22 = 1.0F, M31 = 0.0F, M32 = 0.0F }, CanvasGeometryCombine.Intersect, CanvasGeometry.ComputeFlatteningTolerance(session.Dpi, 1.0F, session.Transform)); change = true; } var area = geometry2.ComputeBounds(); var opacity = style.Opacity; if (opacity != null) { opacityBrush = this.CreateOpacity(session, opacity.Value); } var fill = style.Fill; if (fill == null || fill != null && fill.PaintType != SvgPaintType.None) { var pen = this.CreatePaint(session, area, fill, style.FillOpacity); if (opacityBrush == null) { session.FillGeometry(geometry2, pen); } else { session.FillGeometry(geometry2, pen, opacityBrush); } } var stroke = style.Stroke; if (stroke != null && stroke.PaintType != SvgPaintType.None) { var pen = this.CreatePaint(session, area, stroke, style.StrokeOpacity); var strokeWidth = style.StrokeWidth; session.DrawGeometry(geometry2, pen, strokeWidth.HasValue ? this.LengthConverter.Convert(strokeWidth.Value) : 1.0F); } } } finally { if (change) { geometry2.Dispose(); } if (opacityBrush != null) { opacityBrush.Dispose(); } } }