getClip method

  1. @override
Path getClip(
  1. Size size
)
override

Returns a description of the clip given that the render object being clipped is of the given size.

Implementation

@override
Path getClip(Size size) {
  double r = size.width / 2;
  Path path = Path();
  List<Offset> points = [];

  if (total == 2 && index == initIndex) {
    path.addOval(Rect.fromLTRB(0, 0, size.width, size.height));
  } else {
    /// arcAngle and space, prefer to use arcAngle.
    double spaceA = arcAngle > 0
        ? (arcAngle / 2)
        : (math.acos((r - math.min(r, space)) / r) / math.pi * 180);
    double startA = degree + spaceA;
    double endA = degree - spaceA;
    for (double i = startA; i <= 360 + endA; i = i + 1) {
      double x1 = r + r * math.sin(d2r(i));
      double y1 = r - r * math.cos(d2r(i));
      points.add(Offset(x1, y1));
    }

    double spaceB = math.atan(
            r * math.sin(d2r(spaceA)) / (2 * r - r * math.cos(d2r(spaceA)))) /
        math.pi *
        180;
    double r1 = (2 * r - r * math.cos(d2r(spaceA))) / math.cos(d2r(spaceB));
    double startB = degree - 180 - spaceB;
    double endB = degree - 180 + spaceB;
    List<Offset> pointsB = [];
    for (double i = startB; i < endB; i = i + 1) {
      double x1 = previousX + r1 * math.sin(d2r(i));
      double y1 = previousY - r1 * math.cos(d2r(i));
      pointsB.add(Offset(x1, y1));
    }
    points.addAll(pointsB.reversed);
    path.addPolygon(points, true);
  }
  return path;
}