Commit Graph
10785 Commits
Author SHA1 Message Date
dotCooCoo 48fdfeffd8 Type: docs say Escape returns to the tool whose double-click chose the Type tool
Only a double-click on type from another tool records the tool Escape and
Cmd+Enter return to, and the Type tool keeps it until another tool is
chosen. Choosing the Type tool from the toolbar records none, so Escape
goes to the Selection tool. The type and UI checklists and the doc
comments on prev_tool, end_editing and claims_key now say so.

docs/type-parity.md held four copies of the point, area and path type
row, three of them with older Escape wording. They are one row again,
with the Type Orientation sentence that only one copy had.
2026-11-08 13:17:38 -08:00
BFlat d9eb644bc6 Merge pull request #4595 from onion3130/fix/4466-double-click-hermetic
Exit isolation on empty double-click with Direct Selection (#4466)
2026-11-09 05:17:28 +08:00
dotCooCoo e7c381a53f Merge main into fix/issue-3748-r
# Conflicts:
#	crates/doc/src/hit.rs
2026-11-08 13:14:33 -08:00
dotCooCoo 5aec304ef1 Merge main into fix/placed-gradient-follows-warp
# Conflicts:
#	crates/effects/src/reshape.rs
2026-11-08 13:11:12 -08:00
dotCooCoo 9d0b2b0c1c Merge main into fix/fitted-gradient-turns-with-transform 2026-11-08 13:07:04 -08:00
dotCooCoo 4b665ad13c Plug-ins: clearing every cache is tested in a binary of its own
`plugin.clearCache` without an id empties the cache of every plug-in
installed in the process. In the engine's library tests it could empty
the cache of another storage test running at the same time, and its
`bytesFreed` could count that test's cache. It now runs in
`crates/engine/tests/plugin_clear_cache.rs`, and the library test checks
that clearing one plug-in's cache leaves the other plug-in's cache.

The storage fuzz test starts each case with an empty plug-in store,
deletes the store when the case ends, and installs `fuzz.storage` with
`replace: true`, so the cases that shrink a failure install their
module.

docs/mcp.md says that files `plugin.remove` can't delete stay in the
folder renamed with `.removed` until the plug-in is removed again.
2026-11-08 13:03:31 -08:00
onion3130 eaab4fd516 Trim to hermetic font test only (Source Sans 3, not Inter) 2026-11-09 04:02:29 +07:00
dotCooCoo 6d87858e2b Merge main into feat/plugin-importers 2026-11-08 13:00:01 -08:00
dotCooCoo 36bca85879 Plug-ins: app.open passes params to the importer File › Open picks
app.open with params and no importer ran file.open with the path alone, so the desktop app ran the importer on its defaults while headless app.open passed the params to document.open. file.open now carries params to the importer that opens the file.

The importer parameters test installs its module with replace from the second pass on, as plugin.install requires. The permission table in docs/plugins.md lists doc.read for filter, effect and exporter.
2026-11-08 12:59:17 -08:00
dotCooCoo 11703bd350 Merge main into feat/plugin-effect-paint 2026-11-08 12:56:42 -08:00
dotCooCoo a717e34f02 Merge main into fix/plugin-grant-module-hash 2026-11-08 12:55:59 -08:00
BFlat f0d5a6622a Merge pull request #5037 from dotCooCoo/feat/list-levels-r
Type: Tab and Shift+Tab move a list item down and up a level
2026-11-09 04:54:52 +08:00
BFlat 13e5704dc9 Merge pull request #3952 from dotCooCoo/feat/trace-ignore-background-only
Image Trace: Ignore Color can leave out only the background
2026-11-09 04:54:36 +08:00
dotCooCoo 7b8d5ba8f5 Type: Tab and Shift+Tab move a list item down and up a level
Squashed from #5037 onto main.
2026-11-09 03:39:05 +07:00
dotCooCoo 0de0cb7cb9 Image Trace: Ignore Color can leave out only the background
Squashed from #3952 onto main.
2026-11-09 03:38:46 +07:00
dotCooCoo d5bb58aad5 Merge main into feat/plugin-importers 2026-11-08 12:38:22 -08:00
dotCooCoo a2884baa33 Merge main into fix/edit-copy-artboard-route 2026-11-08 12:35:20 -08:00
dotCooCoo 9518dc0e3a Merge main into feat/plugin-importers 2026-11-08 12:33:17 -08:00
BFlat 74310c6737 Merge pull request #6250 from dotCooCoo/fix/placed-gradient-hidden-children-and-freeform
Effects: hidden layer children and edited freeform gradients follow the Transform and Free Distort effects
2026-11-09 04:31:53 +08:00
BFlat 2cdec30659 Merge pull request #6249 from dotCooCoo/fix/ai-editing-copy-paragraph-once
.ai import: the editing-copy paragraph in the file-format doc appears once again
2026-11-09 04:31:38 +08:00
BFlat 9150f88a83 Merge pull request #6247 from dotCooCoo/feat/ai-path-align-distance
Type: Align to Path moves each character by its own font's metrics
2026-11-09 04:31:23 +08:00
BFlat ba353a22af Merge pull request #6246 from dotCooCoo/feat/plugin-filter-shortcuts
Keyboard Shortcuts: each Object › Plug-ins filter has a row of its own
2026-11-09 04:31:08 +08:00
BFlat 156ccf4b6d Merge pull request #6245 from dotCooCoo/fix/generic-cmyk-swop
Color: Generic CMYK tints gain as CGATS TR 001 gives for SWOP printing
2026-11-09 04:30:52 +08:00
BFlat 85519d5970 Merge pull request #6244 from dotCooCoo/feat/composite-fonts
Type: Composite Fonts… sets each class of character in a font of its own
2026-11-09 04:30:38 +08:00
BFlat 358df585dc Merge pull request #6241 from dotCooCoo/fix/3d-export-triangle-budget
Asset Export: the 3D mesh triangle limit bounds memory across all exported objects
2026-11-09 04:30:20 +08:00
BFlat fddbbe023d Merge pull request #6231 from dotCooCoo/fix/missing-link-relative-path
Links: a missing linked file keeps its relative folder when a moved document is saved
2026-11-09 04:30:06 +08:00
BFlat 0b8fc3c89d Merge pull request #6228 from dotCooCoo/feat/plugin-storage
Plug-ins: a plug-in keeps settings and a cache of its own
2026-11-09 04:29:51 +08:00
BFlat 0b533ae5f8 Merge pull request #6179 from dotCooCoo/fix/ids-param-strict
Commands: an ids list with an entry that is not an id is refused instead of dropping the entry
2026-11-09 04:29:39 +08:00
dotCooCoo 26804fb0c4 Plug-ins: tests hold an importer to its budget and hostile extensions in the manifest fuzz
An import's instruction and time budgets are now host limits on Limits, as a heavy filter's are, so a test can give an importer a small budget. An importer past its instruction or time limit, and a file past the input limit, return their error and leave an open document and its undo history unchanged. The manifest fuzz varies extensions (missing, dotted, mixed-case, repeated, too long and too many).
2026-11-08 12:29:27 -08:00
BFlat 6d506dc9c8 Merge pull request #5143 from dotCooCoo/fix/ai-os7
.ai import: images past 2^25 pixels in the editing data keep the layers
2026-11-09 04:29:23 +08:00
dotCooCoo 3146c7143d i18n: Hindi names the Anti-aliasing Method and its choices
Hindi became a complete catalog on main, and the merge gave it only the
antiAlias message row. It now has the Anti-aliasing Method label, the
Sharp method's antiAlias row, Crisp and Strong, so the dropdown no longer
shows English or the Contour tool's corner word for Sharp. A test checks
that every complete catalog has these rows.
2026-11-08 12:27:51 -08:00
dotCooCoo 8138dc69ea Merge main into feat/trace-keep-colors 2026-11-08 12:24:14 -08:00
dotCooCoo c396ad104a Plug-ins: an update the store can't take keeps the stored grant 2026-11-08 12:24:12 -08:00
dotCooCoo c539c04625 Merge main into feat/plugin-effect-paint 2026-11-08 12:23:39 -08:00
dotCooCoo c63f634e0c Merge main into fix/placed-gradient-follows-warp 2026-11-08 12:22:54 -08:00
dotCooCoo b23bac4733 i18n: Hindi rows for the Keep Colors trace messages 2026-11-08 12:22:17 -08:00
dotCooCoo 87d8938df1 Merge main into fix/batch-override-export-for-screens-folder-r 2026-11-08 12:18:17 -08:00
ruchirguitar 2c80836bd5 M2.1: merge main and preserve path-deletion evidence (#3380) 2026-11-09 01:47:48 +05:30
dotCooCoo 4724475e1a Effects: hidden layer children and edited freeform gradients follow the Transform and Free Distort effects
A path that keeps its shape because the effect would pass the geometry
budget holds a group's own placed gradients in place. A hidden path in a
layer, which the layer's bounds leave out, no longer holds them, so the
layer's gradient moves with its visible art. The art's own gradients
follow the same rule.

A freeform gradient whose points were edited keeps its vector fitted to
the bounds, so it did not count as placed and its points stayed behind
under a Transform effect and Free Distort unless another placed gradient
was in the same appearance. Its points now move like a placed gradient.
2026-11-09 03:14:41 +07:00
dotCooCoo c4de0035b2 .ai import: the editing-copy paragraph in the file-format doc appears once again
docs/file-format-parity.md held 35 copies of the paragraph under
"Illustrator's private editing data" after #6202 left one, each copy
carrying a different set of the changes merged since. The section now
holds one copy with every clause from the others: placed PDF and .ai
pages as placed documents, Bas Relief among the single-effect art
styles, Bas Relief's settings block in type's art style, the fill a
clipping path keeps with its exceptions, paths with an Art brush, the
spot colors in brush art, symbols defined before the art styles
section, the Type on a Path options, and the artboards the type of a
PDF's later pages goes to.
2026-11-09 03:14:41 +07:00
dotCooCoo 11f1d228de Type: Align to Path moves each character by its own font's metrics
Align to Path moved the whole line by the largest ascent and descent
among its characters. Each character now moves by its own font, size
and vertical scale. Ascender runs the top of the font's em box along
the path: the ideographic em box that the font's BASE table gives, or
in a Chinese, Japanese or Korean font the one that its typographic or
hhea box, a one-em box-drawing cross or its ideographs give; else an
em box centered on the cap height. Descender runs the bottom of the font's
bounding box along the path, and Center runs a line at half the height
of the top of the font's H along it. In vertical type, Ascender and
Descender move the characters half an em, and Center leaves them on
the path.

Existing documents with Align to Path set to Ascender, Descender or
Center lay their type out at a new distance from the path.
2026-11-09 03:14:41 +07:00
dotCooCoo 85a933ad4f Keyboard Shortcuts: each Object › Plug-ins filter has a row of its own
Squashed from #6246 onto main.
2026-11-09 03:14:41 +07:00
dotCooCoo 25ecee0c40 Color: Generic CMYK tints gain as CGATS TR 001 gives for SWOP printing
Generic CMYK's tone curves now pass through the CGATS TR 001 tone value
increase of each ink at 40% and 50% (C 20.0, M 17.6, Y 16.8, K 21.6 at
50%), and its 16 Neugebauer primaries mix linearly, so a single ink's
tints gain as TR 001 gives. The 300% ink limit stays. The primaries, the
black-generation curve and the black point are VectorCraft's own values.

- The black point is 90% black under neutral CMY that fills the ink
  limit: sRGB black separates to C75 M68 Y67 K90 instead of C67 M67 Y67
  K100.
- Black follows a curve over the gray component of the black-free
  solve, raised by how far that solve stays lighter than the target.
  Grays from sRGB 177 up carry no black, and sRGB 128 gray separates to
  C50.5 M42.2 Y42.0 K7.5 instead of C38.8 M26.3 Y29.9 K24.4.
- Display of CMYK fills, swatches and imported CMYK values and the
  separation of RGB and Lab colors use the same model.

Paper white still separates to C0 M0 Y0 K0, but other separations
change, and so does the display of CMYK colors with ink. Tests that held
numbers of the old model are updated.
2026-11-09 03:14:41 +07:00
bflatastic c2f2c8ae9b Find Font: a composite font's row is listed by its name alone 2026-11-09 03:14:41 +07:00
dotCooCoo b33b452539 Plug-ins: an install with invalid params spends its approval 2026-11-08 12:12:57 -08:00
dotCooCoo 94dcb63c01 Merge main into feat/plugin-importers 2026-11-08 12:12:34 -08:00
NetterSilverandClaude Haiku 5.5 5a4772d24a Reject non-digit object ids in MCP object resource URIs
Found while testing crates/mcp/src/resources.rs:191 (read_object)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 21:10:17 +01:00
dotCooCoo 4b5f89e903 Merge main into fix/fitted-gradient-turns-with-transform 2026-11-08 12:09:50 -08:00
dotCooCoo b88f4ce311 Merge main into feat/character-anti-aliasing-method-r 2026-11-08 12:08:40 -08:00
dotCooCoo b9d999fe26 Asset Export: the 3D mesh triangle limit bounds memory across objects
The 2,000,000-triangle limit on a 3D object's meshes is now checked as
each mesh is built, so an object past it is refused before the rest of
its meshes are built:

- Revolve counts each fill's and stroke's mesh as it builds it, instead
  of building every one first.
- Inflate still solves every shape's membrane at once (the eye depends
  on the highest puff), but builds each solid only when its mesh is
  reached (inflate_meshes), so a refused object leaves the later
  solids unbuilt.
- All the objects of one 3D asset share one budget
  (three_d_meshes_of), so assets.export3D refuses an asset whose
  objects pass the limit together.
2026-11-09 03:08:23 +07:00