effectsReach function

double effectsReach(
  1. Iterable<Effect> effects, {
  2. bool spread = true,
})

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;
}