RRect lerp(RRect a, RRect b, double t)

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) {
    final 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)
  ]);
}