rect method
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,
);
}