A file read as HP-GL by its extension that holds only instructions of
another set (`GC5;`) is now refused as "not an HP-GL file" instead of
opening as an empty plot. At least one of the instructions the check
reads must be one the reader knows.
A shape tool now takes a press as a bounding-box handle's only on the
drawn handle square, kept square to the screen: 3 screen points from the
handle's centre along each axis at the default Anchor Size, a half point
more or less per step. A press just beside a handle draws a new shape.
drawing_gestures_snap_to_smart_guides started its second rectangle on the
first rectangle's corner handle, which stays selected; it now deselects
first.
After File > Open the status bar showed only the first of the import's
notes. A file whose layers weren't read could give another note first:
the EPS reader adds its note about brushes left out of the Brushes panel
before the note that the file came in as its page, so the status bar
named the brushes and not the page.
The status bar now names the first note that says reading the file left
something out (the notes that make Save ask before writing over the
file), else the first note, and still counts them all. When there are
several, hovering the message lists them in that order, translated where
the catalogs have them, as many as fit in the window and at most 30,
then how many more. Screen readers get the list after the message. The
status bar shows the list only while it shows the open's message. The
open's reply keeps its notes in the import's order.
Docs: docs/control-protocol.md (app.open), docs/target-app-parity.md.
Revolve, Extrude & Bevel, Inflate and Rotate take a Shadows switch on the
Lighting tab, with Position (Behind Object or Below Object), Distance from
Object (0 to 100%) and Shadow Bounds (10 to 400%), saved in the effect as
shadow, shadowPosition, shadowDistance and shadowBounds.
With shadows on, the first light casts a hard-edged vector shadow of the
solid: every face of every solid of the object projected along the light
onto a plane behind the object (square to the view) or below it (square to
its own vertical axis and turned with it), filled black with the nonzero
rule at 50% times the opacity of the art that casts it, in that art's
blending mode, and drawn behind the solids. Distance moves the plane away
by a share of the object's largest size; Bounds ends the plane at a square
about the foot of the object's center, four times that size across at
100%. No shadow is drawn while Shading is off, when the first light's
intensity is 0, or when it does not reach the plane. A member's opacity
mask and blending mode apply to the part of the shadow it casts. A shadow
is cast from at most 327,680 faces; past that, commands are refused and a
loaded file draws the source path. The canvas, SVG and PDF exports draw the
shadow, and Expand Appearance keeps it as a path. Values out of range are
refused before the document changes.
Docs: docs/three-d.md, docs/mcp.md, docs/effects-parity.md and the
docs/target-app-parity.md evidence list.
These commands read optional numbers and flags with f64_or and bool_or,
so a value such as "10" or "yes" ran the command with the default. They
now return an error and leave the document, the selection and the undo
history as they were. Omitting a key or giving null behaves as before.
- edit.duplicate, edit.paste, guide.move, object.slice.duplicate: dx, dy
- guide.move: copy
- document.node: summary
- edit.undoGroup.end: cancel
- guide.add: vertical
- guide.select, object.slice.select: toggle
- select.editSaved: delete; newName must be a string
- select.save: name must be a string
- file.close: index must be a non-negative integer
Object > Image Trace > Make and Make and Expand, and Object > Pattern >
Make and Edit Pattern, are no longer listed or accepted by
`ui.action.insertMenuItem`. Their menu items do more than run the
command: Image Trace traces off the UI thread with progress and Cancel,
and the Pattern items open the Pattern Options panel. Action playback
runs only the command.
Insert Stop and Insert Menu Item, given a set and action, now count the
steps that the recording in progress adds to that set, so the set as
Stop Playing/Recording leaves it stays within 10,000 steps per action
and 8 MiB as a file.
The command descriptions list every kind of menu item that cannot be
a step.
Docs: docs/mcp.md, docs/target-app-parity.md.
Document Setup gains alignNewObjectsToPixelGrid. When it is on, every
path or compound path drawn in the document (shape tools, Pen,
Curvature, Pencil, Paintbrush, Blob Brush, grids, flares and add-on
shapes) gets the pixel-aligned property and snaps in the same undo
step. Text, paste, duplicate, Place and import are not affected.
- The Transform panel menu has an Align New Objects to Pixel Grid
item for the active document.
- New Document's Advanced Options has the checkbox; the Mobile and Web
presets turn it on, other presets and older saved presets leave it
off, and file.new, Save Preset and Recent keep it.
- The setting is saved with the document only when it is on.
https://helpx.adobe.com/illustrator/desktop/get-started/learn-the-basics/pixel-preview-mode-for-web-graphics.html
Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md.
The shortcut entries are built from the menus under the plug-in revision
read before the walk. A plug-in installed or removed during the walk left
entries that don't match that revision, while the keymap cached for the
revision was built from the entries before the change, so the catalogue
and the entries differed by a row (the_default_shortcuts_do_not_conflict
failed when a test beside it installed a plug-in).
The menus are now walked again when the revision changes during the walk,
and a snapshot that still doesn't match is not cached.
A forced line break ends the first word when looking for room, inside a
No Break run too, as the line is set. A soft hyphen just before a forced
line break adds no hyphen to the measured width.
The input hook, the logic and the interface of a frame now mark their
time as timed whatever the activity around them, so a frame the system
runs while an in-line file dialog waits for the user is timed too, and
the dialog's wait is not timed again once the frame ends.
Save and Save As as EPS always wrote the chosen artboard as the page and
%%BoundingBox, and the EPS Options hid Use Artboards, so art past the
artboard was left outside the file's bounding box.
The EPS Options of Save As now show Use Artboards with All or Range
under it, unchecked by default. Unchecked, Save writes one file whose
bounding box fits all the visible art, as Export does, without the
artboards' background colors; with no visible art the page is the first
artboard, in its color. Checked with two or more chosen artboards, the
file at the path is the central file of the visible art and each
artboard is also written to <name>_<artboard>.eps beside it. Checked
with one, that artboard is the page of the file at the path, the
behavior Save had since #4293 (mockydevs). The file the document becomes
still carries the whole editable document.
Naming artboards with artboard, artboards or range still turns Use
Artboards on. file.formatOptions now reports it on, with those artboards
as the range, and the Save As dialog opens that way.
Changed default: an EPS saved with Save or Save As, an opened EPS
included, now gets a bounding box around its visible art unless Use
Artboards is checked or the save names artboards; an opened EPS saved
back this way loses the margins its page had. selectedOnly stays an
Export option, and Save refuses it.
Docs: params text of document.save and file.formatOptions, the
useArtboards option text, docs/mcp.md save_file,
docs/file-format-parity.md, docs/target-app-parity.md, and notes on the
earlier EPS Save evidence in docs/gaps.md, docs/roadmap.md and
docs/target-app-parity.md.
registry::grant takes a GrantToken, which the engine makes after a
person's approval and when it loads grants.json. registry::install,
install_bytes and folder loads refuse a module that lists permissions no
recorded grant gives this very module (Error::NeedsApproval), and leave
the plug-in under its id and the revision as they were. A folder load's
approve callback only narrows what installs. A module without
permissions, or with an empty list, installs as before.
A folder load in a session with a plug-in store records the store's
grant for each module it approves, so those modules still load.
docs/plugins.md says what the approval does not protect against: native
code linked into the app, and another program running as the same user,
which can edit the Plug-ins folder and its unsigned grants.json.
With a TIFF preview, each EPS file's PNG thumbnail is now the preview
averaged down to the thumbnail's size and composited on white, so
export and Save draw the page once instead of twice. The thumbnail
keeps the size a 128 px render of the page has; a page that fits in
128 px gets the preview's own pixels. Without a preview the thumbnail
is still drawn.
- Rendered::area_resized averages premultiplied pixels over the area
under each new pixel, weighting edge pixels by the share they cover,
and returns an error for a 0 side or a buffer that does not match.