public string StrokeCap(CompositionStrokeCap value)
 {
     const string typeName = nameof(CompositionStrokeCap);
     return value switch
     {
         CompositionStrokeCap.Flat => $"{typeName}{ScopeResolve}Flat",
         CompositionStrokeCap.Square => $"{typeName}{ScopeResolve}Square",
         CompositionStrokeCap.Round => $"{typeName}{ScopeResolve}Round",
         CompositionStrokeCap.Triangle => $"{typeName}{ScopeResolve}Triangle",
         _ => throw new InvalidOperationException(),
     };
 }
        private void DrawShapeGeometry(CompositionGeometry geometry, IShape shape)
        {
            CompositionSpriteShape spriteShape = _compositor.CreateSpriteShape(geometry);

            IBrush?fill = shape.Fill;

            if (fill != null)
            {
                spriteShape.FillBrush = fill.ToCompositionBrush(_compositor);
            }

            IBrush?stroke = shape.Stroke;

            if (stroke != null)
            {
                spriteShape.StrokeBrush     = stroke.ToCompositionBrush(_compositor);
                spriteShape.StrokeThickness = (float)shape.StrokeThickness;

                CompositionStrokeCap strokeCap = shape.StrokeLineCap switch
                {
                    PenLineCap.Flat => CompositionStrokeCap.Flat,
                    PenLineCap.Round => CompositionStrokeCap.Round,
                    PenLineCap.Square => CompositionStrokeCap.Square,
                    _ => throw new InvalidOperationException($"Unknown PenLineCap value {shape.StrokeLineCap}")
                };
                spriteShape.StrokeStartCap = strokeCap;
                spriteShape.StrokeEndCap   = strokeCap;

                spriteShape.StrokeLineJoin = shape.StrokeLineJoin switch
                {
                    PenLineJoin.Miter => CompositionStrokeLineJoin.Miter,
                    PenLineJoin.Bevel => CompositionStrokeLineJoin.Bevel,
                    PenLineJoin.Round => CompositionStrokeLineJoin.Round,
                    _ => throw new InvalidOperationException($"Unknown PenLineJoin value {shape.StrokeLineJoin}")
                };

                // TODO: Check that miter limit definition matches StandardUI (half thickness vs full thickness)
                spriteShape.StrokeMiterLimit = (float)shape.StrokeMiterLimit;

                // TODO: Handle dash pattern
            }

            if (_shapeVisual == null)
            {
                _shapeVisual = _compositor.CreateShapeVisual();
            }

            _shapeVisual.Shapes.Add(spriteShape);
        }
Exemple #3
0
        public string StrokeCap(CompositionStrokeCap value)
        {
            const string typeName = nameof(CompositionStrokeCap);

            switch (value)
            {
            case CompositionStrokeCap.Flat: return($"{typeName}{ScopeResolve}Flat");

            case CompositionStrokeCap.Square: return($"{typeName}{ScopeResolve}Square");

            case CompositionStrokeCap.Round: return($"{typeName}{ScopeResolve}Round");

            case CompositionStrokeCap.Triangle: return($"{typeName}{ScopeResolve}Triangle");

            default: throw new InvalidOperationException();
            }
        }