toSegments method

  1. @override
List<Segment> toSegments()
override

Converts this shape to path segments.

Implementation

@override
List<Segment> toSegments() {
  final rx = oval.width / 2;
  final ry = oval.height / 2;
  final cx = oval.center.dx;
  final cy = oval.center.dy;
  const factor = ((-1 + sqrt2) / 3) * 4;
  final dx = rx * factor;
  final dy = ry * factor;

  return [
    MoveSegment(end: oval.centerLeft),
    CubicSegment(
        control1: Offset(oval.left, cy - dy),
        control2: Offset(cx - dx, oval.top),
        end: oval.topCenter,
        tag: SegmentTags.top),
    CubicSegment(
        control1: Offset(cx + dx, oval.top),
        control2: Offset(oval.right, cy - dy),
        end: oval.centerRight,
        tag: SegmentTags.right),
    CubicSegment(
        control1: Offset(oval.right, cy + dy),
        control2: Offset(cx + dx, oval.bottom),
        end: oval.bottomCenter,
        tag: SegmentTags.bottom),
    CubicSegment(
        control1: Offset(cx - dx, oval.bottom),
        control2: Offset(oval.left, cy + dy),
        end: oval.centerLeft,
        tag: SegmentTags.left),
    CloseSegment(),
  ];
}