A style written as one paint (`/SimpleStyle` with its paint operators)
was read as a style with no fill and no stroke. A graphic style library
listed it, and applying it cleared the object's fill and stroke.
Such a style now reads as the fill and stroke its `stroke fill Xd`
turns on, with the stroke's width, caps, joins, miter limit and dashes,
and its `Xy` transparency. A style whose paint is not read here (a
gradient or pattern fill, a pattern stroke, no `Xd`) is left out of the
library instead of coming in empty.
Part of #3349.
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.
Enable Rubber Band now hides only the preview segment in the Pen, the
Curvature tool and the Smart Pen. With it off and Measurement Labels on,
the three tools still show the D / Angle / dX / dY readout at the pointer
while a path is drawn, and the Curvature tool also shows it when
going on from the current end of a selected path. With Measurement Labels
off, no readout shows either way. The click places the same anchor as
before.
Docs: docs/mcp.md (penRubberBand, curvatureRubberBand), docs/ui-parity.md,
docs/target-app-parity.md.
effect.apply, appearance.addEffect and effect.setParams checked an effect
parameter's type only when the effect has a dialog default for the key. Keys
that only the params text names were stored as given: an Outline Stroke with
`width: "10 pt"` drew at the stroke's own weight, and a Gaussian Blur with
`linear: 1` blurred in linear light.
- The earlier 3D `perspective`, `lightAzimuth` and `lightElevation`,
Scribble's `variation` and Outline Stroke's `width` must be numbers, and
Gaussian Blur's `linear` must be true or false. A test walks every effect
so a new key without a default needs a listed type or a check of its own.
- The `style` of Crop Marks must be `roman` or `japanese`, and `null` is
refused. Any other value drew as Roman.
- An installed plug-in effect's parameters are checked against its manifest
when the command runs, as plugin.run already checks the effect records a
filter returns.
- effect.setParams with `warpStyle` checks the parameters against the new
Warp style's effect, as it already did for a 3D effect's new
`threeDType`. It checked them against the old style.
- effect.setParams refuses a `visible` that is not true or false, such as
`1` or `"false"`, when called and when a step plays, and nothing changes.
Before, the value was ignored and the rest of the call applied. `null`
still leaves the visibility as it is.
A step of command.batch is refused the same way. A replayed journal or
action still plays a wrongly typed effect parameter, as it plays a key the
effect no longer takes.
Docs: docs/mcp.md, docs/target-app-parity.md.
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.
A parameter schema's error ("`zoom` must be a number > 0, not -1") was
translated around its requirement, which stayed in English in every
language: only "a number", "a string" and "true or false" had rows.
- Every complete catalog gets a row for each requirement a schema
writes: a number with each kind of range and with a unit, an integer
and its range, a list of names, an object id, a list of object ids,
a color, a point, an object and a list. The bounds, unit and names
stay as the English gives them.
- An enum error no longer matches the `{key}` must be one of {_1} row,
which took `"a", "b", not "c"` as its list and left ", not ..." in
English: a `{path}` must be one of {_1}, not {got} row translates it,
in the complete catalogs and in Bulgarian, Bosnian, Danish,
Indonesian and Dutch.
- A part of a message that starts with `{` or `[` is translated only
when it is an exact message, so "[x, y] (two numbers)" translates and
JSON values, shown cut short or whole, stay as they are.
Docs: docs/mcp.md (Parameter schemas), docs/target-app-parity.md.
With Smart Guides on, a selection moved with the Selection tool, Direct
Selection or a shape tool reached a ruler guide only within the Snap to
Point distance (2 px), while drawn points and bounding-box handles reach
it within the Snapping Tolerance (4 px). The move now uses the Snapping
Tolerance for the grabbed point and the edges, with and without Shift.
With Smart Guides off, Snap to Point keeps its own distance.
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.
The characters of an inline graphic draw no glyph, so their fill and
stroke paint only their underline and strikethrough (not on a path or in
vertical type) and the ruby readings that layout draws with them (a
reading takes the paint of the first base character on its line, and
type on a path has no ruby). Without one, their pattern no longer counts
as painted for Find, selection-only Change and Print.
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 colorized image whose linked file is missing shows the placeholder
preview, whose pixels are not grayscale. paint.setFill skipped such an
image and added a fill item instead, while the Fill proxy showed the
image's colorize color. A solid color now replaces the colorize color.
While that color is a spot color, black or white, a process color is
refused, since the relinked pixels may have an alpha channel.
A print to a file and the print preview list their notes as saves and
exports do since #6920: what the job leaves out of the document or prints
differently first (art outside the imageable area, type in a fallback
font, transparency flattened for PostScript), then the notes on the
options (halftone screens and a fixed flatness that aren't written, copies
per sheet that don't fit, a printer profile left out, ink options that
name no ink). Each kind keeps the order it is given in.
The print layout, the PDF print and the PDF print plan return the notes
on the options in `setting_notes` beside `warnings`, as `ExportReport`
does. The status message after a print to a file names the first note,
so a fixed flatness no longer hides type printed in a fallback font.
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.
Space held while dragging out a new anchor already moved it, handles and
all, but the closing drag skipped it, so the closing anchor could not be
repositioned. The closing drag now moves the first anchor by as far as the
pointer moves while Space is held, its handles with it, and the drag
shapes the handles round the new place once Space is released.
path.close takes `at: [x, y]`, which moves the first anchor, its handles
with it, before `in` and `out` are placed. docs/mcp.md and the Pen line
in docs/target-app-parity.md describe it.