buildClip method

  1. @override
Rect buildClip()

Builds the clip to apply to the child.

This method is called lazily during painting or hit testing. The result is cached until the next time the render object is laid out or markNeedsClip is called.

Implementation

@override
Rect buildClip() {
  final Rect maxPaintRect = getMaxPaintRect();
  Rect newClip = clipper?.getClip(maxPaintRect.size).shift(maxPaintRect.topLeft) ?? maxPaintRect;

  Rect copyNewClipWith({double? left, double? top, double? right, double? bottom}) =>
      Rect.fromLTRB(
        left ?? newClip.left,
        top ?? newClip.top,
        right ?? newClip.right,
        bottom ?? newClip.bottom,
      );

  if (clipOverlap != ClipOverlapBehavior.none) {
    final double clipExtent = switch (constraints.axis) {
      Axis.horizontal => newClip.width,
      Axis.vertical => newClip.height,
    };

    final double clipOrigin = getClipOriginForOverlap(clipExtent);
    newClip = switch (applyGrowthDirectionToAxisDirection(
      constraints.axisDirection,
      constraints.growthDirection,
    )) {
      AxisDirection.down => copyNewClipWith(top: math.max(newClip.top, clipOrigin)),
      AxisDirection.up => copyNewClipWith(
        bottom: math.min(newClip.bottom, geometry!.paintExtent - clipOrigin),
      ),
      AxisDirection.right => copyNewClipWith(left: math.max(newClip.left, clipOrigin)),
      AxisDirection.left => copyNewClipWith(
        right: math.min(newClip.right, geometry!.paintExtent - clipOrigin),
      ),
    };
  }
  return newClip;
}