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