A process color can't colorize a grayscale image that has an alpha channel,
and paint.setFill refuses that combination. Remove Background gave such an
image an alpha channel and kept its process colorize color. It now refuses
the run, changing nothing, when an image it is given is gray and colorized
with a process color. It checks this before any image is decoded. Another
image in the document that already has that combination does not affect a
run on other images. Black, white and spot colors still colorize the result.
The rule check_colorized applies to each image is now one function,
paint::gray_colorized_with_process, which both checks call.
Docs: docs/mcp.md (Remove Background), docs/target-app-parity.md.
When a blend starts a key's path elsewhere (an open path clicked at its
last anchor, a closed path turned to another start or reversed to match
the other key's winding), the steps now read that key's width profile,
pen pressure, tilt, bearing and rotation along the turned path, and a
reversed open path's arrowheads swap ends. A width profile's sides swap
when its path is reversed, a closed path's samples move past the new
start keeping the step at the old one, and a split width span is sampled
so its curve keeps its shape. A key whose subpaths turned differently
keeps its stroke as it is.
Width profiles in the steps also keep their discontinuous points instead
of only the width before them, and are sampled between their points so
each key's curve keeps its shape where the other key adds points; keys
whose points sit at the same positions are not sampled, so a preset on
both keys stays that preset. A sample of one key that lies within a
millionth of the other key's step no longer hides that step.
Several rows of Edit › Keyboard Shortcuts had the same group and label,
so a user could not tell them apart: the four Window › Other Library…
commands, File › New… (file.new and file.newDialog), Type › Fit
Headline (text.fitHeadline and type.fitHeadline), Ui › Reset Panel (the
character and paragraph style options) and File › Continue in
Background (export and open).
Rows that would share an English name now take a name of their own:
- a command that an item of the menu bar runs is listed under that
item's menu path, for example Window › Swatch Libraries › Other
Library…;
- a command whose id extends another command's id is listed under that
command's label, for example Character Style Options › Reset Panel;
- the rows that still share a name show their id after it, except the
one row an item of the menu bar runs, so File › New… stays the New
Document dialog's row and file.new is File › New… (file.new). Two
filter plug-ins with the same menu path and label show their ids too.
shortcuts.list gives the new group of the first two kinds of rows in
`group`. The dialog's search finds a row by the id it shows. A message
about a shortcut that is already in use names every row that has it by
its whole name, with its group, instead of its label alone.
Paragraph panel menu > Bunri-Kinshi (with the East Asian options) and
text.setFormat {bunriKinshi} turn it on per paragraph. A line then
never breaks inside two em dashes, two horizontal ellipses, two two-dot
leaders or the two halves of a vertical kana repeat mark, the pairs W3C
JLREQ lists for class cl-08 (https://www.w3.org/TR/jlreq/#cl-08), nor
inside a chain of em dashes. Both composers, vertical type, Kinsoku
Shori Type, hyphenation and No Break follow it, and a pair wider than
the line stays whole on it. Justification and letter spacing add no
space inside a pair.
The setting works only with a Kinsoku Set: with Kinsoku Set None the
paragraph keeps the value without effect and the menu item is
unavailable. It is off by default, saved with the paragraph only when
on, carried by paragraph styles (Paragraph Style Options > East Asian
Composition Settings), and turned off by Reset Panel. A value that is
not true or false is refused. The .ai editing data has no field for it,
so saving reports a paragraph with it on and a pair in it as left out.
Docs: docs/mcp.md, docs/target-app-parity.md.
A tool step in the Learn panel now draws the tool's name as a link. Clicking
it, or pressing Enter or Space on it, runs the new learn.locateTool command,
which marks the tool where the current layout shows it without choosing it
(the help page:
https://helpx.adobe.com/illustrator/desktop/get-started/learn-the-basics/learn-skills-quick-skill-guide.html).
- A tool shown on its toolbar button has the button marked, and a toolbar
that has scrolled it out of view scrolls it back.
- A tool in a collapsed group opens the group's flyout with its row marked;
the group keeps the tool it shows.
- A group torn off into a strip comes to the front with the tool marked.
- Toolbars made with New Toolbar are searched after the Tools panel.
- A tool that no shown toolbar holds is marked in the All Tools drawer.
- A Tools panel hidden with Window › Tools shows again. In Presentation
Mode, or while Tab hides the toolbars, the reply is "unavailable" with a
reason.
- The mark is a 2 pt outline in the selection color. It lasts 3 seconds,
until Escape (also when Escape closes the All Tools drawer), or until the
next link replaces it. These are VectorCraft's own rules.
The command takes a tool id and rejects a missing, non-string or unknown id.
Catalog steps mark the linked name in brackets, and the catalog test checks
that each one names its tool. Rows for the command and the link's hover text
are added to every complete catalog.
Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md.
SVG Options gets an Include Variable Data checkbox (the `variableData`
option, off by default). With it on, the saved SVG carries the document's
text variables, its data sets' text values and each text variable's bound
type object as a `variableSets` element, in the layout Load Variable
Library already reads. A bound object is named by its element id in a
`docRef="id('...')"` attribute; an object without an id gets one.
Opening such an SVG reads the variable data back: the text variables, the
data sets (none active) and the bindings, so choosing a data set changes
the type again. Variable data that Load Variable Library would refuse is
left out with a warning, and the art opens. Markup that only looks like
the element (in comments, CDATA sections, processing instructions or the
document type declaration) is skipped.
Variables of other kinds, names XML can't hold, more than 256 text
variables or 1,000 data sets, and variable data over 8 MiB or 2,000,000
XML nodes are left out of the file, each with a warning. Type written as
outlines opens as art, so its variables are written unbound, with a
warning.
css.export read `scope` and `path` with a lenient string lookup, so a
value of the wrong type (`5`, `true`, `["all"]`, `null`) was treated as
left out: the selection was exported, or the CSS came back as data
instead of being written. Both keys are now checked before anything is
generated or written, and a supplied value that is not a string is an
error ("`scope` must be a string", "`path` must be a string"). A
left-out scope still exports the selection, and a left-out path still
returns the CSS.
css.generate and css.export with scope "all" do not use `ids` or `id`,
but a malformed one is now an error there too, as it already is for the
selection.
Under --automation-read-root, document.json names a linked image or
placed file in a stored brush's art outside the read roots by its file
name alone, as it does in the layers. A stored brush entry that does not
read as a brush is left out of the reply, and a stored brush library
that is not a list becomes an empty one. A link whose file is inside the
read roots loses its stored relative path when that path leads outside
them, from the folder of the file the document was read from or from the
document's own folder.
Under automation read roots, a reply's base64 `thumbnail` (a library
item's PNG in `library.get`, a page's PNG in `document.pdfInfo`) was
searched for hidden library paths like any other text, so a short path
that happened to occur in the encoded bytes was rewritten and the image
broke. `thumbnail` now joins `dataBase64`, `pngBase64` and
`thumbnailBase64` as encoded data that is left unchanged; text under it
that is not base64 is still searched.
The new General preference Show Bounding Box While Moving and Drawing
(`boundingBoxWhileMovingAndDrawing`, off by default) keeps the bounding
box and its handles visible during two kinds of drag, with View › Show
Bounding Box on. While a drag moves the selection (a Selection tool
move, an Alt-drag copy, or a shape tool's move by the center point),
the box is drawn where the drag has moved the selection. The box is
measured once when the drag starts and offset by each step's move.
While the Rectangle, Rounded Rectangle, Ellipse, Polygon and Star tools
draw a shape, the box is drawn around the shape. A rotation and a
widget drag still hide the box until the release. The Line Segment
tool, the Pen, the Pencil and the Paintbrush draw no box.
With the preference off, the box hides during a move (#737, for #712)
and while a shape is drawn (#5839), as before. A Selection tool move
with Real-time Drawing off still moves the box with the pointer, and a
shape tool's move by the center point hides it in both modes.
With Real-time Drawing off, the box of a shape being drawn is measured
from the pending preview, in the color of the layer the shape goes on.
A shape being drawn shows no box until a preview step has succeeded,
so a failed preview does not show the box of the selection from before
the drag. The preference's label has a row in every catalog.
Session::deferred_move() is replaced by Session::move_drag_box(), which
returns the moved box, and Session::deferred_transform_box() now also
returns the layer color of the box.
Docs: docs/mcp.md, docs/target-app-parity.md.
A blend between two strokes drawn with a pressure-sensitive brush gave
every step the pen recording of the nearer key, so the brush jumped at
the middle step. The steps now interpolate the pressure, tilt, bearing
and rotation at every position either key has a sample. A key without a
recording counts as half pressure, half tilt and 0 degrees, as brushes
read it. Angles turn the shorter way round, and steps and whole turns in
a recording stay in the steps. Different brushes still switch halfway.