def clip.block
gralha-svg-render@0.1.0.1 · svg.bend:5239
import gralha-svg-render@0.1.0.1/svg.bend as Svg
import Base
import gralha-text-scan@0.1.0.1/scan.bend as U
5239def clip.block(c: Clip, +x0: U32, +y0: U32, +x1: U32, +y1: U32) -> F32:
5240 match c:
5241 case ClipAll{}: 1.0
5242 case ClipShape{es, inv, even, cover}:
5243 +cov = cover
5244 cover.block.if(cover.present(cov), cov, x0, y0, x1, y1)
5245 case ClipUnion{a, b}:
5246 +u = clip.block(a, x0, y0, x1, y1)
5247 +v = clip.block(b, x0, y0, x1, y1)
5248 U.choose(F32, F32.is_lt(u, 0.0) || F32.is_lt(v, 0.0), F32.neg(1.0), (u + v - u * v : F32))
5249 case ClipIntersect{a, b}:
5250 +u = clip.block(a, x0, y0, x1, y1)
5251 +v = clip.block(b, x0, y0, x1, y1)
5252 U.choose(F32, F32.is_lt(u, 0.0) || F32.is_lt(v, 0.0), F32.neg(1.0), (u * v : F32))