Commit Graph
4562 Commits
Author SHA1 Message Date
dotCooCoo fbf2bee87b MCP: a malformed artboard or history index is reported as not a whole number
The artboard commands that take `index` or `indices`, a replayed
`selectedArtboards`, the artboard Align and Distribute commands
(`artboard`, `activeArtboard`), `edit.newDocumentFromState` and Paste in
Place, in Front and in Back now report a value that is not a whole number
with "`<key>` must be a whole number" or "`<key>` must contain whole
numbers", naming the key. A whole number that names no artboard or state
keeps `no such artboard`, `no history state N` or the paste range message.

- A null artboard `index` is `missing index`, as for other required keys.
- An `indices` value that is not a list, an empty list and a malformed
  entry each have their own message naming the key.
- `edit.newDocumentFromState` still uses the current state for an omitted
  or null `index`.
- Paste checks the form of both `artboard` and `artboards` before either
  range.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-14 07:57:00 -08:00
dotCooCoo f7d1643a83 Live Paint: Make keeps the direction of gradient strokes along or across the path
A stroke whose only setting that depends on direction is a gradient along or
across the stroke now goes through the same edge fitting as dashed strokes, so
each cut edge runs the way its source path does and the gradient keeps its
direction.
2026-11-14 07:56:39 -08:00
dotCooCoo c7cd768399 Merge main into fix/clip-effects-hit-test 2026-11-14 07:42:26 -08:00
dotCooCoo 8ebe4cd1c3 Merge main into fix/live-paint-make-drawn-rows 2026-11-14 07:24:33 -08:00
dotCooCoo 0df1c3f284 Merge main into fix/emfplus-import 2026-11-14 07:24:22 -08:00
dotCooCoo 8c607c8070 Merge main into fix/type-no-op-undo-more 2026-11-14 07:24:09 -08:00
dotCooCoo a3f65c677a Merge main into fix/graph-wedge-legend-black-kept 2026-11-14 07:24:01 -08:00
dotCooCoo 96a8a0c6d6 Merge main into fix/svg-raster-keeps-resolution 2026-11-14 07:23:45 -08:00
FredApps 676f0524cc Merge pull request #1203 from FredApps/fix/spiral-decay-setting-20261011
Keep Spiral decay settings consistent with drawn geometry
2026-11-14 16:22:35 +01:00
dotCooCoo 132becf3ad Merge main into feat/smooth-keeps-corners 2026-11-14 07:20:07 -08:00
dotCooCoo 882980ed0f Merge main into feat/arrange-nest 2026-11-14 07:17:57 -08:00
dotCooCoo fbb6546621 Merge main into fix/pdf-art-bounds-printing-layers 2026-11-14 07:15:53 -08:00
dotCooCoo 9977ef2e01 Merge main into fix/graph-series-group-opacity 2026-11-14 07:11:27 -08:00
BFlat edefbd0e7d Merge pull request #7449 from dotCooCoo/fix/links-stored-brush-art
Links: placed images in stored brush art get Links rows
2026-11-14 21:55:20 +07:00
BFlat cbba5e85fe Merge pull request #7528 from dotCooCoo/feat/ai-style-named-gradients
PDF/.ai import: graphic styles that paint with a named gradient load with it
2026-11-14 21:54:55 +07:00
BFlat 27a259e2db Merge pull request #7505 from dotCooCoo/fix/no-op-undo-steps
Undo: no step when Randomize Opacity or a type setting changes nothing
2026-11-14 21:54:21 +07:00
BFlat 66d24335e1 Merge pull request #7599 from dotCooCoo/fix/trace-hand-in-same-document
Image Trace: a finished trace is applied only to the document it was made in
2026-11-14 21:54:04 +07:00
BFlat 8863c41560 Merge pull request #7581 from dotCooCoo/fix/pdf-cmyk-image-keeps-icc
PDF export: CMYK images that keep their numbers carry their ICC profile
2026-11-14 21:53:33 +07:00
BFlat 68b246851b Merge pull request #7261 from dotCooCoo/fix/smooth-keeps-closed-start
Smooth tool: smoothing over a closed path's first anchor keeps its start
2026-11-14 21:53:16 +07:00
BFlat 5762ec729b Merge pull request #7598 from dotCooCoo/fix/symbol-art-bounds-nested
Symbols: a symbol nested in symbol art is measured by its own art
2026-11-14 21:53:07 +07:00
BFlat 011d5c2b5d Merge pull request #7457 from dotCooCoo/fix/action-batch-step-number
Actions: Batch errors name the step by its place in the commands sent
2026-11-14 21:52:59 +07:00
BFlat 6e3ec907de Merge pull request #7592 from dotCooCoo/fix/brush-freehand-unknown-brush
Brushes: brush.freehand refuses a brush or style it cannot use
2026-11-14 21:52:42 +07:00
BFlat 158558c3d5 Merge pull request #7539 from dotCooCoo/fix/perspective-grid-noop-undo
Perspective: reapplying the current grid preset adds no undo step
2026-11-14 21:52:35 +07:00
BFlat b2b82ddbd6 Merge pull request #7464 from dotCooCoo/fix/followup-7305
Path: path.setHandle to the handle's own point leaves a smooth anchor unchanged
2026-11-14 21:52:26 +07:00
BFlat c248d097ac Merge pull request #7545 from dotCooCoo/fix/remove-breaks-named-locked-type
Artwork Cleanup: text tools act on the locked or hidden type that ids names
2026-11-14 21:52:18 +07:00
BFlat 64dd5eb174 Merge pull request #7418 from dotCooCoo/fix/reflected-dimension-line
Dimension tool: a reflected aligned dimension has its line on the reflected side
2026-11-14 21:52:10 +07:00
BFlat 508a0b0180 Merge pull request #7597 from dotCooCoo/fix/separations-spot-stop-plates
Print: a spot gradient stop prints its process plates on the separations
2026-11-14 21:51:47 +07:00
BFlat 09f882b9d2 Merge pull request #7534 from dotCooCoo/fix/tiled-documents-own-profiles
Color management: documents behind the front one draw through their own profiles
2026-11-14 21:51:30 +07:00
BFlat 4807a2b6de Merge pull request #7596 from dotCooCoo/test/swatch-batch-spot-options-defaults
Swatches: test Spot Colors options and Default Swatches replace in a batch
2026-11-14 21:51:21 +07:00
BFlat ca546d0831 Merge pull request #7473 from dotCooCoo/fix/map-links-stop-plates
Swatches: a gradient stop unlinked from its spot swatch also drops its plates
2026-11-14 21:50:25 +07:00
BFlat 4c9d678863 Merge pull request #7591 from dotCooCoo/fix/swatch-edit-gradient-aspect
Swatches: a replacement gradient or pattern is stored the way a new swatch stores it
2026-11-14 21:50:09 +07:00
BFlat 60be06f7eb Merge pull request #7526 from dotCooCoo/perf/flatten-sweep-staggered-boxes
Flatten: boxes staggered right and down meet only the box before in the grouping sweep
2026-11-14 21:49:27 +07:00
BFlat 98324db329 Merge pull request #7460 from dotCooCoo/fix/plugin-store-folder-lock
Plug-ins: windows and processes take turns on the Plug-ins folder
2026-11-14 21:49:19 +07:00
dotCooCoo f6ad3ecc01 Merge main into feat/live-paint-selection-double-click
# Conflicts:
#	docs/target-app-parity.md
2026-11-14 06:28:52 -08:00
dotCooCoo 160abff792 Merge main into perf/flatten-held-guides-one-walk 2026-11-14 06:11:45 -08:00
dotCooCoo e9c26abe4d Flatten: held ruler guides are gathered in one walk
When a flattened root is a sublayer, its ruler guides were found by
checking whether the sublayer held any and then walking its whole
subtree again to collect them. They are now collected in one descent
through the sublayer and its sublayers, looking at each of their
children once. The guides, their order and the layer each one goes to
are unchanged.

