merge method
This, with fx on top — how an animated frame is built. Every
generated override narrows the return to its own type, so the whole
render path stays typed.
Implementation
@override
PointerArgs merge(SceneArgs fx) => PointerArgs(
ink: fx.color('ink') ?? ink,
paper: fx.color('paper') ?? paper,
size: fx.number('size') ?? size,
ripple: fx.flag('ripple') ?? ripple,
);