Commit Graph
3726 Commits
Author SHA1 Message Date
BFlat d61ad77529 Merge pull request #6909 from dotCooCoo/feat/align-artboards
Align: the Align panel aligns and distributes the selected artboards
2026-11-13 06:11:32 +07:00
BFlat 1461bb2123 Merge pull request #6963 from dotCooCoo/fix/transform-effect-moves-member-raster-effects
Effects: a group's or object's Transform effect moves the raster effects inside it
2026-11-13 06:11:24 +07:00
BFlat a55606e66b Merge pull request #6949 from dotCooCoo/fix/assign-profile-working-spaces
Color management: Assign Profile leaves the working spaces of Color Settings
2026-11-13 06:11:15 +07:00
BFlat f813ea02d5 Merge pull request #6950 from dotCooCoo/perf/setformat-per-paragraph
Type: a Tabs indent drag over many paragraphs no longer takes time in the square of their number
2026-11-13 05:24:02 +07:00
BFlat 9861e7f927 Merge pull request #6920 from dotCooCoo/feat/export-notes-loss-first
Save and Export: notes of what the file loses come before notes on options
2026-11-13 05:23:53 +07:00
BFlat 912a97346b Merge pull request #6973 from dotCooCoo/fix/followup-6827
MCP: document.json names linked JavaScript files outside the read roots by file name
2026-11-13 05:23:43 +07:00
BFlat 822d4101b5 Merge pull request #6890 from dotCooCoo/feat/3d-expand-as-wireframes
3D and Materials: Expand as Wireframes turns a 3D object into its edges as paths
2026-11-13 05:23:34 +07:00
BFlat 666ba78862 Merge pull request #6967 from dotCooCoo/feat/docinfo-brush-types
Document Info: Brushes lists the brushes applied to art, with their types
2026-11-13 05:23:17 +07:00
BFlat e0a8fdae5b Merge pull request #6958 from dotCooCoo/fix/bevel-join-visual-bounds
Transform: a bevel stops at the corners of the segments it joins with Use Preview Bounds
2026-11-13 05:23:09 +07:00
BFlat c2f97d2efa Merge pull request #6961 from dotCooCoo/fix/gradient-repeat-runs
Gradients: a repeated gradient with many stops keeps every run
2026-11-13 05:22:59 +07:00
dotCooCoo 05466e54a8 Color management: Working CMYK proofs a tagged document through the working space
View > Proof Setup > Working CMYK simulates the working CMYK space of
Color Settings in Proof Colors and Separations Preview, also in a
document assigned another CMYK profile. The active context keeps the
working context beside the assigned profiles, and the proof table cache
key includes the working settings, so a change of the working CMYK space
shows in the next proof.
2026-11-12 14:09:08 -08:00
dotCooCoo cafbaec053 Merge main into fix/transform-effect-moves-member-raster-effects 2026-11-12 14:02:27 -08:00
dotCooCoo 3e32e99a15 Merge main into feat/align-artboards 2026-11-12 13:47:00 -08:00
dotCooCoo 127229d188 Color management: removing a profile redraws only when the canvas changes
color.removeProfile gave every open document a new revision for any
removed profile. It now redraws when the removed profile was an assigned
profile in use, which the working space replaces, or the CMYK profile
View → Proof Setup targets. Removing any other profile leaves the
revisions unchanged, which loading_or_removing_the_proof_profile_redraws
checks.
2026-11-12 13:42:04 -08:00
BFlat 3434e46240 Merge pull request #6825 from dotCooCoo/feat/custom-arrowheads
Stroke: custom arrowheads from an arrowheads file join the arrowhead menus
2026-11-13 04:25:55 +07:00
BFlat 10e87ff993 Merge pull request #6873 from dotCooCoo/fix/transform-effect-scales-raster-effects
Effects: a Transform effect transforms the raster effects listed before it
2026-11-13 04:25:45 +07:00
BFlat b8d23007e8 Merge pull request #6964 from dotCooCoo/fix/shaper-stroke-click-construction
Shaper: a click on an original shape's outline enters Construction mode
2026-11-13 04:25:26 +07:00
dotCooCoo a670c3072b MCP: document.json names linked JavaScript files outside the read roots by file name
With automation read roots in force, document.json returned each entry of
svg_scripts unchanged, so a JavaScript file linked from outside the read
roots kept its full path in the reply. The reply copy now names such a
file by its file name alone. An entry given as a URL is kept, and the
stored document is not changed.
2026-11-12 13:18:17 -08:00
dotCooCoo c513114674 Gradients: Expand reports a capped gradient as unavailable
- object.expand.info reports no gradient or fill to expand for a
  gradient that repeats in more runs across its box than are written,
  matching object.expand, which leaves it a gradient. For a path that a
  painting live effect draws, it measures each piece the effect returns.
