getClip method
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();
switch (transitionType) {
case TransitionType.LEFT_TO_RIGHT:
path.lineTo(size.width * clipFactor, 0.0);
path.lineTo(size.width * clipFactor, size.height);
path.lineTo(0.0, size.height);
break;
case TransitionType.RIGHT_TO_LEFT:
path.moveTo(size.width, 0.0);
path.lineTo(size.width * clipFactor, 0.0);
path.lineTo(size.width * clipFactor, size.height);
path.lineTo(size.width, size.height);
break;
case TransitionType.TOP_TO_BOTTOM:
path.lineTo(0.0, size.height * clipFactor);
path.lineTo(size.width, size.height * clipFactor);
path.lineTo(size.width, 0.0);
break;
case TransitionType.BOTTOM_TO_TOP:
path.moveTo(0.0, size.height);
path.lineTo(0.0, size.height * clipFactor);
path.lineTo(size.width, size.height * clipFactor);
path.lineTo(size.width, size.height);
break;
case TransitionType.CENTER_LR_IN:
path.moveTo(size.width / 2 * clipFactor, 0);
path.lineTo(0, 0);
path.lineTo(0, size.height);
path.lineTo(size.width, size.height);
path.lineTo(size.width, 0);
path.lineTo(size.width - (size.width / 2 * clipFactor), 0);
path.lineTo(size.width - (size.width / 2 * clipFactor), size.height);
path.lineTo(size.width / 2 * clipFactor, size.height);
break;
case TransitionType.CENTER_TB_IN:
path.moveTo(0, size.height / 2 * clipFactor);
path.lineTo(0, 0);
path.lineTo(size.width, 0);
path.lineTo(size.width, size.height / 2 * clipFactor);
path.lineTo(0, size.height / 2 * clipFactor);
path.lineTo(0, size.height);
path.lineTo(size.width, size.height);
path.lineTo(size.width, size.height - (size.height / 2 * clipFactor));
path.lineTo(0, size.height - (size.height / 2 * clipFactor));
break;
case TransitionType.CENTER_LR_OUT:
var halfWidth = size.width / 2;
var clipFactorWidth = halfWidth * clipFactor;
path.moveTo(halfWidth, 0.0);
path.lineTo(halfWidth - clipFactorWidth, 0);
path.lineTo(halfWidth - clipFactorWidth, size.height);
path.lineTo(halfWidth + clipFactorWidth, size.height);
path.lineTo(halfWidth + clipFactorWidth, 0);
break;
case TransitionType.CENTER_TB_OUT:
var halfHeight = size.height / 2;
var clipFactorHeight = halfHeight * clipFactor;
path.moveTo(0.0, halfHeight);
path.lineTo(0, halfHeight - clipFactorHeight);
path.lineTo(size.width, halfHeight - clipFactorHeight);
path.lineTo(size.width, halfHeight + clipFactorHeight);
path.lineTo(0.0, halfHeight + clipFactorHeight);
break;
case TransitionType.LEFT_TOP_ROUNDER:
path.addOval(Rect.fromCircle(
center: Offset(0, 0),
radius:
(sqrt((size.width * size.width) + (size.height * size.height)) *
clipFactor)));
break;
case TransitionType.LEFT_BOTTOM_ROUNDER:
path.addOval(Rect.fromCircle(
center: Offset(0, size.height),
radius:
(sqrt((size.width * size.width) + (size.height * size.height)) *
clipFactor)));
break;
case TransitionType.LEFT_CENTER_ROUNDER:
path.addOval(Rect.fromCircle(
center: Offset(0, size.height / 2),
radius:
(sqrt((size.width * size.width) + (size.height * size.height)) *
clipFactor)));
break;
case TransitionType.RIGHT_BOTTOM_ROUNDER:
path.addOval(Rect.fromCircle(
center: Offset(size.width, size.height),
radius:
(sqrt((size.width * size.width) + (size.height * size.height)) *
clipFactor)));
break;
case TransitionType.RIGHT_TOP_ROUNDER:
path.addOval(Rect.fromCircle(
center: Offset(size.width, 0),
radius:
(sqrt((size.width * size.width) + (size.height * size.height)) *
clipFactor)));
break;
case TransitionType.RIGHT_CENTER_ROUNDER:
path.addOval(Rect.fromCircle(
center: Offset(size.width, size.height / 2),
radius:
(sqrt((size.width * size.width) + (size.height * size.height)) *
clipFactor)));
break;
case TransitionType.TOP_CENTER_ROUNDER:
path.addOval(Rect.fromCircle(
center: Offset(size.width / 2, 0),
radius:
(sqrt((size.width * size.width) + (size.height * size.height)) *
clipFactor)));
break;
case TransitionType.BOTTOM_CENTER_ROUNDER:
path.addOval(Rect.fromCircle(
center: Offset(size.width / 2, size.height),
radius:
(sqrt((size.width * size.width) + (size.height * size.height)) *
clipFactor)));
break;
case TransitionType.CENTER_ROUNDER:
path.addOval(Rect.fromCircle(
center: Offset(size.width / 2, size.height / 2),
radius:
(sqrt((size.width * size.width) + (size.height * size.height)) *
clipFactor)));
break;
}
path.close();
return path;
}