protected void UpdateTextGeometry() { BoundText = Text.GetProperty(nameof(TextShapeViewModel.Text)) is string boundText ? boundText : Text.Text; if (BoundText is null) { return; } if (Style.TextStyle.FontSize < 0.0) { return; } FormattedText = SkiaSharpDrawUtil.GetSKPaint(BoundText, Style, Text.TopLeft, Text.BottomRight, out var origin); Origin = origin; }
public virtual void UpdateStyle() { Brush = SkiaSharpDrawUtil.ToSKPaintBrush(ShapeStyleViewModel.Fill.Color); Pen = SkiaSharpDrawUtil.ToSKPaintPen(ShapeStyleViewModel, ShapeStyleViewModel.Stroke.Thickness); }
public override void UpdateStyle() { Fill = SkiaSharpDrawUtil.ToSKPaintBrush(Color); }
public static SKPath ToSKPath(this IEnumerable <BaseShapeViewModel> shapes) { var path = new SKPath { FillType = SKPathFillType.Winding }; var previous = default(PointShapeViewModel); foreach (var shape in shapes) { switch (shape) { case LineShapeViewModel lineShape: { if (previous is null || previous != lineShape.Start) { path.MoveTo( (float)(lineShape.Start.X), (float)(lineShape.Start.Y)); } path.LineTo( (float)(lineShape.End.X), (float)(lineShape.End.Y)); previous = lineShape.End; } break; case RectangleShapeViewModel rectangleShape: { path.AddRect( SkiaSharpDrawUtil.CreateRect(rectangleShape.TopLeft, rectangleShape.BottomRight), SKPathDirection.Clockwise); } break; case EllipseShapeViewModel ellipseShape: { path.AddOval( SkiaSharpDrawUtil.CreateRect(ellipseShape.TopLeft, ellipseShape.BottomRight), SKPathDirection.Clockwise); } break; case ArcShapeViewModel arcShape: { var a = new GdiArc( Point2.FromXY(arcShape.Point1.X, arcShape.Point1.Y), Point2.FromXY(arcShape.Point2.X, arcShape.Point2.Y), Point2.FromXY(arcShape.Point3.X, arcShape.Point3.Y), Point2.FromXY(arcShape.Point4.X, arcShape.Point4.Y)); var rect = new SKRect( (float)(a.X), (float)(a.Y), (float)(a.X + a.Width), (float)(a.Y + a.Height)); path.AddArc(rect, (float)a.StartAngle, (float)a.SweepAngle); } break; case CubicBezierShapeViewModel cubicBezierShape: { if (previous is null || previous != cubicBezierShape.Point1) { path.MoveTo( (float)(cubicBezierShape.Point1.X), (float)(cubicBezierShape.Point1.Y)); } path.CubicTo( (float)(cubicBezierShape.Point2.X), (float)(cubicBezierShape.Point2.Y), (float)(cubicBezierShape.Point3.X), (float)(cubicBezierShape.Point3.Y), (float)(cubicBezierShape.Point4.X), (float)(cubicBezierShape.Point4.Y)); previous = cubicBezierShape.Point4; } break; case QuadraticBezierShapeViewModel quadraticBezierShape: { if (previous is null || previous != quadraticBezierShape.Point1) { path.MoveTo( (float)(quadraticBezierShape.Point1.X), (float)(quadraticBezierShape.Point1.Y)); } path.QuadTo( (float)(quadraticBezierShape.Point2.X), (float)(quadraticBezierShape.Point2.Y), (float)(quadraticBezierShape.Point3.X), (float)(quadraticBezierShape.Point3.Y)); previous = quadraticBezierShape.Point3; } break; case TextShapeViewModel textShape: { var resultPath = ToSKPath(textShape); if (resultPath is { } && !resultPath.IsEmpty) { path.AddPath(resultPath, SKPathAddMode.Append); } } break;
public virtual void UpdateStyle() { Fill = SkiaSharpDrawUtil.ToSKPaintBrush(Style.Fill.Color); Stroke = SkiaSharpDrawUtil.ToSKPaintPen(Style, Style.Stroke.Thickness); }