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) {
  var path = Path();
  var firstControlPoint;
  var firstEndPoint;
  var secondControlPoint;
  var secondEndPoint;
  if (verticalPosition == VerticalPosition.BOTTOM &&
      horizontalPosition == HorizontalPosition.LEFT) {
    path.lineTo(0.0, size.height - 20);

    firstControlPoint = Offset(size.width / 4, size.height);
    firstEndPoint = Offset(size.width / 2, size.height - 40.0);
    path.quadraticBezierTo(firstControlPoint.dx, firstControlPoint.dy,
        firstEndPoint.dx, firstEndPoint.dy);

    secondControlPoint =
        Offset(size.width - (size.width / 3.25), size.height - 65);
    secondEndPoint = Offset(size.width, size.height - 40);
    path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy,
        secondEndPoint.dx, secondEndPoint.dy);

    path.lineTo(size.width, size.height - 40);
    path.lineTo(size.width, 0.0);
    path.close();
  } else if (verticalPosition == VerticalPosition.BOTTOM &&
      horizontalPosition == HorizontalPosition.RIGHT) {
    path.lineTo(0.0, size.height - 40);
    firstControlPoint = Offset(size.width / 3.25, size.height - 65);
    firstEndPoint = Offset(size.width / 2, size.height - 40);
    path.quadraticBezierTo(firstControlPoint.dx, firstControlPoint.dy,
        firstEndPoint.dx, firstEndPoint.dy);

    secondControlPoint = Offset(size.width / 1.25, size.height);
    secondEndPoint = Offset(size.width, size.height - 30);
    path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy,
        secondEndPoint.dx, secondEndPoint.dy);

    path.lineTo(size.width, size.height - 20);
    path.lineTo(size.width, 0.0);
    path.close();
  } else if (verticalPosition == VerticalPosition.TOP &&
      horizontalPosition == HorizontalPosition.RIGHT) {
    path.lineTo(0.0, 20);
    firstControlPoint = Offset(size.width / 3.25, 65);
    firstEndPoint = Offset(size.width / 2, 40);
    path.quadraticBezierTo(firstControlPoint.dx, firstControlPoint.dy,
        firstEndPoint.dx, firstEndPoint.dy);

    secondControlPoint = Offset(size.width / 1.25, 0);
    secondEndPoint = Offset(size.width, 30);
    path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy,
        secondEndPoint.dx, secondEndPoint.dy);

    path.lineTo(size.width, size.height);
    path.lineTo(0.0, size.height);
    path.close();
  } else {
    path.lineTo(0.0, 20);

    firstControlPoint = Offset(size.width / 4, 0.0);
    firstEndPoint = Offset(size.width / 2, 40.0);
    path.quadraticBezierTo(firstControlPoint.dx, firstControlPoint.dy,
        firstEndPoint.dx, firstEndPoint.dy);

    secondControlPoint = Offset(size.width - (size.width / 3.25), 65);
    secondEndPoint = Offset(size.width, 40);
    path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy,
        secondEndPoint.dx, secondEndPoint.dy);

    path.lineTo(size.width, size.height);
    path.lineTo(0.0, size.height);
    path.close();
  }

  return path;
}