Commit Graph
9690 Commits
Author SHA1 Message Date
dotCooCoo 918ef940cb Merge main into feat/plugin-importers 2026-11-08 16:45:20 -08:00
BFlat 22f5ede66f Merge pull request #6161 from dotCooCoo/feat/ai-editing-data-s6b2
.ai save: the editing copy keeps graphic styles and links to them
2026-11-09 07:52:12 +08:00
BFlat 302c0575e3 Merge pull request #6194 from dotCooCoo/feat/js-builtins-text
JavaScript: a realm has the String, Number, RegExp and Date built-ins
2026-11-09 07:48:04 +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 1961b2468d Merge pull request #5024 from dotCooCoo/fix/outline-stroke-keeps-effects-on-outline-r
Outline Stroke: geometry effects reshape the path that is outlined, as on the canvas
2026-11-09 07:47:22 +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 0cb2d5dbd8 Merge pull request #5030 from dotCooCoo/fix/issue-3748-r
Fix #3748: in isolation mode, art outside a clip group's mask can be selected and dragged
2026-11-09 07:46:54 +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 ecdd36483d Merge pull request #6259 from dotCooCoo/fix/ai-pattern-mask-ids
.ai import: opacity mask art in pattern and brush art takes document ids
2026-11-09 07:46:40 +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
BFlat c8d67344a9 Merge pull request #3968 from dotCooCoo/feat/trace-keep-colors
Image Trace: keepColors traces only the listed palette colors
2026-11-09 07:46:01 +08:00
BFlat 500cda491c Merge pull request #6257 from dotCooCoo/fix/escape-return-tool-docs
Type: docs say Escape returns to the tool whose double-click chose the Type tool
2026-11-09 07:45:45 +08:00
dotCooCoo 438f1cd8f2 Plug-ins: importer tests use American spelling 2026-11-08 15:35:45 -08:00
dotCooCoo 3a7667a476 Merge main into feat/plugin-importers 2026-11-08 15:19:59 -08:00
dotCooCoo 421189893f Plug-ins: composite fonts stay out of importer filters; base64 size is checked first
File › Open imports .vccomposite files as composite fonts, so an importer
listing that extension no longer shows it under its own filter or in
document.formats. File › Open gets a Composite fonts filter.

document.open refuses dataBase64 that decodes past the importer input
limit before decoding it. A file whose start shows a built-in format
still opens as that format, as it does by path.
2026-11-08 15:18:31 -08:00
dotCooCoo 230fbb96a3 Merge main into feat/ai-editing-data-s6b2 2026-11-08 15:00:10 -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 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 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 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
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 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
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 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