Expand description
HsvCanvas — 2D saturation × value picker rendered as three stacked
gradients.
Layer 1: solid fill with the current hue at full saturation + full value. Layer 2: white→transparent linear gradient left→right (saturation axis). Layer 3: transparent→black linear gradient top→bottom (value axis, inverted so the top of the canvas is the bright end). The three layers composite under standard SrcOver blending to form the HSV picker’s familiar square gradient.
The current selection is shown as a double-ring indicator (white outer, dark inner) so it stays visible against any underlying color combination.
§Accessibility
The canvas is fundamentally a 2D pointer gesture with no ARIA
precedent. Screen-reader users navigate the picker via the hue /
saturation / value sliders or RGB / HSV / hex spinners — the
containing ColorPicker excludes this widget’s descendants from the
AT tree via .access_subtree(AccessSubtreeMode::Exclude) (it has
none). The widget’s own node still emits normally: a named
Role::Group carrying the saturation/brightness value as text plus
four custom actions (one per CanvasStep), so the control stays
reachable and drivable by assistive technology rather than being a
placeholder the walker prunes.