Commit Graph
12259 Commits
Author SHA1 Message Date
dotCooCoo 71df6f0fd2 Save PDF: ui.savePdfDialog refuses a useArtboards that is not true or false
A value such as "false" or 0 used to open the dialog for the artboards. It is
now refused before the dialog opens, as document.exportPdf refuses it.
2026-11-12 14:06:35 -08:00
jmverges 4aef07a117 Merge remote-tracking branch 'upstream/main' into fix/type-layout-envelopes
# Conflicts:
#	crates/eps/src/import/ate.rs
#	crates/eps/src/import/tests_native.rs
#	docs/file-format-parity.md
2026-11-12 22:05:35 +00:00
Sven Lafebre 499a74cedb Fix #6969: Rasterize to Grayscale or Bitmap makes a grayscale image 2026-11-12 23:04:50 +01:00
dotCooCoo cafbaec053 Merge main into fix/transform-effect-moves-member-raster-effects 2026-11-12 14:02:27 -08:00
dotCooCoo 0956341034 MCP: the UI catalog lists useArtboards for the Save PDF dialog
crates/mcp/src/ui_catalog.rs is regenerated with `cargo xtask ui-commands`, so
the ui.savePdfDialog entry matches its description in
crates/ui-egui/src/menus/ui_commands.rs.
2026-11-12 13:55:12 -08:00
jmverges 73fce692d9 Merge remote-tracking branch 'upstream/main' into fix/remaining-type-envelopes
# Conflicts:
#	docs/file-format-parity.md
2026-11-12 21:55:11 +00:00
dotCooCoo 3e32e99a15 Merge main into feat/align-artboards 2026-11-12 13:47:00 -08:00
dotCooCoo 7998954a95 Cutting Tools: weeding lines stop at an outline that lies on a line
A weeding line at v0 + k*step can round just past the edge of an outline
segment that lies on it: across 0.1 to 0.5 the one line sits at
0.30000000000000004, and (0.30000000000000004 - 0.1) / 0.2 is
1.0000000000000002. The candidate range for that segment then came out
empty, so the line was not stopped there and ran over the art's edge.
The candidate range is now widened by a small tolerance before rounding;
`near` still leaves out lines the segment does not meet.

docs/mcp.md and the params text of `addon.cutting.weed` now state the
`spacing` range (more than 0, at most 100000 pt), the 1000-line limit
each way, and that a request giving both `count` and `spacing` is
refused.
2026-11-12 13:46:37 -08:00
dotCooCoo 554d86765a Merge main into feat/3d-graphics-planar 2026-11-12 13:46:05 -08:00
dotCooCoo 5b09cf9c09 Document Info: Spot Color Objects leaves out fills and strokes at opacity 0
A spot-colored fill or stroke whose opacity is 0 prints no ink, but
Spot Color Objects still listed its object and objects.spots counted
it. Such fills and strokes are now left out; an object stays listed
while another of its fills or strokes prints the spot color. Pattern
Objects and Gradient Objects are unchanged.
2026-11-12 13:45:55 -08:00
dotCooCoo 7907bae6c3 Merge main into feat/new-document-profiles 2026-11-12 13:42:10 -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
dotCooCoo 367ec9998e 3D and Materials: graphic curves whose control points pass behind the eye still draw
Under a perspective, a piece of a graphic's curve that lies in front of the eye while one of its control points does not is halved until its control points map, instead of dropping the piece. A curve that dips behind the eye between the ends of its pieces is still clipped. The extra pieces count toward the effect's element limit, and a path that passes the limit is not sent to the clipping.
2026-11-12 13:32:37 -08:00
dotCooCoo 2c3f61851f MCP: a readable library's id stays only after a delimiter
A readable library's id was kept whole after any character outside a
short list, so in `/a+/project/libs/Kit.gpl` the id
`/project/libs/Kit.gpl` was kept and the hidden `/libs/Kit.gpl` inside
it showed in the reply. The same happened after `@`, `=`, `%` and `!`.

The id now stays only at the start of the text, after a space, a
quote, `,`, `;` or an opening bracket, or in a local `file:` URL.
Written with its `loaded/`, it also stays after `=`.
2026-11-12 13:31:33 -08:00
dotCooCoo 312d4a3914 Merge main into feat/image-color-mask 2026-11-12 13:30:24 -08:00
BFlat 71d717b1da Merge pull request #6940 from dotCooCoo/feat/learn-tool-locator
Learn: a tool's name in a tutorial step shows where the tool is
2026-11-13 04:26:05 +07: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 321aa13251 Merge pull request #6962 from dotCooCoo/fix/trace-tinted-photos
Image Trace: sepia, single-hue and duotone photos are smoothed as gray photos are
2026-11-13 04:25:36 +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
BFlat da84e53b30 Merge pull request #6864 from jmverges/fix/6856-ai-type-pattern-paint
.ai import: type filled or stroked with a pattern keeps its pattern
2026-11-13 04:25:16 +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 35a03aeda3 3D and Materials: a click on a graphic's handle records no undo step
A press and release on a graphic's handle without moving it sends no change, so it adds no Effect Options step to the history.
2026-11-12 12:56:22 -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 264a6541e6 Merge main into fix/dialog-set-hidden-fields 2026-11-12 12:55:47 -08:00
dotCooCoo 5edc0fa4f8 Merge main into perf/setformat-per-paragraph 2026-11-12 12:52:42 -08:00
dotCooCoo dc79bbbe73 Image Tools: Color Mask refuses a process color on each gray image it masks
Color Mask checked the whole document for a grayscale image colorized
with a process color only when the document passed that check before
the run. With another such image already in the document, the check
was skipped, and a process-colorized gray image could take masked
pixels with transparency.