A test-only record of the nodes looked at checks that each one is
looked at once and that the guides keep their paint order.
2026-11-14 06:11:07 -08:00
dotCooCoo 20529f1ffb Merge main into fix/graph-wedge-legend-black-kept 2026-11-14 06:08:51 -08:00
dotCooCoo 9efde43f1d Metafile import: EMF and WMF are read through craft-metafile, so EMF+ pictures open
EMF and WMF import now plays the records with the shared craft-metafile
reader (storytold/craft-libs#778, at the craft-libs rev the SVG, EPS and
DXF crates already use) and maps its picture onto the document here:
paths with their fills, strokes, caps, joins, miter limits and dashes,
clipping groups, images and point type. The EMF and WMF record players in
crates/metafile/src/import and the DIB decoder they used are removed. The
writers are unchanged, and the PICT reader keeps its own player.

What changes for a file being opened, placed or pasted, and for an EPS
file's Windows metafile preview (read when its PostScript can't be):

- An EMF that draws with EMF+ records is read from them. It opened empty,
  with a warning that EMF+ is not read. A file with both kinds of record
  is read from its EMF+ records too.
- Hatched and pattern brushes fill with the average color of the brush's
  tile, translucent where the tile has gaps. Hatches filled with the hatch
  color and pattern brushes with gray.
