With Background Save and Background Export on, Package's OK on a dirty
document starts the package once the save's result arrives. That start
ran in background::after's callback, on the frame that applied the
save's result, so the worker took the frame's file access scope. The
desktop frame has no automation roots, so a package asked for by an
automation request confined to its roots could write outside them.
OK now captures the scope in force and starts the deferred package in
it, so the package is checked against the same roots as the save.
A new Type preference, Show samples on white (`fontSamplesOnWhite`, off
by default), draws each family's sample in every font menu, and in
Type → Font in the in-window menu bar, in the Light brightness's text
color on a white area, in every interface brightness. A row's white
area is drawn while its sample is still rendering, and leaves 2 pt above
and below it where a highlighted row's color shows. The family names and
the rest of the menu keep the interface's colors. Preferences dims the
checkbox while Enable in-menu font previews is off.
Docs: docs/mcp.md (prefs), docs/target-app-parity.md evidence line.
The Paragraph panel's Mojikumi Set lists None, YakumonoHankaku,
GyomatsuYakumonoHankaku, GyomatsuYakumonoZenkaku and YakumonoZenkaku,
then Line-end Punctuation Half Width, and text.setFormat {mojikumi}
takes yakumonoHankaku, gyomatsuYakumonoHankaku, gyomatsuYakumonoZenkaku
and yakumonoZenkaku besides none and lineEndHalf.
The spacing of each set is VectorCraft's own rule, built on the help
page's one-line description of each set:
- YakumonoHankaku sets every bracket, comma and full stop half width,
takes a quarter em off each side of a middle dot, and puts a quarter
em between Japanese and Latin letters or digits.
- GyomatsuYakumonoHankaku keeps punctuation full width inside a line,
sets an opening bracket starting a line flush and a closing mark
ending it half width, and takes the quarter em after a middle dot
ending a line off.
- GyomatsuYakumonoZenkaku keeps punctuation full width and adds the
quarter em between Japanese and Latin text.
- YakumonoZenkaku sets characters as None does.
Both composers and vertical type measure each line as it is set. A
right-to-left paragraph, whose line ends are measured untrimmed, also
draws them untrimmed, and a right-to-left line that ends between a
Japanese and a Latin character is measured without the quarter em the
set adds there. With a Desired glyph scaling other than 100%, the
space a set takes off before an opening bracket or middle dot, and the
Japanese-Latin space recorded at a line's end, scale with the glyph.
The sets save with the document and paragraph styles; new type and
Reset Panel keep Line-end Punctuation Half Width. SVG export lays type
with middle dots out again for its positioned spans. A .ai save
reports a paragraph with one of the new sets as left out.
Docs: docs/mcp.md, docs/target-app-parity.md, docs/type-parity.md,
docs/gaps.md.
The Layers panel's trash button, rows dropped on it, the panel menu's
Delete Selection, and Delete or Backspace on highlighted rows now run
ui.layerDelete. When a layer or sublayer among the rows holds art
(hidden, locked and nested objects count; guides do not), a confirm
dialog asks first. OK deletes the rows it asked about, by id, in the
document it was asked in, as one undo step; Cancel keeps them. Empty
layers, guide-only layers and object or group rows alone are deleted at
once. layer.delete itself is unchanged and never asks.
The dialog sized its scrolling content from the window's own available
height and an assumed footer height, so it opened short and only grew as
input events drew more frames. It now sizes the content the way
Paragraph Style Options does: from the screen's height less the rest of
the window as drawn last frame, capped at 420 points, with the scroll
area taking that height at once when the section is longer.
The stored content height is the height the scroll area shows after a
short section shrinks it, so going back from a short section to General
keeps OK and Cancel on a small screen.
Catalog rows now read `{{` and `}}` as a literal `{` and `}`, in the
English source and in the translation, as in a Rust format string. A `{`
with no `}` after it is literal text instead of dropping the row.
- The plugin.run errors for an importer, an exporter and a live effect
(`document.open {"importer": ...}` and the like) now show translated
with the plug-in's id and JSON kept, in the 22 catalogs that list them.
Their rows were keyed as `{{"importer"}"}}`, which never matched.
- The test that keys a format string keeps `{{`/`}}` and numbers only real
placeholders, so its expected keys match the runtime text. Two junk
rows it produced for the RTF error (hi, sv) are removed.
With Background Save on, Package's OK started the save of a dirty
document on the worker and then wrote the package whether or not that
save succeeded. With both preferences off, a failed save already stopped
the package, so the result depended on the preferences.
The package now starts only after the save is written, with both
preferences in every combination. With Background Export on, it is still
collected from the document as it was at OK and starts once the save's
result arrives; when the save fails, or asks a question first, no package
is written and the save's error stays in the status bar. With Background
Export off, the dialog shows the save's error.
background::after runs a step on the UI thread once a job's result is
applied.
The refusals of Extrude & Bevel, Revolve, Inflate, Rotate and their
Classic forms (art a 3D effect can't build a solid from, invalid
light, shadow, graphics and surface settings, and Expand as Wireframes
notes) now have an @msg row in every complete-message catalog, as do
the effect names and object kinds the messages name, so the status bar
shows them in the interface language. Parameter keys, numbers and
names keep their English form; command replies stay English.
A value a message quotes in "...", curly quotes or backticks, such as a
symbol's name, is shown as written instead of being looked up as a
message of its own.
File > Open and File > Place read QuickDraw pictures, versions 1 and 2,
from .pct, .pic and .pict files, with or without the file's 512 bytes
of application data; a version 2 picture also opens by its content.
The reader plays the opcodes of Apple's Opcodes in Pictures table on
the metafile player: lines, rectangles, rounded rectangles, ovals,
arcs, polygons and regions become paths, text becomes point type in
the font the picture names, bitmaps, pixel maps and QuickTime JPEG
images become images, and the clip region clips what follows it.
Place puts the picture in one group clipped to its frame. What isn't
read comes back as warnings, and a picture cut short keeps what came
before it. PICT is not written.
Images whose transform flattens them no longer leave their pixel data
in the document. Formats whose signature starts the file are detected
before PICT, which is known by bytes 522 or 10.
Docs: docs/mcp.md, docs/file-format-parity.md, docs/target-app-parity.md.
Version 4 marks sets with Select Object steps, so a build that reads
version 4 but has no select.storedPath accepted a Select Path set and
failed at the step during playback. Sets with Select Path steps now
save as version 5, Load Actions reads versions 1 to 5, and docs/mcp.md
and the file header say so.
A solid now shares its mapped graphics only with the run of solids just
before it that have the same opacity and blending mode. Before, it
joined any earlier solid with the same settings, so with members A, B
and C where A and C match, A's graphic was drawn after C and over B.
The Materials tab shows no artboard handles for graphics on a hidden
fill or stroke, which draws no solid and no graphics.
docs/three-d.md now says that pattern tiles in a graphic keep their own
colors instead of taking the face's light.
A drag with the right or middle button on a Layers row could move or
copy the row, and the same drag on a guide row, the selected-art
square, the eye or lock column or a target circle moved the guide or
the art, swept visibility or locks, or transferred the appearance.
Each of these drags now starts only with the primary button, as the
Artboards panel's row drag does, and the grab cursor follows the
primary button too. A right-click still opens the row's menu.
The new test drags each of the six sources with the secondary and the
middle button, checks that no drag payload is held and that nothing in
the document or its undo steps changes, then drags the same path with
the primary button to show the drop target takes it.
Follow-up to #6887.
- file.new installs the color profiles a New Document profile's file
carries when they are missing, as document.open does, so the new
document's assigned profile draws and a save embeds it. A color
profile that can't be used is listed in the result's `warnings` and
shown in the status bar.
- The new document's links find their files through relative paths
from the profile's file (`links_from`), as
edit.newDocumentFromState sets it.
- When the read roots leave out the profiles folder, profileError's
reason no longer names the folder's path.
The release frame's shortcuts run before the bar is drawn, with the
button already up, so they missed the drag and the Escape also reached
the active tool. The drag now counts as going on in that frame too.