rect method

Rect rect(
  1. Size canvasSize
)

Implementation

Rect rect(Size canvasSize) {
  final effectiveHoleOffset = Offset(
    offset.dx.clamp(0, canvasSize.width),
    offset.dy.clamp(0, canvasSize.height),
  );

  final effectiveHoleSize = Size(
    size.width.clamp(0, canvasSize.width - effectiveHoleOffset.dx),
    size.height.clamp(0, canvasSize.height - effectiveHoleOffset.dy),
  );

  bool isEmpty(EdgeInsets? padding) {
    if (padding == null) {
      return true;
    }
    return padding.left == 0 &&
        padding.top == 0 &&
        padding.right == 0 &&
        padding.bottom == 0;
  }

  if (padding == null || isEmpty(padding)) {
    return Rect.fromLTWH(
      effectiveHoleOffset.dx,
      effectiveHoleOffset.dy,
      effectiveHoleSize.width,
      effectiveHoleSize.height,
    );
  }

  final paddedLeft = effectiveHoleOffset.dx - padding!.left;
  final paddedTop = effectiveHoleOffset.dy - padding!.top;
  final paddedRight =
      effectiveHoleOffset.dx + effectiveHoleSize.width + padding!.right;
  final paddedBottom =
      effectiveHoleOffset.dy + effectiveHoleSize.height + padding!.bottom;

  final finalLeft = paddedLeft.clamp(0.0, canvasSize.width);
  final finalTop = paddedTop.clamp(0.0, canvasSize.height);
  final finalRight = paddedRight.clamp(0.0, canvasSize.width);
  final finalBottom = paddedBottom.clamp(0.0, canvasSize.height);

  return Rect.fromLTRB(
    finalLeft,
    finalTop,
    finalRight,
    finalBottom,
  );
}