Commit Graph
5449 Commits
Author SHA1 Message Date
Patrick LenzenandClaude Opus 5.5 095d2bd2fd Fix #3621: function-based PDF shadings keep their colours
PDF import turned every function-based shading (ShadingType 1) into a
flat mid-grey. Chromium writes a CSS repeating-linear-gradient this way,
so a red and white hatch came in as a grey bar.

A function-based shading whose colour changes along one axis of its
domain only now becomes a linear gradient across the domain: stops
sampled along that axis, each hard colour change (found by halving the
interval between two samples) two stops at one offset. One whose colour
changes in two directions comes in as its average colour, with a
warning. Either paints only over the shading's domain.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 19:27:44 +07:00
Taha-Mahmoodi 95436e7212 Docs: G11, G2 and parity tables drop missing items that shipped (Effect Gallery, Relative rounding, Hard/Soft Mix, #834, #937, #722) 2026-10-24 19:21:32 +07:00
NetterSilverandClaude Haiku 5.5 34e17ff13b Reject a leading plus sign in SOURCE_DATE_EPOCH
Found while testing crates/doc/src/metadata.rs:108 (stamp_from_env)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 19:21:31 +07:00
dotCooCoo 6010dae0f0 Image Trace: Flat Logo leaves out a traced outline that has no area
The fit of a thin outline can lose all its area. Its two sides can
straighten onto one line, which leaves two anchors whose segments run
back and forth along it. Or the fit can be a single cubic, which becomes
one anchor and has no segment. Both occur when Flat Logo traces noise
whose cells are one pixel in size. The trace kept such an outline as a
selectable path that paints nothing.

Flat Logo now leaves out an outline whose area is below 1e-6 px^2,
together with its holes, and a hole whose area is below 1e-6 px^2. The
area is summed about the outline's first anchor, as the other trace
modes already do for a filled loop (crates/trace/src/lib.rs:996-1001).
Outlines with an area of 1e-6 px^2 or more, thin slivers included, are
kept as before.

One test traces a black and cream noise with both colors named exactly
and checks that no subpath of the result lacks an area. Two more build
shapes from straight cubics: a hole without area is left out, and an
outline without area is left out with its hole.
2026-10-24 19:15:08 +07:00
BFlat 21a648d850 Merge pull request #3999 from dotCooCoo/fix/flat-logo-near-colors-full-size
Image Trace: Flat Logo traces named colors a few levels off at the image's own size
2026-10-24 19:07:39 +07:00
BFlat e8215ea878 Merge pull request #3944 from dotCooCoo/fix/flat-logo-traced-size-warning
Image Trace: Flat Logo says when it traces a large image at a reduced size
2026-10-24 19:07:22 +07:00
BFlat b00381408d Merge pull request #3950 from Taha-Mahmoodi/feat/properties-contextual-controls
Properties: Blend Options, Merge Live Paint, Width Profile, an effect's Delete icon and Direct-Selected corners
2026-10-24 19:07:05 +07:00
BFlat ab717530ed Merge pull request #3993 from dotCooCoo/fix/save-errors-name-save-command
Save: option errors name the save command that was run
2026-10-24 19:06:48 +07:00
BFlat d842e2f323 Merge pull request #3998 from dotCooCoo/fix/mcp-docs-duplicate-tool-rows
MCP docs: export and add_text each have one row
2026-10-24 19:06:33 +07:00
BFlat 9a41215d25 Merge pull request #3991 from Silvertree2010/fix/h1955-logo-trace-palette-hex-parser-ac
Reject plus signs in logo palette hex parser
2026-10-24 19:06:18 +07:00
BFlat 574a707e47 Merge pull request #3986 from Silvertree2010/fix/h1951-dxf-text-u-xxxx-escape-accepts-a
Require four hex digits in DXF text \U+XXXX escape
2026-10-24 19:06:02 +07:00
BFlat f709c0ff3b Merge pull request #3960 from dotCooCoo/feat/paragraph-numbered-lists
Type: the Numbered List button numbers paragraphs 1, 2, 3
2026-10-24 19:05:45 +07:00
BFlat 5ff9412ece Merge pull request #3997 from dotCooCoo/fix/native-pretty-save-size
Native format: a document is saved pretty-printed only when its pretty-printed JSON is at most 1 MiB
2026-10-24 19:05:28 +07:00
BFlat 6e194f5431 Merge pull request #3989 from dotCooCoo/feat/image-trace-hold-source
Image Trace: pressing and holding the eye button shows the source image
2026-10-24 19:05:06 +07:00
BFlat 7c5bcc43c4 Merge pull request #3988 from dotCooCoo/fix/pdf-line-break-hyphen-as-text
PDF export: the hyphen that ends a hyphenated line is written as text
2026-10-24 19:04:39 +07:00
BFlat badac3fcc8 Merge pull request #3969 from dotCooCoo/fix/save-file-waits-for-app-save
MCP: save_file against the running app waits for the save and reports its result
2026-10-24 19:04:17 +07:00
BFlat 70b93f5aa2 Merge pull request #3984 from dotCooCoo/feat/pencil-straight-line-cursor
Pencil: the pointer shows a straight-line cursor while Shift or Alt is held before a press
2026-10-24 19:04:01 +07:00
dotCooCoo 76c014b732 Image Trace: Flat Logo traces named colors a few levels off at the image's own size
Squashed from #3999 onto main.
2026-10-24 19:02:09 +07:00
dotCooCoo d0644e5eb9 Image Trace: docs say Flat Logo averages down the decoded raster
An image over 64 megapixels is decoded at a smaller size first, and Flat
Logo averages that raster down in whole-number blocks.
2026-10-24 19:02:09 +07:00
Taha-MahmoodiandClaude Opus 5.5 ff5919f416 Live Paint: Make and Merge refuse type, images and other objects that aren't paths
Live Paint builds its faces and edges from path outlines alone. Make,
Merge and the Live Paint Bucket put every selected object among the
group's hidden sources, so type, an image, a symbol, a blend or a group
holding one of them vanished from the canvas. They now refuse such a
selection before changing anything ("Live Paint takes paths and compound
paths: convert type, images and other objects to paths first"), as type
and raster images can't go into a Live Paint group directly
(https://helpx.adobe.com/illustrator/desktop/paint-and-fill/learn-painting-basics/create-live-paint-groups.html).
One predicate, vectorcraft_tools::builder::live_paint_takes (Live Paint
groups, paths, compound paths and groups of them), decides it for Make,
Merge and the Properties panel's Merge Live Paint, which no longer shows
for a selection Merge refuses. The message has an @msg row in every
catalog.

Tests: tests_build::live_paint_refuses_type_and_images_and_changes_nothing
(Merge, Make and the Bucket with type, an image or a group holding type:
refused, document, selection and undo history unchanged; a group of
paths and a path still merge) and
panels::properties::tests::merge_live_paint_is_a_quick_action_for_a_live_paint_group_and_more
(hidden with type selected). Both fail without the change.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 19:02:09 +07:00
dotCooCoo d2de74e12a Save: option errors name the save command that was run
A save (document.save, file.saveAs, file.saveCopy) passes its options to
the export encoders, so an option an encoder refused was reported under
document.export: file.saveCopy with format pdf and range "5" on a
document of three artboards, or with format ai and compress "yes", or
document.save to a .vectorcraft path with compress "yes", failed with
"invalid parameters for `document.export`". The error now names the
save command that was run, for PDF, SVG, .ai, .ait and native files.
document.export's own errors are unchanged.
2026-10-24 19:02:09 +07:00
dotCooCoo b0e88bddf9 MCP docs: export and add_text each have one row
The tool table in docs/mcp.md listed export and add_text twice. The first
export row omitted the ai format, the per-artboard files of SVG, SVGZ and
EPS, options.useArtboards and options.rect, and said that every format but
PDF writes one artboard. The second add_text row omitted vertical.

Each tool now has one row: export keeps the complete row, and add_text
keeps the row with vertical.
2026-10-24 19:02:09 +07:00
NetterSilverandClaude Haiku 5.5 5068dfc73f Reject plus signs in logo palette hex parser
Found while testing crates/trace/src/logo/palette.rs:9-15 (parse_hex)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 19:02:09 +07:00
NetterSilverandClaude Haiku 5.5 2a4aafe346 Require four hex digits in DXF text \U+XXXX escape
Found while testing crates/cad/src/import/text.rs:73-74 (escapes)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 19:02:09 +07:00
dotCooCoo 68e4392491 Image Trace: Flat Logo says when it traces a large image at a reduced size
Flat Logo traces a copy of the image at most 1024 pixels on a side,
averaged down by a whole factor, so a 1025-pixel image is traced at
513 pixels. The trace's warnings did not say so, because they compared
the image only with the decoded raster. For an image over 1500 pixels
they said instead that it is traced more slowly, which Flat Logo does
not do.

The trace result now carries Flat Logo's working size when it averaged
the image down. imageTrace.make and imageTrace.makeAndExpand then name
both sizes in their warnings, and the status bar shows that note, in
place of the slower-trace and megapixel notes. Other modes keep their
warnings. The message has a row in each catalog that translates the
other Image Trace warnings.
2026-10-24 19:02:09 +07:00
Taha-MahmoodiandClaude Opus 5.5 aa35783f47 G1: Properties: Blend Options, Merge Live Paint, Width Profile, an effect's Delete icon and Direct-Selected corners
The Properties panel has the additional contextual controls the public
Properties panel overview lists
(https://helpx.adobe.com/illustrator/desktop/get-started/learn-the-basics/properties-panel-overview.html),
each running the existing command:

- Quick Actions: Blend Options for one selected blend while the Blend
  tool is in use (the Blend Options dialog; OK is one undo step), and
  Merge Live Paint when a Live Paint group is selected with more objects
  (livePaint.merge).
- Appearance: the stroke's Variable Width Profile list (the Control
  bar's) with the Width tool or when the stroke has a variable width
  (stroke.set {profile}); beside fx, with one effect on the one selected
  object (its own, or a fill's or stroke's), its name and a Delete icon
  that removes it (effect.remove); with several, the icon opens the
  Appearance panel, as the overview describes.
- With Direct Selection and corners of one path selected, Corner and
  Corner Radius set those corners' kind and radius
  (object.setLiveShape); a live rectangle's and polygon's own rows
  already do, so they get no second row.

The overview's Variable Font icon was already in Character. Every label
is already in every catalog.

Tests in panels::properties::tests:
blend_options_is_a_quick_action_for_one_blend_with_the_blend_tool,
merge_live_paint_is_a_quick_action_for_a_live_paint_group_and_more,
the_width_profile_shows_for_a_variable_width_or_the_width_tool,
direct_selected_corners_show_their_kind_and_radius,
one_effect_has_a_delete_icon_in_appearance (shown for the right
selection and tool, hidden otherwise, the right command in one undo
step). Documented in docs/target-app-parity.md, docs/ui-parity.md and
docs/gaps.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 19:02:09 +07:00
dotCooCoo bc041e15ef Type: the Numbered List button numbers paragraphs 1, 2, 3
Squashed from #3960 onto main.
2026-10-24 19:02:08 +07:00
dotCooCoo 0635357eb9 Native format: a document is saved pretty-printed only when its pretty-printed JSON is at most 1 MiB
A native save was pretty-printed when the document had at most 2,000
layers and objects and its compact JSON was at most 1 MiB. Pretty
printing puts every coordinate on its own indented line, so traced art
with few paths and many anchors could pass that check and be written at
about five times the size of its compact JSON.

The 1 MiB limit now applies to the pretty-printed document, indented as
the file holds it and in the form the save writes: version 1 anchors,
and placed documents expanded for older versions or Include Linked
Files. Documents whose pretty-printed JSON is over 1 MiB are saved as
compact JSON, even when their compact JSON is under it. The 2,000-object
rule and compressed saves are unchanged. docs/mcp.md describes the rule.
2026-10-24 19:02:08 +07:00
dotCooCoo 2ff8699989 Image Trace: pressing and holding the eye button shows the source image
The Image Trace panel had no way to compare a trace with its source
image except changing View and changing it back.

The panel now has an eye button to the right of View, enabled with an
Image Trace object selected. While it is held down, the canvas draws the
selected Image Trace objects with their source image, whatever their
View, and draws their View again on release. The document, its View and
the undo history are unchanged. The renderer takes the objects in
RenderOptions::trace_source, which is also part of the canvas frame key
and the raster-effect cache key.
2026-10-24 19:02:08 +07:00
dotCooCoo bef464ea97 PDF export: the hyphen that ends a hyphenated line is written as text
With type written as text, PDF export drew the hyphen that ends a line
broken inside a word as a path. The file's text had no hyphen where the
canvas draws one, so copied or searched text read "considerations"
where the line shows "con-".

The hyphen is now written as text where the line draws it, as the
character the font gives its glyph to: "-", or U+2010 when the font
gives the glyph to U+2010 and not to "-". It is a text run of its own,
and right-to-left lines keep their /ReversedChars marking. The invisible
text of type without paint holds the hyphens too. Kashidas and list
markers are still drawn as paths.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-24 19:02:08 +07:00
dotCooCoo 8c3672fb31 MCP: save_file against the running app waits for the save and reports its result
Squashed from #3969 onto main.
2026-10-24 19:01:51 +07:00
dotCooCoo c197686753 Pencil: the straight-line cursor also shows while Alt is held before a press 2026-10-24 19:01:33 +07:00
BFlat 4caa68a268 Merge pull request #3951 from dotCooCoo/fix/layer-ids-refused-by-object-commands
Arrange: a layer id given to Send to Back and the other selection commands is refused
2026-10-24 19:00:42 +07:00
BFlat ceec6c32d4 Merge pull request #3967 from Taha-Mahmoodi/fix/commands-accept-id
Fix #3965: id works as ids of one with nothing selected wherever params take ids?|id?
2026-10-24 19:00:25 +07:00
dotCooCoo a9b92d72cc Pencil: the straight-line cursor's description names the Alt exception and the Constrain Angle
The PencilStraight entry in cursors.toml now says the cursor does not
show while Alt is also held with Alt key toggles to Smooth Tool on, and
that the line follows 45° steps from the Constrain Angle. The parity doc
says the Option/Alt straight line waits for #3959.
2026-10-24 18:16:24 +07:00
dotCooCoo 8ce6177c62 Arrange: a layer id given to Send to Back and the other selection commands is refused
Squashed from #3951 onto main.
2026-10-24 18:16:24 +07:00
dotCooCoo 5ae171bc25 Pencil: the pointer shows a straight-line cursor while Shift is held before a press
With Shift held before a press, the Pencil now shows a new cursor,
PencilStraight: its crosshair with a short straight line where the
closing cursor has its ring. The cursor follows the rule the press uses
to start a straight line, so it shows exactly when the press draws one.
With Alt key toggles to Smooth Tool on and Alt held too, the Smooth
cursor shows as before. Once the press is down, and with the
Paintbrush, Shift leaves the tool's own cursor. Use Precise Cursors
turns the new cursor into the plain crosshair.

Draw straight lines with the Pencil tool describes a straight-line icon
on the Pencil while Shift or Alt is held:
https://helpx.adobe.com/illustrator/desktop/draw-shapes-and-paths/draw-shapes/draw-straight-lines-with-the-pencil-tool.html
2026-10-24 18:16:24 +07:00
BFlat dae0edb39c Merge pull request #3941 from fabian-co/feat/ai-palette-swatches
Open .ai files with their swatches (palette, colour groups, unused inks); Swatches panel keeps the art's swatch after deselecting
2026-10-24 18:09:08 +07:00
BFlat 90844e3ab3 Merge pull request #3973 from vecteza/feat/dimension-smart-guides
Dimension tool: Linear picks show and snap to Smart Guides
2026-10-24 18:08:52 +07:00
BFlat c62931c283 Merge pull request #2841 from dotCooCoo/fix/locked-or-hidden-slices-deselect
Slices: Lock Slices and Hide Slices deselect the slices and keep them deselected
2026-10-24 18:08:35 +07:00
BFlat 75dc87fabd Merge pull request #3948 from dotCooCoo/fix/trace-and-style-prompt-runs
MCP: the trace-and-style prompt's steps run as written
2026-10-24 18:08:20 +07:00
BFlat 18d0e3a6ea Merge pull request #3956 from dotCooCoo/fix/recolor-group-keeps-swatch-links
Recolor: recolor.apply with a color group keeps art linked to the group's global swatches
2026-10-24 18:08:04 +07:00
BFlat fd256b2d63 Merge pull request #3958 from dotCooCoo/feat/eps-central-file
EPS: Use Artboards also writes a central file with every artboard
2026-10-24 18:07:48 +07:00
BFlat 99b4a25f2d Merge pull request #3976 from dotCooCoo/feat/find-by-bounds-and-select
Find Objects: document.find filters by bounds, size and anchor count and can select the matches
2026-10-24 18:07:33 +07:00
BFlat fb34817531 Merge pull request #3982 from dotCooCoo/feat/image-trace-preview
Image Trace: a Preview checkbox chooses whether setting changes trace at once
2026-10-24 18:07:22 +07:00
Taha-Mahmoodi 97f84723ef Fix #3965: an unresolved step reference given as id is refused under the command's name; effect.apply keeps its effect-naming id 2026-10-24 17:57:21 +07:00
Taha-Mahmoodi c40113b755 Fix #3965: a malformed or unknown id is refused under the command's name, never replaced by the selection 2026-10-24 17:57:20 +07:00
Taha-Mahmoodi 8c5714a260 Fix #3965: id works as ids of one with nothing selected wherever params take ids?|id? 2026-10-24 17:57:18 +07:00
BFlat f924c69f3e Merge pull request #3934 from dotCooCoo/feat/live-object-cache-checked-before-resource-walk
Render: an unchanged live object or effect art is not walked again for its resources
2026-10-24 17:55:17 +07:00
BFlat 7644d11c7b Merge pull request #3962 from dotCooCoo/feat/brush-pieces-kept-per-copy
Render: brush art of symbol instances, inline graphics and repeat copies is kept between frames
2026-10-24 17:55:01 +07:00