mirror of
https://github.com/storytold/cadcraft.git
synced 2026-10-24 10:56:51 -06:00
* fix(canvas): keep the OS cursor visible over menus and panels (fixes #1701) The drawing area hid the OS cursor with `CursorIcon::None` whenever the canvas response was hovered and the pointer lay inside the canvas rect. egui still reports the canvas as hovered when the pointer is over a menu popup's frame (the padding between its items and its border, and its separators): only widgets claim the hover, so an open menu drawn over the drawing left the canvas "hovered" and the cursor invisible there. The same happened over a dialog's padding or a floating palette over the canvas. Require the topmost layer under the pointer to be the canvas's own layer before treating the pointer as inside the drawing. Then menus, tooltips, dialogs and floating panels keep a visible cursor (and the crosshair stops under them, as over the menu bar already). Tests: `crates/ui-egui/tests/cursor_over_menus.rs` (headless egui_kittest) pins the canvas hiding the cursor, the menu bar and docked palettes keeping it, the Show System Cursor option restoring the arrow off the canvas, and the frame of an open menu over the drawing keeping the cursor: the last case failed before this change. The whole `cadcraft-ui-egui` test suite passes. * docs: document the functions touched by #1701 * fix(canvas): keep the OS cursor visible over canvas-painted menus Selection cycling's rows and Dynamic Input's options rows are menus, but the canvas paints them itself: they share the canvas's layer, so `layer_id_at` still reports the drawing and the OS cursor was hidden over them (the review of #1701 caught it). Exclude their rectangles from the crosshair's cursor contract, leaving the canvas's input and the Dynamic Input tooltip under the pointer untouched (so the list keeps highlighting and a click still picks its row). Tests: two cases in `crates/ui-egui/tests/cursor_over_menus.rs` hover a selection cycling row and a Dynamic Input options row and assert the OS cursor stays visible; the drawing beside the list still hides it. Both failed before this change. * The painted menu frame counts as over the menu (CodeRabbit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cargo fmt Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Brandon Thomas <echelon@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>