paintMesh function

void paintMesh(
  1. Canvas canvas,
  2. Size size,
  3. BackgroundSpec spec,
  4. double seconds, {
  5. required Shader shaderFor(
    1. int argb
    ),
})

Paints spec's mesh on canvas at drift time seconds; shaderFor returns the (cached) unit shader of a blob colour.

Implementation

void paintMesh(
  Canvas canvas,
  Size size,
  BackgroundSpec spec,
  double seconds, {
  required ui.Shader Function(int argb) shaderFor,
}) {
  final rect = Offset.zero & size;
  final colors = spec.colors;
  canvas.drawRect(
    rect,
    Paint()..color = Color(colors.isEmpty ? 0xFF000000 : colors.first),
  );
  if (colors.length < 2) return;
  final blobs = meshBlobs(spec, size, seconds);
  final paint = Paint();
  canvas
    ..save()
    ..clipRect(rect);
  for (var i = 0; i < blobs.length; i++) {
    final blob = blobs[i];
    paint.shader = shaderFor(colors[i + 1] | 0xFF000000);
    canvas
      ..save()
      ..translate(blob.center.dx, blob.center.dy)
      ..scale(blob.radius)
      ..drawRect(const Rect.fromLTRB(-1, -1, 1, 1), paint)
      ..restore();
  }
  canvas.restore();
}