- CSS writes a repeating gradient's stop positions, and a repeating
  radial gradient's radius, with enough decimals that their rounding
  adds up to at most a hundredth of a period across the box (at least
  four for positions and three for the radius).
- docs/mcp.md says that sharp steps and swatch-linked stops are the last
  to be left out rather than always kept, and that the CSS conic limit
  counts stops before midpoints and Perceptual curves add more.
2026-11-12 12:55:54 -08:00
dotCooCoo 5edc0fa4f8 Merge main into perf/setformat-per-paragraph 2026-11-12 12:52:42 -08:00
dotCooCoo f02a572c6a Merge main into fix/assign-profile-working-spaces 2026-11-12 12:46:52 -08:00
dotCooCoo b0cde0067e Document Info: strokes and fills at opacity 0 list no brush or paint
A stroke at an opacity of 0 draws nothing, so its brush is no longer
listed in the Brushes category, brushNames or brushes. Pattern Objects,
Gradient Objects and Spot Color Objects likewise leave out fills and
strokes at an opacity of 0, and Objects no longer counts objects whose
only such paint is at opacity 0.
2026-11-12 12:45:28 -08:00
dotCooCoo 15ffb4ec01 Merge main into feat/export-notes-loss-first 2026-11-12 12:45:09 -08:00
BFlat 80f909a162 Merge pull request #6936 from dotCooCoo/fix/css-export-scope-type
CSS: css.export refuses a scope or path that is not a string
2026-11-13 03:29:20 +07:00
BFlat 3e35a03a3d Merge pull request #6937 from dotCooCoo/fix/artboard-new-subpoint-sides
Artboards: artboard.new keeps a side below 1 pt as given
2026-11-13 03:29:11 +07:00
BFlat bb3f5c6d1a Merge pull request #6827 from dotCooCoo/fix/read-roots-document-replies
MCP: document.inspect and document.json leave out paths outside a confined client's read roots
2026-11-13 03:29:01 +07:00
BFlat f4767e89ff Merge pull request #6945 from dotCooCoo/feat/svg-variable-data
SVG: Save As SVG can include the document's variables and data sets
2026-11-13 03:28:53 +07:00
BFlat 06ee4cac00 Merge pull request #6952 from dotCooCoo/fix/remove-background-colorized-gray
Remove Background: a gray image colorized with a process color is refused
2026-11-13 03:28:44 +07:00
BFlat b7062daa6b Merge pull request #6951 from dotCooCoo/fix/proof-view-unchanged
Color management: proof view commands redraw only when the view changes
2026-11-13 03:28:34 +07:00
BFlat 87485971b0 Merge pull request #6959 from dotCooCoo/fix/item-transform-later-raster-effects
Effects: a fill's or stroke's own Transform effect leaves the effects listed after it unscaled
2026-11-13 03:28:16 +07:00
BFlat bfd7b3dc00 Merge pull request #6944 from dotCooCoo/feat/bunri-kinshi
Type: Bunri-Kinshi keeps inseparable character pairs on one line
2026-11-13 03:28:08 +07:00
BFlat 8e9d9b7f89 Merge pull request #6948 from dotCooCoo/test/findfiles-remove-temp-trees
Tests: findfiles tests remove the folder trees they make
2026-11-13 03:27:34 +07:00
BFlat 28d97a82a8 Merge pull request #6954 from dotCooCoo/fix/trace-logo-flatness-own-colors
Image Trace: Flat Logo judges flat art by the image's own colors
2026-11-13 03:27:17 +07:00
dotCooCoo 197d033b4f Merge main into feat/custom-arrowheads 2026-11-12 12:04:01 -08:00
dotCooCoo ba20f468b3 Merge main into feat/align-artboards 2026-11-12 11:58:32 -08:00
dotCooCoo 05cf130fde Document Info: Brushes lists the brushes applied to art, with their types
Document Info's Brushes category now lists the brushes the artwork's
strokes draw with, each once with its type (Calligraphic, Scatter, Art,
Pattern or Bristle), as the Document Info panel help page describes:
https://helpx.adobe.com/illustrator/desktop/get-started/learn-the-basics/document-info-panel.html

