With Background Export on, an Export for Screens call that gives only an
`exportPreset` whose preset keeps a folder ran at once on the UI thread,
because the background route looked at the call's own `folder` only. It
now takes the preset's folder as well and writes in the background with
the progress dialog and Cancel, as an export into a folder it names.
When that folder is outside an MCP client's read roots, the prepared
export carries the folder's shown name, so the reply written later lists
the files relative to the folder with no ZIP `path`, a refused write names
the folder by its name, and the status bar does the same, as for an
export made at once.
The status of a preset-only export made at once named an empty folder
("Exported 1 file to "); it now names the preset's folder.
- `Session::screen_export_folder` returns the folder an export writes
into and its shown name when the reply leaves it out.
- `ScreenExport::write` applies the read-root rule decided when the
export was prepared.
- docs/mcp.md and docs/target-app-parity.md describe the change.
A selected image offers Remove Background in the Contextual Task Bar, Properties'
Quick Actions and the Control bar, as the reference app does. A click runs it at
once with its defaults, as one undo step; Object > Plug-ins > Image Tools keeps
the dialog with Preview.
Pinning a closed replaced spine opens it with a copy of its first point
at its end, so a two-point ring became three points and Delete Spine
Point could leave a spine of two points in one place. The two-point
check now counts the points left that are apart.
Pinning a closed spine from Replace Spine (a spine edit, Reverse Spine)
stored it closed with both end keys on its first point, so moving the
first key afterwards landed it on the last. Pinning now opens the spine
there as the layout of a moved key does.
A function an earlier run of a named engine defined was reported without
a line, column or file when it threw in a later run. The realm now gives
each source a tag that stays the same from run to run (Realm::error_tag,
Realm::script_tag), and no two sources share one once the tags run out.
Each named engine keeps the source maps of its runs' scripts, included
files and $.evalFile files, within 8 MiB, dropping the oldest first, and
an error in kept code is reported at that file, line and column. The
report's name and the console line keep the calling run's name. For an
earlier script given as source, file is that run's name.
Docs: docs/mcp.md (Script engines), script.run params text,
docs/target-app-parity.md.
The 3D and Materials row of docs/target-app-parity.md names Revolve
(Classic) with its options and surfaces among what ships, and its
evidence names the tests that cover it.
Vertical type lays its lines out in line space and turns them a quarter turn
into text space. Convert To Area Type built the frame from line-space line
edges mixed with text-space bounds, so vertical point type moved (a 12 pt line
at (295.44, 40) went to (320.8, 28)). Convert To Point Type placed the new
origin in line space, so vertical area type moved down its column.
Both conversions now work out the frame or origin in line space and map it
through the layout's line transform. Horizontal type is unchanged.
A tolerance outside 0.01 to 10 points, or one that is not finite, and a pen table of more than 255 colors are errors instead of being clamped or cut short. document.export already refuses both.
text.tabs.set takes a list of more than 256 stops when every paragraph it
targets already holds at least that many, so a paragraph loaded with more
stops can lose them one at a time (the Tabs panel's Delete Tab). Any
other list of more than 256 stops is still refused, counted as supplied
before stops at one position merge.
Docs: docs/mcp.md.