Example #1
0
 protected override void RenderGroup(CanvasDrawingSession session, SvgGroupElement element)
 {
     using (var t = TransformSession.CreateTransformSession(session, element.Transform.Result))
     {
         this.RenderChildren(session, element.ChildNodes);
     }
 }
Example #2
0
 protected override void RenderUse(CanvasDrawingSession session, SvgUseElement element)
 {
     using (var t = TransformSession.CreateTransformSession(session, element.Transform.Result))
     {
         this.RenderChild(session, element.InstanceRoot);
     }
 }
Example #3
0
        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);
                }
            }
        }
Example #4
0
        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();
                }
            }
        }