Commit Graph
10704 Commits
Author SHA1 Message Date
ruchirguitar bcde7594fb M2.1: integrate current main and Pen Cut regression (#3380) 2026-11-09 04:40:11 +05:30
dotCooCoo ba5c57790f Docs: array methods skip holes only in long sparse ranges
A range of 4,096 indices or fewer is visited index by index, and so is a
longer one that is at most 8 times the properties on the object and its
prototypes. Each index visited takes fuel.
2026-11-08 15:08:45 -08:00
dotCooCoo 05924c9e4c Merge main into fix/plugin-grant-module-hash 2026-11-08 15:07:23 -08:00
dotCooCoo 6326d1c4ff Plug-ins: the install comment states what a failed module restore leaves 2026-11-08 15:07:20 -08:00
dotCooCoo 48fe46be1f Tests: .ai object limit tests check the symbol's limit and derive the mask's
The symbol test now requires a warning and at most the given number of
objects at every limit below what the reader reads. The mask test takes
its limits from the objects the reader reads and finds where the mask
first fits.
2026-11-08 15:04:51 -08:00
dotCooCoo da7194030f Merge main into feat/plugin-effect-paint 2026-11-08 15:01:41 -08:00
dotCooCoo 0945eaf2b3 Merge main into perf/contours-cover-lists 2026-11-08 15:00:56 -08:00
dotCooCoo 230fbb96a3 Merge main into feat/ai-editing-data-s6b2 2026-11-08 15:00:10 -08:00
dotCooCoo 342cab2f99 Shape Builder: a plane key held with a dropped press is still made
When a press held during a merge is dropped, the held pointer events
and tool keys after it are removed, as before, but a perspective plane
key (1 to 4 with the grid shown) stays held and is made after the
merge, as it is when no merge is running. Pointer events held after the
last held release, which follow a press the tool already has, are
removed with that press.
2026-11-08 14:57:46 -08:00
dotCooCoo b8ab981058 Merge main into feat/ai-symbol-libraries 2026-11-08 14:56:51 -08:00
dotCooCoo e2beb714b0 Merge main into feat/help-bar-visibility 2026-11-08 14:56:29 -08:00
dotCooCoo e32212326a Merge main into fix/ai-writer-object-limit-2 2026-11-08 14:52:07 -08:00
dotCooCoo 64c7c2703e Merge main into feat/plugin-menu-commands 2026-11-08 14:41:13 -08:00
Don Omondi 8383b2af6d Merge remote-tracking branch 'upstream/main' into fix/eps01-editing-overlay
# Conflicts:
#	docs/file-format-parity.md
#	docs/gaps.md
2026-11-08 17:39:34 -05:00
ruchirguitarandCursor 46cc28b299 M2.1: merge current main and keep path-deletion evidence (#3380)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-09 04:09:05 +05:30
dotCooCoo f064d78678 Merge main into fix/spiral-decay-per-wind 2026-11-08 14:31:04 -08:00
BFlat 205f54a7cb Merge pull request #6254 from adambelis/fix/blend-curved-spine-orientation
M2.1: blend Align-to-Path smooth on curved spines
2026-11-09 06:27:53 +08:00
dotCooCoo 4fff063dcc Merge main into fix/export-unknown-options 2026-11-08 14:25:57 -08:00
dotCooCoo 9a312e8ada Type: type in a composite font is measured in its own document's definition
- A file read for opening is laid out in the composite fonts registered
  then. Opening a document and reverting the front one now measure again
  the type set in a font named like a composite font that an open document
  defines, the font database holds or the session registered earlier. Type
  in other fonts, missing ones included, keeps the bounds it was read with.
- Switching to a document or closing the front one measures again the type
  set in a composite font whose definition changed, and any type without
  bounds.
- A document reverted while in the back measures its type in composite
  fonts when it comes to the front, not in the front document's.
- Text holding an inline graphic whose symbol's type was measured again
  takes the graphic's new size.
- A failed or panicked command puts the font database's composite fonts
  back with the documents.
- Setting a composite font to the definition an export lends keeps it after
  the export ends.
2026-11-08 14:23:43 -08:00
dotCooCoo 87cd34bbd1 Merge main into fix/shape-builder-merge-off-ui-thread 2026-11-08 14:21:52 -08:00
dotCooCoo 02f13ce619 Shape Builder: a press dropped while a merge is computed is not made after it
A long touch, a canceled touch or a second finger drops the press in
progress. When that press was held because a merge was being computed on
another thread, the tool had not seen it, yet it stayed in the held input
and was made once the merge was applied: the Shape Builder stayed in its
drag, or a Cmd-press kept the selection tool lent. Dropping such a press
now removes it, and what was held after it, from the held input, and
leaves the tool as it is.
2026-11-08 14:20:56 -08:00
dotCooCoo 5c17cfd038 Tests: warped placed gradients check each warp's bounds and movement
The Warp gradient test now compares the baked bounds with the square's
outline mapped through warp_point, for every style and parameter set. It
requires the gradient to move exactly when those bounds move, and pins
39 of the 45 cases as moving the bounds.
2026-11-08 14:20:47 -08:00
dotCooCoo 5366b9e323 Merge main into feat/plugin-filter-inputs 2026-11-08 14:19:35 -08:00
dotCooCoo 6e2a127d5e Merge main into feat/js-builtins-core 2026-11-08 14:13:17 -08:00
dotCooCoo 33a10656ff Merge main into feat/js-builtins-text 2026-11-08 14:07:49 -08:00
bflatastic 8e45313501 Blend: the spine's ends are its exact end points 2026-11-09 05:06:28 +07:00
dotCooCoo 1940d3e529 .ai import: opacity mask art in pattern and brush art takes document ids
A pattern's or a brush's art was copied into the document with new ids,
but the art of an opacity mask inside it kept the ids of the reader that
read the definition. Those ids could repeat ids of objects in the
layers. The mask art now takes document ids, as a symbol's art already
does.
2026-11-08 14:06:24 -08:00
dotCooCoo e3e716c441 Tests: translucent brushed type compares each pixel with full opacity
The test for Crisp and Strong type in a scatter brush stroke at 50% opacity
now checks that every pixel is half of what the same stroke draws at full
opacity. It fails without the coverage fix for Crisp as well as for Strong.
2026-11-08 14:05:55 -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
ruchirguitar 7185ef4844 Merge remote-tracking branch 'origin/main' into SidePanelCollapseArrow
Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	docs/gaps.md
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-11-09 03:31:09 +05:30
bflatastic d58000b5df Objects on Path: the stretched-group test allows the spine's rounding 2026-11-09 04:52:48 +07:00
dotCooCoo 987f50619a Merge main into feat/trace-keep-colors 2026-11-08 13:49:11 -08:00
dotCooCoo e4d7e588ab Merge main into feat/plugin-effect-paint 2026-11-08 13:48:07 -08:00
dotCooCoo ceca6fa796 Merge main into feat/plugin-importers 2026-11-08 13:46:41 -08:00
dotCooCoo d1afb688cf i18n: French rows keep the no-break space before punctuation 2026-11-08 13:46:39 -08:00
dotCooCoo 02c2e5b52c Merge main into fix/plugin-grant-module-hash 2026-11-08 13:46:32 -08:00
bflatastic 863023d7de Blend: a vanished spine tangent takes the curve's direction nearby; the unreachable copy after the loop goes 2026-11-09 04:45:17 +07:00
dotCooCoo e4e6e0d382 Plug-ins: a painted piece linked to a global swatch follows its color
A piece linked to a global swatch is drawn in the swatch's current color at its own tint, and kept art and rasters follow a color or spot edit and its Undo. A value of `paintOutput` other than true is refused by a translated error. Tests in the effects crate pass the new document argument.
2026-11-08 13:45:17 -08:00
dotCooCoo 623f7449bc Type: the Escape return target is also cleared when another document or window becomes active
Switching documents, or windows of a document, deactivates the Type tool, which clears the tool its double-click came from, so Escape after a later edit goes to the Selection tool. The field's comment and the two checklist rows now say so.
2026-11-08 13:45:14 -08:00
dotCooCoo b817baca58 Merge main into feat/trace-keep-colors 2026-11-08 13:45:04 -08:00
adambelisandCraft Bot 2709a5191f M2.1: blend Align-to-Path smooth on curved spines
Spine::at_length computed tangents from flattened polyline chords, which
are piecewise constant and jump discretely between chords on curved
spines. Steps oriented to the spine with Align to Path stuttered at
large step counts.

Fix: store the original PathData in Spine and compute the tangent from
the original cubic at the true arc-length position via ParamCurveDeriv,
proportionally mapping flattened arc-length s onto each segment's curve
arclength using anchor_length values, instead of using piecewise-constant
chord directions.

Updated segment-selection condition in Spine::at_length to skip segments
whose flattened end is not greater than start before checking whether s is
within the segment. Preserve the existing final-segment fallback so
at_length(0.0) selects a nonzero segment and uses its tangent.

Added zero-derivative fallback tangent for blend-step sampling to keep
Align to Path from passing a zero tangent to atan2.

Added missing docstrings for Spine::new and Spine::length to satisfy
docstring coverage requirements.

Co-authored-by: Craft Bot <bot@storytold.dev>
2026-11-09 04:42:48 +07:00
adambelisandCraft Bot cb5300415a M2.1: blend Align-to-Path smooth on curved spines
Spine::at_length computed tangents from flattened polyline chords, which
are piecewise constant and jump discretely between chords on curved
spines. Steps oriented to the spine with Align to Path stuttered at
large step counts.

Fix: store the original PathData in Spine and compute the tangent from
the original cubic at the true arc-length position via ParamCurveDeriv,
proportionally mapping flattened arc-length s onto each segment's curve
arclength using anchor_length values, instead of using piecewise-constant
chord directions.

Updated segment-selection condition in Spine::at_length to skip segments
whose flattened end is not greater than start before checking whether s is
within the segment. Preserve the existing final-segment fallback so
at_length(0.0) selects a nonzero segment and uses its tangent.

Added missing docstrings for Spine::new and Spine::length to satisfy
docstring coverage requirements.

Co-authored-by: Craft Bot <bot@storytold.dev>
2026-11-09 04:42:48 +07:00
adambelisandCraft Bot b8d23e280b M2.1: blend Align-to-Path smooth on curved spines
Spine::at_length computed tangents from flattened polyline chords, which
are piecewise constant and jump discretely between chords on curved
spines. Steps oriented to the spine with Align to Path stuttered at
large step counts.

Fix: store the original PathData in Spine and compute the tangent from
the original cubic at the true arc-length position via ParamCurveDeriv,
proportionally mapping flattened arc-length s onto each segment's curve
arclength using anchor_length values, instead of using piecewise-constant
chord directions.

Added missing docstrings for Spine::new and Spine::length to satisfy
docstring coverage requirements.

Co-authored-by: Craft Bot <bot@storytold.dev>
2026-11-09 04:42:48 +07:00
adambelisandCraft Bot 5589049a47 M2.1: blend Align-to-Path smooth on curved spines
Spine::at_length computed tangents from flattened polyline chords, which
are piecewise constant and jump discretely between chords on curved
spines. Steps oriented to the spine with Align to Path stuttered at
large step counts.

Fix: store the original PathData in Spine and compute the tangent from
the original cubic at the true arc-length position via ParamCurveDeriv,
proportionally mapping flattened arc-length s onto each segment's curve
arclength using anchor_length values, instead of using piecewise-constant
chord directions.

Reviewed-by: craft-house-rules

Co-authored-by: Craft Bot <bot@storytold.dev>
2026-11-09 04:42:48 +07:00
Adam Belis 4851736364 M2.x: blend Align-to-Path smooth on curved spines
Spine::at_length computed tangents from flattened polyline chords, which
are piecewise constant and jump discretely between chords on curved
spines. Steps oriented to the spine with Align to Path stuttered at
large step counts.

Store the original PathData in Spine and compute the tangent from the
original cubic at the true arc-length position via ParamCurveDeriv,
instead of flattened chord directions.

Adds a regression test walking 200 samples along a curved spine and
asserting each tangent step stays under 0.1 radians.
2026-11-09 04:42:48 +07:00
BFlat 61dacea80b Merge pull request #6256 from dotCooCoo/fix/svg-filter-export-size-limit
SVG Filters: export writes a filter live only when import can read it back
2026-11-09 05:42:18 +08:00
BFlat cef382f16a Merge pull request #6255 from dotCooCoo/fix/svg-outlined-text-label
SVG export: outlined type keeps its text as an accessible name
2026-11-09 05:42:04 +08:00
BFlat 1f496af57d Merge pull request #6251 from dotCooCoo/fix/3d-export-unit-normals
3D export: Revolve mesh normals are unit length and short walls face out
2026-11-09 05:41:50 +08:00
BFlat 21a55f3d8a Merge pull request #6235 from dotCooCoo/fix/prefs-dialog-cfg-clippy
Preferences: the settings filter builds without a clippy warning on macOS
2026-11-09 05:41:36 +08:00