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); }
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(); } }