Canvas clicks now reach the panel UiHost so buttons, tabs, and slots
respond to user interaction. Previously only UiRoot.Pick (inspector
selection) received click events; the panel itself was inert.
Key changes:
- StudioInspector.DrawCanvas now returns a CanvasInputEvent struct
(was nullable click tuple) — carries isHovered, move position,
leftDown/Up, and scroll delta, all in panel-local pixels.
- Coordinate mapping: panel_local = mouse_screen - GetItemRectMin()
(1:1, no scale factor). V-flip (uv0.Y=1, uv1.Y=0) makes screen
top = panel Y=0, so NO extra Y inversion. Documented in comments.
- StudioWindow.OnLoad: removed WireMouse — raw Silk window coords are
offset by the canvas sub-window position and land in the wrong place.
WireKeyboard kept (keyboard input needs no spatial remapping).
- StudioWindow.OnRender: forwards OnMouseMove always (hover states),
plus OnMouseDown/Up/OnScroll in Interact mode. Console.WriteLine
on each forwarded left-click for live verification.
- Interact/Inspect toggle: checkbox in the Studio toolbar (default
Interact). Inspect mode restores old click-to-select-element behavior
while still forwarding OnMouseMove for hover states.
- CanvasCoordMappingTests: 7 pure-math unit tests covering the
origin, interior points, corner, chrome OOB, and the no-extra-flip
invariant (no GL required).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>