limit() replaced each too-deep container by its children with
Vec::splice in the middle of the sibling list, moving every later
sibling each time: a wide list of such containers took quadratic time
to load. The list is now rebuilt in order from a worklist, so each node
moves a bounded number of times.
With Envelope Options > Distort Appearance on, a path whose Transform
effect has Scale Strokes & Effects or Transform Patterns on, or copies it
with a gradient, was baked with the effect as geometry only: every copy
kept the original's stroke weight, dashes and pattern placement before
the envelope bent it. bake_appearance now makes such a path into the
per-copy art that drawing, export and Expand Appearance already use, and
bakes each copy's strokes into filled outlines from there.
The menu bar takes ⌘V's key-down as Edit › Paste's key equivalent, and
`native_menu::key_events` turns it back into egui input. With text on the
clipboard that was a Paste event; with only a picture (a screenshot) it
was nothing, leaving the paste to the window's own key-up. egui's window
integration only releases a key whose press it saw, so that release never
came and ⌘V pasted nothing, while Edit › Paste and ⌘V with the menu open
worked.
`key_events` now ends ⌘V with the key's release, as it already did for
⌘X and ⌘C: without a Paste event that release is the picture paste
`PasteChord` looks for, and after one it ends that paste so the next
picture paste still fires.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The geometry effects after a fill's or stroke's own Transform effect with
Scale Strokes & Effects or Transform Patterns now take the bounds of the
transformed path and all its copies as their reference box, as an
object's own effects do. A later Rotate turns the copies about their
combined center instead of turning each copy about its own, and a later
Offset Path or plain Transform applies to the paths themselves. Each copy
keeps its own scaled distances.
Part of #885
transform_item_leaf now holds back the leaf's geometry for each plain or transformed piece that follows a transformed fill or stroke, so the copies of an earlier item no longer use up the budget that a later fill or stroke still needs. The nested pass over a transformed piece keeps to the same reduced limit.
Each fill or stroke without such a Transform effect is drawn on the object's geometry again, so its cost now counts toward the budget that limits the Transform effect's copies. The object's own geometry is no longer counted a second time next to the pieces that replace it. The Transform effect options entry in docs/target-app-parity.md links the current help pages.
Part of #885
A Transform effect in a fill's or stroke's own effect list now applies its
Scale Strokes & Effects and Transform Patterns options as the same effect on
the object does: the stroke's weight and dashes, the distances of the fill's
or stroke's later effects and its pattern follow the transformation, each
copy once more than the last, and with Transform Objects off the geometry
stays and the options apply once. The fill or stroke becomes an object of
its own in the art the canvas, export and Expand Appearance draw, and Use
Preview Bounds measures that art too (also for the object-level options).
Part of #885
The type objects in the selection are deduplicated with a set, each frame's
thread is looked up in a map built once, the locked artboards are measured
once per call, and the menu check stops at the first selected type object.
Type selected by id on a hidden, locked or template layer, or outside
the isolated group, no longer counts as selected type: the command stays
off and does not select that frame's thread. The check reads the
object's ancestry, so the Select menu does not walk the whole document.
Select › Same › Link Block Series no longer counts hidden or locked type
inside a selected group, or type inside a hidden or locked object there,
as selected. A group that holds only such type leaves the command off, and
the command does not select the other frames of that type's thread.
Select › Same › Link Block Series (select.same.linkBlockSeries) selects every
frame of the threads that the selected type objects, and the type inside
selected groups, are in, in thread order. Type in no thread selects itself,
other selected objects are left out, and with frames of several threads
selected it selects all of them. Hidden, locked and out-of-isolation frames
are left out, Reselect repeats it, and it records no undo step. The item is
off while no type is selected.
Menu row in every catalog, docs/mcp.md and a docs/target-app-parity.md line.
File > Open and File > Place read BMP files named .dib or .rle (run-length
encoded bitmaps included), Photoshop files named .pdd and PNG files named
.pns, in any letter case. The Open and Place dialogs list them in "All
readable files", "All placeable files" and their format's own filter, and
Glass's Load Texture lists them too. Linked files with these names update
and relink, the Links panel shows their format, and Edit Original opens
them.
The extensions are read-only: exports still write .bmp, .psd and .png, and
an export to a path with one of the new extensions is refused as before.
The desktop packaging does not associate them with the app.