Control bar: idle frames read the selected object without copying it

The Control bar and the contextual task bar copied the first selected
object every frame (the task bar twice), which on a path of 200,000
anchors costs about 1.4 ms per copy. Both bars now borrow it; the task
bar copies it only when it is a basic shape, for Shape Properties.

With one selected open path of 200,000 anchors, an idle frame with both
bars shown takes 3.8 ms instead of 8.0 ms in a release build.
This commit is contained in:
dotCooCoo
2026-11-05 10:54:45 +07:00
committed by bflatastic
parent ba3e4a9da2
commit 3f12cfdbbf
4 changed files with 39 additions and 11 deletions
+2
View File
@@ -1314,6 +1314,8 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur
- **Live objects in documents with many symbols:** a live object, or an object with effects, that shows symbols or patterns is not walked again in a later frame to find them while the document's symbols and patterns stay the same. One that shows a placed file is walked in every frame. At 1000 × 1000 pixels, a page of 2,000 envelopes around instances of the last 2,000 of 10,000 symbols takes 30 ms a frame, and 83 ms when every frame walks them again, with the same pixels.
- **Control bar and task bar on large paths:** the Control bar and the contextual task bar read the first selected object in place each frame instead of copying it; the task bar copies the object only when it is a basic shape, for its Shape Properties. With one selected open path of 200,000 anchors, an idle frame with both bars shown takes 3.8 ms in a release build instead of 8.0 ms (medians of five interleaved runs). Test: `the_control_bar_label_follows_edits_undo_documents_and_selection`.
- **Type drawn as glyph outlines:** under a geometry effect, in EMF and WMF export, in DXF export when it is written as outlines, flattened with Convert All Text to Outlines, and inside an envelope, type keeps its underline and strikethrough, the weight and dashes of its character strokes when it is scaled, and the placement of its gradients and patterns, as the canvas draws it. A group's or layer's own fills and strokes also paint the underline and strikethrough of the type in it.
- **Texture redraws (#1257):** Craquelure, Mosaic Tiles and Stained Glass compare squared distances when finding their nearest cells; rounding/tie boundaries use the original distance ordering. Brute-force candidate tests and three 1800×1500 viewport comparisons preserve the old pixels. A CMYK rectangle move at 190.07%/DPI 1.5 is reproducible with `cargo test -p vectorcraft-render texture_drag_perf -- --ignored --nocapture`; idle-machine Windows interaction is still unverified.