effectsReach function
How far past the silhouette effects can paint together: the farthest shadow, with each shape shadow's spread
unless spread is false, then blurred further by the layer blurs.
Implementation
double effectsReach(Iterable<Effect> effects, {bool spread = true}) {
double shadows = 0;
double blurs = 0;
for (final Effect e in effects) {
switch (e) {
case ShadowEffect():
final double r = effectReach(e, spread: spread && e is ShapeShadow ? e.spread : 0);
if (r > shadows) shadows = r;
case LayerBlur():
blurs += effectReach(e);
}
}
return shadows + blurs;
}