drawPass method
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();
}
}