- Translucent fills, strokes and EMF+ text keep their alpha as opacity.
- Text keeps a stretch across from the world transform; it kept only the
  turn. Text the file clips to a rectangle is clipped to it, and an
  underlined or struck-through font gives underlined or struck-through
  type.
- A clip path whose bounding box holds the whole picture is kept unless
  it is that rectangle; a diamond or a bow tie around the picture was
  dropped.
- Images drawn with SRCAND, SRCPAINT or SRCINVERT are drawn as they look
  over white, and images drawn with other raster operations are drawn as
  a plain copy. They were left out with a warning.
- Excluded clip rectangles and the other clip region modes are applied.
  A clip path combined with RGN_OR, RGN_XOR or RGN_DIFF is ignored
  without the warning it gave.
- An image past the reader's size or pixel limits, or one that can't be
  decoded, is left out without a warning of its own. A file past the
  reader's limits (more than 32 nested clip paths, 200,000 drawn items,
  256 MiB held) is read up to that point without a warning.
- An EMF record whose size is not a multiple of 4 ends the file, with the
  "ends early" warning.

Tests: an EMF+ only picture imports its fill (it failed before), a dual
EMF+ file draws its translucent EMF+ fill and not its fallback, hatch and
pattern brush colors, clipped and underlined text, excluded clip
rectangles, a shared clipping group, an odd record size, WMF at 1440
units an inch without a placeable header and at its own units with an
inverted box, an EMF without a frame, diamond and bow-tie clips, text with a
stretch, clips nested past the stack and 200,000 clip records; the fuzz
test gains random EMF+ records.
2026-11-14 06:04:19 -08:00
dotCooCoo 551b8bd235 Merge main into fix/live-paint-make-drawn-rows 2026-11-14 06:01:57 -08:00
dotCooCoo d058086fc6 Merge main into feat/arrange-nest 2026-11-14 06:00:51 -08:00
dotCooCoo c05f5b83cf Merge main into feat/smooth-keeps-corners 2026-11-14 05:58:33 -08:00
dotCooCoo d233cd8291 Merge main into fix/graph-series-group-opacity 2026-11-14 05:57:05 -08:00
ncic cd89999939 Merge remote-tracking branch 'upstream/main' into pencil-cursors
# Conflicts:
#	docs/target-app-parity.md
2026-11-14 14:42:23 +01:00
dotCooCoo 1304014e65 Merge main into fix/text-wrap-offset-refused 2026-11-14 05:38:38 -08:00
BFlat 3c15649730 Merge pull request #7427 from dotCooCoo/fix/live-paint-expand-drawn-stroke
Live Paint: Expand keeps the faces and edges that draw
2026-11-14 20:37:59 +07:00
BFlat 9f55dbdd46 Merge pull request #7327 from dotCooCoo/fix/graph-label-paint-recolor
Graphs: recolor, stroke and gradient edits on labels are kept for their kind
2026-11-14 20:37:50 +07:00
BFlat ca0050be1b Merge pull request #7578 from dotCooCoo/fix/gradient-spot-colorants-drawn-stops
PDF and EPS export: gradients name only the spot inks of stops that color something
2026-11-14 20:37:42 +07:00
BFlat 9800d48e58 Merge pull request #7571 from dotCooCoo/fix/cmyk-tiff-alpha-16-bit
TIFF: a 16-bit CMYK or gray TIFF with alpha converts at 16 bits
2026-11-14 20:37:26 +07:00
BFlat c8230b469a Merge pull request #7422 from dotCooCoo/fix/dcs-placement-clip-keeps-file-clip
Place: Placement Options clip a DCS image inside its file's clipping path
2026-11-14 20:37:10 +07:00
BFlat f793044f83 Merge pull request #7587 from dotCooCoo/fix/open-dimension-labels-own-fonts
Dimensions: an opened file redraws its labels in its own composite fonts
2026-11-14 20:36:46 +07:00