Commit Graph
1250 Commits
Author SHA1 Message Date
dotCooCoo bf4ec4253d Merge main into fix/save-screens-unknown-options 2026-11-08 18:13:32 -08:00
BFlat 04aedc87e5 Merge pull request #6268 from dotCooCoo/fix/freeform-mixes-in-point-model
Gradients: freeform points that share a color model mix in that model
2026-11-09 10:08:22 +08:00
BFlat b652599548 Merge pull request #6264 from dotCooCoo/feat/plugin-importers
Plug-ins: importer plug-ins open file types VectorCraft does not read
2026-11-09 09:24:07 +08:00
BFlat 59e485614c Merge pull request #6267 from slafebre/fix/6252-new-art-follows-selection
Fix #6252: selecting an object gives new art its fill, stroke and weight
2026-11-09 09:23:02 +08:00
BFlat 636ffe78ce Merge pull request #5070 from dotCooCoo/feat/kinsoku-shori-type
Paragraph: Kinsoku Shori Type chooses Push In First, Push Out First or Push Out Only
2026-11-09 09:22:52 +08:00
dotCooCoo ac0bb3c4ce Gradients: freeform points that share a color model mix in that model
The canvas, the gradient chips and the SVG, PDF, EPS and EMF writers mixed
freeform points in display RGB, while Object > Expand and Create Gradient
Mesh mixed them in the model the points share. Points that are all CMYK,
Gray, Lab or RGB now mix in that model in those places too. Points in
different models mix as before: in display RGB, and on ink planes as the
inks of each point.

This changes how existing art looks:

- CMYK and Lab points. With the default Generic CMYK working space and no
  ink planes, halfway between C100 and K100 the canvas drew (17, 106, 139)
  and now draws (54, 118, 143).
- RGB points in a working RGB space other than sRGB mix in that space.
- On ink planes (a CMYK document that shows transparency), RGB and Lab
  points mix first and then separate.

Gray mixes keep their values, and CMYK and Gray points on ink planes draw
as before. RGB points in an sRGB working space draw as before except on
ink planes.

- PDF and EPS write a gradient whose points are all CMYK, or all Gray in a
  CMYK file, as a CMYK image. PDF's Output settings convert it as they
  convert any CMYK image.
- Darkening applies to the points before they mix.
- With Appearance of Black set to Rich, the canvas mixes a gradient with a
  pure CMYK black point in display RGB, and the point fades from RGB black.
2026-11-08 17:18:43 -08:00
BFlat 104977f404 Merge pull request #6263 from dotCooCoo/fix/plugin-grant-module-hash
Plug-ins: a permission grant covers only the module that was approved
2026-11-09 08:58:22 +08:00
BFlat e8dbb22d4c Merge pull request #6174 from dotCooCoo/feat/3d-classic-extrude-bevel
3D (Classic): Extrude & Bevel (Classic) extrudes art with Wireframe, No Shading, Diffuse and Plastic surfaces
2026-11-09 08:53:49 +08:00
dotCooCoo 3ea13d88d3 Merge main into feat/kinsoku-shori-type
# Conflicts:
#	crates/engine/src/cmd/panelcmds.rs
2026-11-08 16:47:29 -08:00
dotCooCoo 918ef940cb Merge main into feat/plugin-importers 2026-11-08 16:45:20 -08:00
Sven Lafebre de6cc6a9c3 Fix #6252: selecting an object gives new art its fill, stroke and weight
With New Art Has Basic Appearance on (the default), the selection never
reached the fill and stroke proxies, so new art kept the colours set last.
A select.* command or layer.target that changes the selection now loads
the proxies and the weight from what the selection shows in them.

