mirror of
https://github.com/storytold/cadcraft.git
synced 2026-11-10 04:19:59 -06:00
* fix(ui): dash only the visible part of a highlight, so zooming far in doesn't freeze (#2299) With the pointer on an object, its rollover highlight is dashed, and draw_highlight dashed the object's whole outline in screen space, off-screen parts included: one shape per 10 points of it. Zoomed far in, a short line is billions of points long, so the app froze and then ran out of memory, which is the freeze and crash #2299 reports. Wheel-zooming a circle and two lines with the pointer on them reached 7.9 million shapes in one frame at a view height of 0.001 before a 1 GB allocation failed. The highlight now clips each outline to the view, plus a margin, in world coordinates first (precise when zoomed far in), and dashes only what is left. Each visible piece starts its dash pattern at its distance along the whole outline, so dashes don't crawl along a line that runs off screen while the view pans. The two dashed rectangles drawn in screen space, a layout's printable area and the crossing window, clip each edge to the painter's clip rect for the same reason. The same zoom now stays under 1,300 shapes per frame down to the zoom limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(ui): a clipped rectangle edge keeps its dashes where the whole edge puts them dashed_rect clipped each edge to the screen and then started its dashes at the clip boundary, so a printable area or crossing window running off screen had its dashes move with the view, and its bottom and left edges were drawn in reverse. Each edge now keeps its direction and its dashes start at their distance along the whole edge, as the highlight's outlines do. The zoomed-far-in app test also checks that the line really is hovered, so it can't pass with no highlight drawn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: austin62jake <340374338+austin62jake@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>