Without Selection Only the category used to list every brush in the
Brushes panel, used or not; it now lists only the brushes art uses.
document.info adds `brushes` ([{name, type}]) and `panelBrushNames`
(the Brushes panel's brushes), and `brushNames` holds the used brushes.

Hidden strokes, strokes with no paint or width, guides, paths with no
segment, type that draws no characters, groups' and layers' own strokes,
compound path members' own strokes and image strokes without a shape
are left out. A brush the panel does not hold is listed as missing,
with a null type, and a name two panel brushes share takes the type of
the brush the renderer draws with.
2026-11-12 11:51:05 -08:00
BFlat bc882d1fc0 Merge pull request #6910 from dotCooCoo/fix/library-ids-and-save-replies
MCP: a hidden library's shown id names it in requests, and replies hide its path wherever it appears
2026-11-13 02:47:27 +07:00
BFlat a2899e538b Merge pull request #6894 from dotCooCoo/fix/read-roots-error-messages
Automation: errors name a path outside the read roots by its file name
2026-11-13 02:47:17 +07:00
BFlat 813b24b0a5 Merge pull request #6835 from dotCooCoo/feat/blend-canvas-easing-handles
Blend: on-canvas widgets set a selected blend's color shift and easing
2026-11-13 02:47:08 +07:00
BFlat e58807ce07 Merge pull request #6851 from dotCooCoo/fix/recovery-held-crashed-areas
Data Recovery: restore and discard act on copies kept by an area they already hold
2026-11-13 02:46:57 +07:00
BFlat 339e33a4df Merge pull request #6905 from dotCooCoo/fix/type-size-range-error
Type: text.create and the type style commands refuse a size outside 0.1 to 1296 pt
2026-11-13 02:46:20 +07:00
BFlat 036c563635 Merge pull request #6820 from dotCooCoo/feat/brushes-ink-wash-library
Brushes: built-in Ink and Wash library with tapered ink, brush pen and wash brushes
2026-11-13 02:46:00 +07:00
dotCooCoo 1f458a3ab0 Transform: setBounds measures miter spikes of dashed strokes at a slant as drawn
A miter join on a stroke whose dashes have round or projecting caps
still paints the miter spikes the limit keeps, and the visual box
includes them. object.setBounds with Use Preview Bounds did not count
such a stroke as one whose margins follow its segments' directions, so a
closed path at a slant missed the size typed when the width and height
were out of proportion.
2026-11-12 11:45:53 -08:00
dotCooCoo 043e517ef6 Effects: a group's or object's Transform effect moves the raster effects inside it
A Transform effect on a group reshaped its members' paths but left the
raster effects inside it at their own values: a member's Drop Shadow
kept its 10 pt offset under a 200% Transform effect, and with Scale
Strokes & Effects on, it scaled by the mean scale without turning. The
same held for the raster effects of an object's own fills and strokes
under the object's Transform effect.

- A Transform effect that moves the art once now transforms the raster
  effects of a group's members (their own and their fills' and
  strokes'), of nested groups, of the art of the linked opacity masks
  in it and of an object's fills and strokes, after the members' own
  Transform effects: sizes scale by the mean scale and a Drop Shadow's
  offset turns, reflects and scales. A raster effect that a member's
  own Transform effect with copies or random holds back keeps its value
  through that effect and still transforms with the group's. Scale
  Strokes & Effects does not scale them a second time. A group's or
  object's Transform effect that makes copies or moves at random leaves
  them as before.
- The canvas, the redraw region, export, Expand Appearance, Object ›
  Expand and Outline Stroke read the same values.
- The Transform effect's params text and docs/target-app-parity.md
  describe the rule.
2026-11-12 11:35:03 -08:00
dotCooCoo eb80d45ec5 3D and Materials: Expand as Wireframes takes a compound path member as its compound path
A path inside a compound path given in ids was replaced by a group inside the
compound path, which reads its members as paths, so the edges did not draw. The
compound path is now expanded in its place. The panel's Quick Actions show on
the Object tab of Revolve (Classic), not on its Rotation tab, as for the other
effects with an Object tab.
2026-11-12 11:33:34 -08:00
dotCooCoo 0691e1acbe Gradients: keep every run of a repeated gradient with many stops
When a repeated or reflected gradient needs more stops than a limit
allows, each run now leaves out the stops that change its colors
least, so every run is still written, instead of writing fewer runs
and padding the rest with the last color. Each run keeps its ends,
sharp steps, swatch-linked stops, tint and CMYK ink changes and spans
shaped by an off-center midpoint, and the colors are compared as the
gradient's method mixes them. This applies to gradients along or across
a stroke, CSS conic gradients, and PDF, EPS and .ai export.

- Outline Stroke's mesh fits the gradient to at most 1,024 stops, and
  splits a stroke into several meshes when one would hold more than
  2^20 points.
- Object > Expand leaves a gradient as it is when the box needs more
  than 256 runs, instead of expanding only the first runs.
- CSS writes the stop positions of repeating gradients with four
  decimals, so the period stays in place across the box.
- A swatch chip of a gradient that repeats gets at least four grid
  cells a run along each side (at most one a point, and 128), so it
  does not show one color when the count matches the chip's cells.
- docs/mcp.md states the stop limits and the PDF import sample budget.
2026-11-12 11:30:44 -08:00
dotCooCoo 6da0e0f115 Tests: the shadow-on-each-fill test installs its own plug-in id
a_shadow_on_each_fill_a_painted_effect_returns_follows_the_transform_after_it
installed test.engine.twofills, which
a_second_painted_effect_on_a_fill_keeps_the_piece_s_other_fills also
installs with a different module. Installed plug-ins are kept for the
whole test process, so running the two tests in parallel could run one
test's effect with the other's module. The test now installs
test.engine.shadowedfills.
2026-11-12 11:29:37 -08:00
dotCooCoo be50e5328b Transform: a bevel stops at the corners of the segments it joins with Use Preview Bounds
A bevel join, and a miter join whose miter limit bevels a corner, end the
stroke at the outer corners of the two segments they join. The visual box
measured such a corner as if the stroke reached half its weight round it:
a 40 x 100 pt triangle with a 20 pt stroke and a miter limit of 2 measured
10 pt above its tip, where the stroke paints about 1.96 pt above it. Use
Preview Bounds, and the alignment and sizing that use it, took that box.

- With bevel and miter joins, closed paths and open paths with round or
  projecting caps are now measured along their segments, as butt-capped
  open paths already were, with the miter tips the limit keeps and the
  caps added. Round joins still reach half the weight round each corner,
  the round caps of dashes, which can end at a corner, reach half the
  weight all round, and the projecting caps of dashes reach the diagonal
  of their square. The visual box of
  such a stroke can be smaller than before and is never larger. A path
  with no width, such as a rectangle sized to 0 pt wide, turns back at
  its ends, where the join bevels, so its box no longer reaches past them.
- object.setBounds with Use Preview Bounds measures an object as drawn
  when a beveled or mitered corner, or a butt cap, is on a segment at a
  slant. Before, a closed path with miter spikes the limit keeps missed
  the size typed when the width and height were out of proportion.
- A click past a bevel or a butt cap, by more than the click tolerance,
  no longer selects the stroke. Strokes with a width profile or with
  dashes that have round or projecting caps, and the ends of curves that
  bend more tightly than half the weight, keep the round reach.
- Paths measured along their segments skip the segments that cannot
  reach past the box measured so far, which starts with the path's own
  bounds.
2026-11-12 11:04:25 -08:00
dotCooCoo 85b3740cca Effects: a fill's or stroke's own Transform effect leaves the effects listed after it unscaled
Effects apply in the order they are listed, so an effect listed after a
Transform effect applies to the art the Transform effect made, at its
own values, as an object's later effects do after the object's
Transform effect. With Scale Strokes & Effects on, a fill's or stroke's
own Transform effect scaled the effects listed after it in that fill's
or stroke's list by the mean scale: a 300% Transform turned a 5 pt
Offset Path after it into a 15 pt one, and a Drop Shadow after it took
three times its offset. With Transform Patterns or Scale Strokes &
Effects on, an SVG filter after it also had the origin of its user space
moved.

- The effects after such a Transform effect now keep their values, on
  the transformed art and on each copy, on every fill and stroke a
  live-effect plug-in paints the piece with, and when the copies are
  counted against the effect budget.
- With Transform Objects off, the effects before it keep their values
  too.
- The Transform params text, docs/target-app-parity.md and docs/gaps.md
  describe the rule, and drop the note that listed an object's later
  effects keeping their distances as a shortfall.
2026-11-12 10:59:21 -08:00
dotCooCoo 74e61c9b74 Image Trace: Flat Logo judges flat art by the image's own colors
With logoColors named, Flat Logo measured how flat the image is against
the named colors. A solid pixel counts as flat only within 22 (RGB
distance) of one of those colors or white. Flat art whose named colors
were 20 levels off in every channel was refused as not flat, and the
refusal score of a gradient changed with the names.

The check now uses the image's own colors, found the same way as when
no colors are named. It looks for as many colors as are named, with
white, or as the Colors setting gives, whichever is more. How far the named colors are
from the image's colors no longer changes whether the image is refused.

This changes one existing behavior: an image with large areas of a
color that was not named used to be refused, and it is now traced in
the named colors.

Docs: docs/image-trace-adjustments.md, docs/target-app-parity.md, the
imageTrace.make params text.
2026-11-12 10:48:20 -08:00