Commit Graph
12393 Commits
Author SHA1 Message Date
BFlat 2f9c510ee2 Merge pull request #6664 from dotCooCoo/fix/pdf-export-date-in-ruler-guide-test
Guides: the ruler guide export test leaves out the PDF's dates
2026-11-12 09:18:14 +07:00
BFlat 20af18de73 Merge pull request #6687 from dotCooCoo/fix/menu-list-recent-confined
Scripts: opening a macOS menu reads the Scripts folder again
2026-11-12 09:14:22 +07:00
BFlat ac8c60cad4 Merge pull request #6675 from dotCooCoo/fix/plugin-filter-progress-cancel
Plug-ins: a light filter that reports progress runs in the background with Cancel
2026-11-12 09:14:14 +07:00
BFlat e609a495f8 Merge pull request #6676 from dotCooCoo/fix/sublayer-ruler-guides
Guides: sublayer guides survive layer effects and the canvas check
2026-11-12 09:14:04 +07:00
BFlat 8631f5f1ab Merge pull request #6690 from dotCooCoo/feat/psd-open-layers
PSD import: File › Open converts a PSD file's layers to objects
2026-11-12 09:13:54 +07:00
BFlat 11ebc992ee Merge pull request #6692 from dotCooCoo/fix/torn-off-strips-hide-panels
Panels: a panel floated while the floating panels are hidden opens hidden
2026-11-12 09:13:45 +07:00
BFlat c91dcb7b48 Merge pull request #6691 from dotCooCoo/fix/color-group-takes-swatches-once
Swatches: New Color Group, Delete, Move and Merge take named swatches in one pass
2026-11-12 09:13:38 +07:00
BFlat feac9b5175 Merge pull request #6672 from dotCooCoo/fix/simplify-flat-loop-split-limit
Simplify: a flat closed loop keeps its outline when splitting reaches its limit
2026-11-12 09:13:25 +07:00
BFlat 9a4be17f0c Merge pull request #6680 from dotCooCoo/fix/pdf-points-option-pdfa
PDF: the in-points option leaves PDF/A pages within the standard's size limit
2026-11-12 09:13:17 +07:00
BFlat e9960c71a7 Merge pull request #6703 from dotCooCoo/feat/objects-on-path-move-all
Objects on Path: the Move All widget slides every attached object along the path
2026-11-12 09:13:09 +07:00
BFlat 88e6c71ad2 Merge pull request #6696 from dotCooCoo/fix/batch-file-name-row
Actions: Batch shows the data set File Name row only where it applies
2026-11-12 09:11:57 +07:00
BFlat 2530bf8acb Merge pull request #6698 from dotCooCoo/fix/pathops-exact-merge-lookup
Path ops: rejoining split curves tests only the input curves around the run
2026-11-12 09:11:49 +07:00
BFlat 4c149b70ab Merge pull request #6723 from storytold/fix/sec-png-metadata-and-batch-aliases
Metafile: drop PNG ICC and text chunks before decoding; Folder batch lists aliased folders once
2026-11-12 09:11:35 +07:00
BFlat 0d2cc27890 Merge pull request #6714 from dotCooCoo/fix/i18n-messages-keep-command-ids
i18n: Hindi and Turkish messages keep the command ids they name
2026-11-12 09:11:27 +07:00
BFlat e7a64097a0 Merge pull request #6725 from dotCooCoo/fix/read-roots-other-replies
MCP: library lists leave out paths outside a confined client's read roots
2026-11-12 09:11:19 +07:00
BFlat 53e0969826 Merge pull request #6724 from jmverges/fix/6644-envelope-type-strokes
Envelopes: type's strokes paint at their own weight along the bent outlines
2026-11-12 09:11:09 +07:00
BFlat 25eca9c812 Merge pull request #6711 from dotCooCoo/feat/docinfo-gradient-objects
Document Info: Gradient Objects lists the objects painted with gradients
2026-11-12 09:11:00 +07:00
BFlat 4c64f6206b Merge pull request #6712 from dotCooCoo/fix/plugin-store-test-isolated
Tests: the empty-params command sweeps leave plug-in caches alone
2026-11-12 09:10:52 +07:00
BFlat 62b6eff8f5 Merge pull request #6715 from dotCooCoo/fix/halftone-param-types
Vector Halftone: a parameter of the wrong type is refused
2026-11-12 09:10:43 +07:00
BFlat f42213ec2c Merge pull request #6707 from dotCooCoo/fix/script-case-variant-folder-refused
Scripts: a missing file outside the script's folder is refused like an existing one
2026-11-12 09:10:34 +07:00
BFlat 94b9043325 Merge pull request #6721 from dotCooCoo/fix/safe-mode-lists-plugin-once
Safe Mode: a plug-in found under several files is listed once in Help › Safe Mode
2026-11-12 09:10:22 +07:00
BFlat f1b53928f9 Merge pull request #6736 from dotCooCoo/feat/select-not-pixel-aligned
Select: Object › Not Aligned to Pixel Grid selects paths without the pixel-aligned property
2026-11-12 09:10:13 +07:00
BFlat a7d8a9974c Merge pull request #6719 from dotCooCoo/fix/tabs-indent-targets-story-order
Tabs: indent drags on threaded frames set each story paragraph once, a split paragraph included
2026-11-12 09:10:05 +07:00
BFlat 692818424f Merge pull request #6682 from dotCooCoo/feat/dynamic-text-block
Type: Dynamic Text sets each line of area type to the frame width
2026-11-12 09:09:56 +07:00
BFlat ab4fd17e39 Merge pull request #6727 from dotCooCoo/fix/file-out-param-types
Package, Place, Export: the Package, Place and export commands reject a param of the wrong type
2026-11-12 09:09:46 +07:00
BFlat 6dd99ef1e2 Merge pull request #6741 from dotCooCoo/fix/edit-colors-param-types
Edit Colors: a switch or number of the wrong type is an error instead of the default
2026-11-12 09:09:17 +07:00
BFlat d1a9c5a49c Merge pull request #6728 from dotCooCoo/feat/conic-gradient
Gradients: conic gradients sweep the stops once around the center
2026-11-12 09:09:08 +07:00
BFlat ebc18ffce7 Merge pull request #6742 from dotCooCoo/fix/long-path-frame
Render: a long path is checked against the rasterizer's limits from its kept boxes
2026-11-12 09:08:25 +07:00
BFlat 8f65aaa7fb Merge pull request #6718 from dotCooCoo/fix/issue-6634
Fix #6634: Pen closing drag no longer gives the first anchor symmetric handles
2026-11-12 09:08:12 +07:00
BFlat b8ebfdca09 Merge pull request #6730 from dotCooCoo/fix/ai-mesh-ink-tint-order
.ai/EPS import: gradient mesh corners in several inks take their tints last ink first
2026-11-12 09:07:59 +07:00
BFlat 358a47c559 Merge pull request #6737 from dotCooCoo/feat/control-bar-options-menu
Control bar: the panel menu turns each group of options on or off
2026-11-12 09:07:47 +07:00
BFlat 0cab083612 Merge pull request #6743 from dotCooCoo/feat/paste-on-selected-artboards
Edit: Paste in Place, in Front and in Back put a copy on each selected artboard
2026-11-12 09:07:36 +07:00
BFlat 5f2592e4fa Merge pull request #6732 from dotCooCoo/fix/plugin-removed-rename-back
Plug-ins: a failed rename back of a removed plug-in's settings is reported and undone later
2026-11-12 09:07:24 +07:00
BFlat 30b8a1e8b5 Merge pull request #6733 from dotCooCoo/feat/symbols-sort-and-list-views
Symbols: the panel menu sorts by name and offers Small and Large List views
2026-11-12 09:07:13 +07:00
BFlat b9d056986d Merge pull request #6734 from dotCooCoo/feat/para-style-options-sections
Paragraph Styles: Style Options edits indents, spacing, composition, hyphenation and justification
2026-11-12 09:07:00 +07:00
BFlat 8869c137eb Merge pull request #6735 from dotCooCoo/fix/graph-param-types
Graphs: graph.setType, setData and create refuse params of the wrong type
2026-11-12 09:06:48 +07:00
dotCooCoo 925300c159 HP-GL: a .plt file needs at least one instruction the reader knows
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.
2026-11-11 18:05:05 -08:00
dotCooCoo 7c90c6e93d Shape tools: a press scales only on the drawn handle square
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.
2026-11-11 17:57:08 -08:00
dotCooCoo 912610eb60 Open: the status bar names what the file left out first, and its hover lists the notes
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.
2026-11-11 17:52:53 -08:00
dotCooCoo 73c7c7511b 3D and Materials: shadows behind or below the object, with Distance and Bounds
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.
2026-11-11 17:50:33 -08:00
dotCooCoo 922c1fcae5 Commands: Edit, guide and slice params of the wrong type are refused
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
2026-11-11 17:45:42 -08:00
dotCooCoo f3339a47f8 Actions: Insert Menu Item leaves out Image Trace and Pattern, counts recorded steps
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.
2026-11-11 17:43:32 -08:00
dotCooCoo 93ccc6fbfa Transform: Align New Objects to Pixel Grid makes new paths pixel-aligned
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.
2026-11-11 17:41:21 -08:00
dotCooCoo c0e40f576e Keyboard Shortcuts: a plug-in installed while the menus are walked no longer leaves the keymap a row short
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.
2026-11-11 17:38:50 -08:00
dotCooCoo 4185a16a0d Type: a line's first word is measured up to a forced line break
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.
2026-11-11 17:37:26 -08:00
dotCooCoo e9942b69d2 Help: a frame run while a file dialog waits is timed for the hang report
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.
2026-11-11 17:36:11 -08:00
dotCooCoo f9773f2907 EPS: Save As shows Use Artboards, off by default, and the box fits all visible art
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.
2026-11-11 17:35:49 -08:00
dotCooCoo cde367b889 Plug-ins: only an approval records a grant, and installs need one
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.
2026-11-11 17:35:06 -08:00
dotCooCoo 4fb98ceacd EPS export: the thumbnail is made from the preview instead of drawing the document again
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.
2026-11-11 17:32:07 -08:00
dotCooCoo 386c444ff4 MCP: a readable library id written with LOADED/ keeps its text on Windows
The loaded/ prefix is matched in any case where the ids and paths are.
2026-11-11 17:31:25 -08:00