core::mask
Structs
Mask
Clips its first child using its second child subtree, which is not rendered as
visible content. By default, this is a geometric coverage mask. Set alpha=true
to use painted alpha instead, and feather to soften its edge:
<Mask width=100% height=100% alpha=true feather=12.0>
<Rectangle width=100% height=100% fill=#FF0088/>
<Ellipse x=50% y=50% anchor=50% width=240px height=240px
fill=TRANSPARENT stroke={color: WHITE, width: 40px}/>
</Mask>
The example reveals pink only underneath the soft ring. feather is Gaussian
standard deviation in logical pixels, independent of display pixel density;
zero disables feathering. Both properties default to zero/false, preserving
existing coverage-mask behavior.
Alpha sources support Rectangle, Ellipse, and Path fills and strokes,
including source-relative opacity, transforms, and linear/radial gradient alpha
(up to eight ordered stops). Source RGB does not matter. Grouping and keyed
for loops combine paints using source-over alpha: overlapping half-opacity
sources yield 75% coverage, not XOR. Nested alpha masks on content multiply;
ordinary geometric clips continue to intersect them. An empty alpha source
hides all content. Cached surface-sized GPU textures are reused until paint,
feather, enclosing alpha, or surface dimensions change.
Current boundary: WGPU canvas rendering, verified on web. Native controls and
the legacy Piet renderer do not support alpha masks. Source-side Frame/Mask
clipping, images, text, and native elements are not alpha sources; use vector
leaves inside Group/repeat containers. Alpha masks modulate canvas draw alpha,
not an isolated offscreen group, and do not change hit testing. Keep interactive
hit targets separate from purely visual alpha reveals.
Properties
alpha
Type: Property<bool>
Use painted alpha instead of geometric coverage.
feather
Type: Property<f64>
Gaussian feather standard deviation, in logical pixels, for alpha masks.