drawPass method

void drawPass(
  1. Canvas canvas,
  2. Rect bounds,
  3. Paint layerPaint
)

Implementation

void drawPass(ui.Canvas canvas, Rect bounds, Paint layerPaint) {
  canvas.saveLayer(bounds, layerPaint);
  for (final drawable in drawables) {
    if (drawable is FlutterActorDrawable) {
      (drawable as FlutterActorDrawable).draw(canvas);
    }
  }

  for (final renderMask in renderMasks) {
    var mask = renderMask.mask;
    if (!mask.isActive) {
      continue;
    }

    var maskPaint = Paint();
    switch (mask.maskType) {
      case MaskType.invertedAlpha:
        maskPaint.colorFilter = const ui.ColorFilter.matrix(
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 255]);
        break;
      case MaskType.luminance:
        maskPaint.colorFilter = const ui.ColorFilter.matrix([
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0.33,
          0.59,
          0.11,
          0,
          0
        ]);
        break;
      case MaskType.invertedLuminance:
        maskPaint.colorFilter = const ui.ColorFilter.matrix([
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          -0.33,
          -0.59,
          -0.11,
          0,
          255
        ]);
        break;
      case MaskType.alpha:
      default:
        maskPaint.colorFilter = const ui.ColorFilter.matrix(
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
        break;
    }

    maskPaint.blendMode = BlendMode.dstIn;
    maskPaint.isAntiAlias = antialias;
    canvas.saveLayer(bounds, maskPaint);
    for (final drawable in renderMask.drawables) {
      bool wasHidden = drawable.isHidden;
      if (wasHidden) {
        drawable.isHidden = false;
      }
      (drawable as FlutterActorDrawable).draw(canvas);
      if (wasHidden) {
        drawable.isHidden = true;
      }
    }
    canvas.restore();
  }
}