Merge main into feat/plugin-importers

This commit is contained in:
dotCooCoo
2026-11-08 13:46:41 -08:00
44 changed files with 942 additions and 38 deletions
+10 -4
View File
@@ -1797,9 +1797,14 @@ already walks Image Trace. Short agent entry points:
art for itself only and stays linked. `symbol.instance.setAppearance {id?, path, fill?, stroke?, opacity?, blend?}`
names the object by `path`, child indices in paint order from the art's root down through its groups (`[]` is the
root; `[1, 0]` is the first object of the art's second member when that member is a group). `fill` and `stroke` take
a colour string or the paint params of `paint.setFill` (`color`, `none`, `swatch`, `tint`, `gradient`), `opacity` is
0..100 and `blend` a blend mode name; `null` gives one back to the symbol. It is refused for a static symbol and for
a path that names no object. On the canvas (VectorCraft's own rule), a Direct Selection click on an instance of a
a colour string or the paint params of `paint.setFill` (`color`, `none`, `swatch`, `tint`, `gradient`). Paths,
compound paths, type, groups and layers take both. A symbol instance takes a solid color or `none` as its fill,
which stains its art, and no gradient or pattern fill and no stroke. An image takes a fill or stroke only when that
fill or stroke has a Convert to Shape or Outline Object effect. A guide, blend, envelope, Repeat, Intertwine group,
gradient mesh or placed document takes neither. A refused fill or stroke (VectorCraft's own rule) gives an error
that names the key and the object, and nothing of the call is applied; `opacity`, `blend` and `null` are taken for
every object, so a stored change can be taken back. `opacity` is 0..100 and `blend` a blend mode name; `null` gives
one back to the symbol. It is refused for a static symbol and for a path that names no object. On the canvas (VectorCraft's own rule), a Direct Selection click on an instance of a
dynamic symbol selects the path, compound path or type object of its art under the pointer and outlines it
(`symbol.instance.selectPart {id, path}`; Alt or Shift selects the instance whole). While it is selected,
`paint.setFill` and `paint.setStroke` with a solid color or none, `paint.invert` and `paint.complement` on a solid
@@ -3225,7 +3230,8 @@ names no earlier result as the previous primitive's result;
and an `feComposite` operator SVG 1.1 lacks, or `edgeMode` on a primitive other than `feConvolveMatrix`, left out, as
the canvas draws them. A filter with an `feBlend` mode SVG 1.1 lacks (`overlay` and the others), an `feDropShadow`
whose `flood-color` is `currentColor` or with `primitiveUnits="objectBoundingBox"`, or more than 64 primitives once
its shadows are expanded, has no SVG 1.1 form. In that case, otherwise, and with the SVG Tiny 1.2 profile, the object
its shadows are expanded, has no SVG 1.1 form. Neither does a filter whose written form, with its region and id, is
one SVG import would not read, such as one longer than 64 KB. In that case, otherwise, and with the SVG Tiny 1.2 profile, the object
becomes an image. SVG import keeps a filter that the live effects (Drop Shadow, the
glows, Gaussian Blur, Feather) can't express as an `svg.filter` effect holding the filter's XML, with `scale` and
`origin` from the object's user space, unless that user space is turned, skewed or scaled past 0.001 to 1000 points