Walk affordances for a world-space hit, topmost first.
Across affordances: order mirrors paint. Affordances are drawn first →
last (bottom → top), so the walk runs last → first and stops at the first
one that claims the point. Layering wins outright — a nearer region on a
lower affordance does not beat a farther one on top of it.
Within an affordance: the nearest hit region wins, ties going to the
later-declared one. Both hit-testers this replaced took the first region
they found instead, in opposite orders, which is only invisible while
regions don't overlap. They do: the four corner handles of a selection
smaller than the hit radius all contain the same click, and "first in the
table" silently answered top-left (or bottom-right) no matter which handle
the pointer was actually on.
isVisible (when supplied) gates by the same chrome id used at paint time,
so chrome that isn't drawn can't be hit either.
Walk affordances for a world-space hit, topmost first.
Across affordances: order mirrors paint. Affordances are drawn first → last (bottom → top), so the walk runs last → first and stops at the first one that claims the point. Layering wins outright — a nearer region on a lower affordance does not beat a farther one on top of it.
Within an affordance: the nearest hit region wins, ties going to the later-declared one. Both hit-testers this replaced took the first region they found instead, in opposite orders, which is only invisible while regions don't overlap. They do: the four corner handles of a selection smaller than the hit radius all contain the same click, and "first in the table" silently answered top-left (or bottom-right) no matter which handle the pointer was actually on.
isVisible(when supplied) gates by the same chrome id used at paint time, so chrome that isn't drawn can't be hit either.