Linearly interpolate between two rounded rectangles.
If either is null, this function substitutes RRect.zero instead.
Source
static RRect lerp(RRect a, RRect b, double t) {
if (a == null && b == null)
return null;
if (a == null) {
return new RRect._fromList(<double>[
b.left * t,
b.top * t,
b.right * t,
b.bottom * t,
b.tlRadiusX * t,
b.tlRadiusY * t,
b.trRadiusX * t,
b.trRadiusY * t,
b.brRadiusX * t,
b.brRadiusY * t,
b.blRadiusX * t,
b.blRadiusY * t
]);
}
if (b == null) {
double k = 1.0 - t;
return new RRect._fromList(<double>[
a.left * k,
a.top * k,
a.right * k,
a.bottom * k,
a.tlRadiusX * k,
a.tlRadiusY * k,
a.trRadiusX * k,
a.trRadiusY * k,
a.brRadiusX * k,
a.brRadiusY * k,
a.blRadiusX * k,
a.blRadiusY * k
]);
}
return new RRect._fromList(<double>[
lerpDouble(a.left, b.left, t),
lerpDouble(a.top, b.top, t),
lerpDouble(a.right, b.right, t),
lerpDouble(a.bottom, b.bottom, t),
lerpDouble(a.tlRadiusX, b.tlRadiusX, t),
lerpDouble(a.tlRadiusY, b.tlRadiusY, t),
lerpDouble(a.trRadiusX, b.trRadiusX, t),
lerpDouble(a.trRadiusY, b.trRadiusY, t),
lerpDouble(a.brRadiusX, b.brRadiusX, t),
lerpDouble(a.brRadiusY, b.brRadiusY, t),
lerpDouble(a.blRadiusX, b.blRadiusX, t),
lerpDouble(a.blRadiusY, b.blRadiusY, t)
]);
}