A paint or weight the selected objects don't share stays as it was, and
art without paint (a placed image) changes nothing. The template is left
alone, and only a changed selection loads, so a sampled paint stays.
2026-11-09 01:26:47 +01:00
dotCooCoo 0ce616da4b Merge main into feat/kinsoku-shori-type
# Conflicts:
#	crates/engine/src/cmd/panelcmds.rs
#	crates/text/src/layout/breaking.rs
#	crates/ui-egui/src/panels/paragraph.rs
#	docs/target-app-parity.md
2026-11-08 16:13:35 -08:00
dotCooCoo 8579f436f7 Merge main into fix/save-screens-unknown-options 2026-11-08 16:12:24 -08:00
dotCooCoo 988da4538a Merge main into fix/plugin-grant-module-hash 2026-11-08 15:55:53 -08:00
BFlat d83bb6c0b8 Merge pull request #5058 from dotCooCoo/feat/character-anti-aliasing-method-r
Character: Anti-aliasing Method sets how a type object's edges are drawn as pixels
2026-11-09 07:47:57 +08:00
BFlat 3e836ad856 Merge pull request #6193 from dotCooCoo/feat/plugin-menu-commands
Plug-ins: a plug-in adds menu commands of its own under Object › Plug-ins
2026-11-09 07:47:49 +08:00
BFlat 9499281b49 Merge pull request #5029 from dotCooCoo/fix/batch-override-export-for-screens-folder-r
Actions: Batch's Override Export sends Export for Screens files to the destination folder
2026-11-09 07:47:42 +08:00
BFlat 7adc2f66a3 Merge pull request #6109 from dotCooCoo/feat/ai-symbol-libraries
.ai import: symbol libraries open with their symbols
2026-11-09 07:47:36 +08:00
BFlat 165810aa6c Merge pull request #6104 from dotCooCoo/fix/graph-series-object-opacity
Graphs: a series keeps the object opacity and blend modes set on one of its marks
2026-11-09 07:47:29 +08:00
BFlat 1bacc7f1f0 Merge pull request #6061 from dotCooCoo/fix/export-unknown-options
Export: the export commands refuse an unknown option key
2026-11-09 07:47:15 +08:00
BFlat 8fc4464542 Merge pull request #6236 from dotCooCoo/fix/placed-gradient-follows-warp
Effects: placed gradients move and scale with the Warp effects
2026-11-09 07:47:08 +08:00
BFlat c82bd36f07 Merge pull request #6052 from dotCooCoo/fix/edit-copy-artboard-route
Artboards: a Cut or Copy with the Artboard tool replays on its artboards
2026-11-09 07:47:00 +08:00
BFlat 0b0f8d71eb Merge pull request #5475 from dotCooCoo/fix/spiral-decay-per-wind
Spiral: Decay applies once per full wind
2026-11-09 07:46:47 +08:00
BFlat c0887164cc Merge pull request #6258 from dotCooCoo/fix/plugin-clear-cache-test
Plug-ins: clearing every plug-in's cache is tested in a binary of its own
2026-11-09 07:46:33 +08:00
dotCooCoo a7fc513a0c Merge main into feat/3d-classic-extrude-bevel 2026-11-08 15:34:06 -08:00
dotCooCoo 4c3f0b4c33 Merge main into fix/save-screens-unknown-options 2026-11-08 15:32:45 -08:00
dotCooCoo b8ab981058 Merge main into feat/ai-symbol-libraries 2026-11-08 14:56:51 -08:00
dotCooCoo 64c7c2703e Merge main into feat/plugin-menu-commands 2026-11-08 14:41:13 -08:00
dotCooCoo 4fff063dcc Merge main into fix/export-unknown-options 2026-11-08 14:25:57 -08:00
dotCooCoo f9940486a8 Merge main into fix/spiral-decay-per-wind 2026-11-08 14:03:31 -08:00
dotCooCoo f88815abd9 Merge main into fix/graph-series-object-opacity 2026-11-08 14:02:59 -08:00
dotCooCoo 987f50619a Merge main into feat/trace-keep-colors 2026-11-08 13:49:11 -08:00
dotCooCoo ceca6fa796 Merge main into feat/plugin-importers 2026-11-08 13:46:41 -08:00
dotCooCoo 02c2e5b52c Merge main into fix/plugin-grant-module-hash 2026-11-08 13:46:32 -08:00
dotCooCoo b817baca58 Merge main into feat/trace-keep-colors 2026-11-08 13:45:04 -08:00
dotCooCoo d8ff63f5d0 Merge main into feat/character-anti-aliasing-method-r 2026-11-08 13:24:43 -08:00
dotCooCoo 83248b9bb4 SVG Filters: export writes a filter live only when import can read it back
SVG export wrote an SVG filter as a live <filter> when its SVG 1.1 form
was at most 64 KB, without counting the region and id it writes into
it. A filter close to the limit came back over it, SVG import dropped
it, and the reopened object had no filter.

Export now leaves room for the id and the measured region, checks the
SVG 1.1 form the way import does, and counts each character past U+00FF
as the character reference Latin-1 output writes. A filter that does not
fit is exported as the other pixel effects are. The SVG 1.1 form and its
check are kept for the filters seen last, as checked filters already
are, so export does not check one filter again for each object.
2026-11-09 04:19:44 +07:00
dotCooCoo 1e21154e4d Symbols: symbol.instance.setAppearance refuses a fill or stroke an object does not draw
Squashed from #6232 onto main.
2026-11-09 04:19:25 +07:00
dotCooCoo 35d1ea12c2 Merge main into fix/plugin-grant-module-hash 2026-11-08 13:17:53 -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 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
dotCooCoo 6d87858e2b Merge main into feat/plugin-importers 2026-11-08 13:00:01 -08:00
dotCooCoo a717e34f02 Merge main into fix/plugin-grant-module-hash 2026-11-08 12:55:59 -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 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
dotCooCoo 8138dc69ea Merge main into feat/trace-keep-colors 2026-11-08 12:24:14 -08:00
dotCooCoo c63f634e0c Merge main into fix/placed-gradient-follows-warp 2026-11-08 12:22:54 -08:00
dotCooCoo 87d8938df1 Merge main into fix/batch-override-export-for-screens-folder-r 2026-11-08 12:18:17 -08:00