Each image whose mask changes is now checked on the pixels the new mask
shows, made from the image's own pixels, so an image elsewhere in the
document no longer affects the result. A mask that hides nothing keeps
the image's own pixels and is still set. When new pixels replace a
masked gray image's own pixels under a process color, the mask made for
them hides nothing, and Apply Color Mask refuses them. The check shares
its colorize predicate with paint's check_colorized.
2026-11-12 12:51:25 -08:00
dotCooCoo f02a572c6a Merge main into fix/assign-profile-working-spaces 2026-11-12 12:46:52 -08:00
dotCooCoo 2e95fd8573 Transform: a stroke runs on through a joint too shallow to bevel
A click just past the end of two segments that meet with almost no
turn, as the segments of a warped edge do, missed a beveled or mitered
stroke: the joint has no bevel, and the check counted that as a miss.
It now counts as painted, so the eyedropper samples an envelope's
stroke there again.
2026-11-12 12:46:14 -08:00
dotCooCoo b9946efb1e Merge main into feat/cjk-insert-aki 2026-11-12 12:46:09 -08:00
dotCooCoo 950494802e Merge main into feat/outline-object-image-alpha
# Conflicts:
#	crates/effects/src/tests.rs
2026-11-12 12:45:45 -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 18aed1da4e Merge main into feat/dcs-linked-spot-plates 2026-11-12 12:45:18 -08:00
dotCooCoo 15ffb4ec01 Merge main into feat/export-notes-loss-first 2026-11-12 12:45:09 -08:00
dotCooCoo c31af9898e 3D and Materials: one element limit per effect, pasted graphics keep their symbols, safer handle drags
- The graphics of one 3D effect share one limit on drawn path elements
  across every member and opacity group, so a group effect with many
  members no longer multiplies the limit.
- Copy and paste follow the symbols that mapped graphics name, in object
  and graphic style appearances: a document without the symbol gets it,
  and one whose symbol of the same name is other art gets the copied
  symbol under a free name, which the graphic then names.
- A face's inverse map refuses the points its page map refuses, so a
  handle drag cannot save an offset whose handle is not shown.
- A press on a graphic's handle with Space held, or with the Hand, Zoom
  or Rotate View tool, pans, zooms or turns the view.
- A handle drag ends, keeping its preview, when the selection or the
  document changes while the pointer is down.
2026-11-12 12:42:59 -08:00
dotCooCoo b7793e839f Merge main into fix/ai-look-stroke-warning 2026-11-12 12:40:51 -08:00
dotCooCoo cbfe5248bb MCP: a readable library's id keeps a hidden path that it holds after its start
A reply hid a hidden library's absolute path wherever it appeared, also
inside another loaded library's id when the match began after the id's
start. With `/libs/Kit.gpl` hidden, the readable id
`loaded//project/libs/Kit.gpl` came back as `loaded//projectKit.gpl`,
and a request that used it failed.

Each whole readable id in a reply (with or without `loaded/`, or in a
`file:` URL with no host or `localhost`) is now found first, and a
hidden id or path that lies inside it stays. The same path after a
drive or in a URL with another host is still hidden.
2026-11-12 12:29:20 -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 bb10f74019 Merge pull request #6875 from dotCooCoo/fix/window-menu-panel-toggle
Window menu: a panel's entry shows the panel Tab hid instead of closing it
2026-11-13 03:28:26 +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 653ecc8216 Merge pull request #6935 from dotCooCoo/fix/eps-linear-time-test-steps
EPS tests: the reader's long tests check counts and shared state instead of a 20 s limit
2026-11-13 03:27:59 +07:00
BFlat e98d88ec7a Merge pull request #6880 from dotCooCoo/fix/i18n-plugin-messages
i18n: plug-in host errors are translated in every complete catalog
2026-11-13 03:27:51 +07:00
BFlat 484915de53 Merge pull request #6947 from dotCooCoo/fix/shortcut-rows-same-name
Keyboard Shortcuts: rows with the same name get names of their own
2026-11-13 03:27:42 +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