mirror of
https://github.com/storytold/cadcraft.git
synced 2026-10-14 14:26:45 -04:00
* Zoom and pan regenerate in the background instead of freezing the window A rebuild that only the view asks for (a new 2x zoom band, a pan out of the built area) now runs on a worker thread while the canvas keeps drawing the previous display list, scaled by the view uniform. The worker builds the list, converts it to vertex data and creates the GPU buffers, so the frame that swaps it in only swaps buffers. One build runs at a time; a result from an older drawing revision is dropped. Edits, the first build and the web build (no threads) still rebuild synchronously. ZOOM no longer calls touch(): it changes the view, not the drawing, and the bumped revision made every typed zoom a full blocking rebuild (wheel zoom never did). REGEN, REGENALL and layout switches still touch. ui.screenshot waits (up to 6 s) for a background rebuild so agents capture the new view; ui.inspect perf reports "building". On a hatched 12k-entity DWG (~340k primitives) the longest UI stall per zoom went from 2-4.5 s to 26-64 ms. Also: cargo fmt of a comment in engine/src/prompt.rs that was failing the fmt gate on main. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Cancel a background rebuild when the view moves on A view that needs a different display list now cancels the build in flight and starts one for itself, instead of waiting for the outdated build to land and only then starting the next. A long scroll through many zoom bands builds only for where it stops: the list lands about one build after the last step (2.0-2.3 s on a hatched 12k-entity DWG) instead of up to two, and an outdated build no longer keeps a core busy. cadcraft_render::Options gains `cancel` (an Arc<AtomicBool>); a set flag stops the build at the next entity (block contents included) and the hatch sweep at its next pattern line, returning a partial list the caller discards. The canvas's Job sets its flag when dropped, so replacing or dropping a job cancels it; a cancelled worker sends nothing. Co-Authored-By: Claude Opus 5.5 <[email protected]> * cargo fmt: crates/doc/src/dynblock.rs (fails the fmt gate on main) Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: Brandon Thomas <[email protected]>