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) {
  Path path = Path();

  Rect foregroundRect = Rect.fromLTRB(0, 0, size.width, size.height);

  path.moveTo(foregroundRect.left, foregroundRect.top);

  if (triangleAxis == Axis.horizontal) {
    _addTrianglePointToPath(
        foregroundRect,
        path,
        Offset(foregroundRect.left, foregroundRect.top),
        Offset(foregroundRect.right, foregroundRect.top),
        trianglePos,
        triangleSize,
        isTriangle: drawTriangle,
        isArc: drawArc);

    if (drawBorder)
      _addArcPointToPath(
          foregroundRect,
          path,
          Offset(foregroundRect.right, foregroundRect.top),
          Offset(foregroundRect.right, foregroundRect.bottom),
          borderRadius);
    else
      path.lineTo(foregroundRect.right, foregroundRect.bottom);

    _addTrianglePointToPath(
        foregroundRect,
        path,
        Offset(foregroundRect.right, foregroundRect.bottom),
        Offset(foregroundRect.left, foregroundRect.bottom),
        trianglePos,
        triangleSize,
        isTriangle: drawTriangle,
        isArc: drawArc);

    if (drawBorder)
      _addArcPointToPath(
          foregroundRect,
          path,
          Offset(foregroundRect.left, foregroundRect.bottom),
          Offset(foregroundRect.left, foregroundRect.top),
          borderRadius);
    else
      path.lineTo(foregroundRect.left, foregroundRect.top);
  } else {
    if (drawBorder)
      _addArcPointToPath(
          foregroundRect,
          path,
          Offset(foregroundRect.left, foregroundRect.top),
          Offset(foregroundRect.right, foregroundRect.top),
          borderRadius);
    else
      path.lineTo(foregroundRect.right, foregroundRect.bottom);

    _addTrianglePointToPath(
        foregroundRect,
        path,
        Offset(foregroundRect.right, foregroundRect.top),
        Offset(foregroundRect.right, foregroundRect.bottom),
        trianglePos,
        triangleSize,
        isTriangle: drawTriangle,
        isArc: drawArc);

    if (drawBorder)
      _addArcPointToPath(
          foregroundRect,
          path,
          Offset(foregroundRect.right, foregroundRect.bottom),
          Offset(foregroundRect.left, foregroundRect.bottom),
          borderRadius);
    else
      path.lineTo(foregroundRect.left, foregroundRect.top);

    _addTrianglePointToPath(
        foregroundRect,
        path,
        Offset(foregroundRect.left, foregroundRect.bottom),
        Offset(foregroundRect.left, foregroundRect.top),
        trianglePos,
        triangleSize,
        isTriangle: drawTriangle,
        isArc: drawArc);
  }

  // canvas.drawShadow(path, Colors.grey, 2, true);

  // canvas.clipPath(path);

  return path;
}