An Abutting trace with Fills now holds a "Seam Fills" group under its
paths. For each color it has one stroke, 1.5 image pixels wide, along
the edges where a filled path of that color meets a filled path drawn
after it, in that color. A renderer that anti-aliases each path on its
own no longer shows a light hairline along those edges. The traced
paths and their shared edges do not change, and edges against the
image's border, a transparent area or a color left out get no stroke.
- vectorcraft-trace: `seam_fills` finds the segments two filled paths
share and strokes them in the lower path's color (one stroke per
gradient path). Overlapping, traces without Fills and Flat Logo get
none.
- Image Trace commands: the group comes under every path (right above
the hidden image in a live trace). Expand keeps it, Expand by color
leaves it under the color groups, and a trace whose paths have more
than half of the anchor limit gets no seam fills.
Docs: docs/mcp.md, the params text, docs/target-app-parity.md.
Variable Options in the Variables panel only renamed a variable, and no
command changed a variable's kind. variable.rename now takes
{name, newName?, kind?} and renames the variable, changes its kind, or
both, in one undo step, with none when nothing changes. A null or empty
value, an unknown kind, a taken name and locked variables are refused.
A kind change unbinds the objects that can't hold the new kind (text
keeps type with no other text variable, image keeps image objects,
graph keeps graph roots, visibility keeps every object) and drops the
variable's values in every data set. The dialog shows the variable's
name and kind and sends both.
The Assign tab has a New Row button before Merge. With art selected it
adds a row with no current colors above the first selected row, or at
the top, with that row's new color, and selects it. Merge with the new
row first moves the other rows' current colors into it, and they take
its new color. The row shows an empty slot until then.
An empty row recolors nothing and does not count toward Colors. OK
sends it with the other rows. recolor.apply adds no library swatch for
it and gives a rewritten color group no color from it, in the dialog's
groupColors and in the command's default.
The Variables panel drew each variable as one "name · object" line in
the order the variables were defined, with no headers and no sorting.
The list now has three columns with headers: the type icon, Variables
and Objects. A click on a header sorts the list by that column, and a
second click reverses the order. The new command variable.sort {by:
name|object|type|none, descending?} sets the order, which is panel
state: not saved and not an undo step. variable.list lists the
variables in that order and reports it as sort. An unknown by, or a
descending that is not true or false, is an error.
A clip group whose clipping path is type with a fill or stroke lost that
paint when a group around it had a geometry effect. Outlining the type
for the effect replaced it with a group of glyph outlines, and a group
paints nothing as a clipping path. Distort effects lost it on the canvas
and in SVG and PDF; Transform effects that only move lost it in SVG and
PDF when other type in the group stayed type.
The type's outlines now clip, its fills become art behind the clipped
art inside the clip, and its strokes become art over it outside the
clip, as the canvas draws an unaffected clip group.
While the Selection, Direct Selection or Group Selection tool moves the
selection, or the Gradient tool draws a vector, W and H show the change
in x and y, with the distance and the angle under them. A Scale tool
drag shows its percentages; a Rotate, Reflect or Shear tool drag shows
the center of the selection's box and its angles. The Zoom tool adds the
magnification and the Paintbrush the name of its brush.
W and H follow Use Preview Bounds. With several objects selected, the
panel shows only the fill, stroke and type values they share, and Show
Options adds a tint's swatch and percentage and a gradient's swatch name.
- Tool::readout and Readout (crates/tools/src/readout.rs).
- info.readout returns the selection's size and the tool's readout.
- Docs: docs/mcp.md, docs/ui-parity.md.
Replace measured the image inside a PSD or PSB file's clip group only
when the new file brought its own clipping path. A plain image placed
with `replace` over such a clip group took only the group's center and
came in at 100%, losing the image's scale and rotation. The image in
the group is now measured whenever the new art is an image, clipped or
not.
Each 16-bit ink sample of an opaque CMYK TIFF, chunky or planar, is
reduced to the display's 8 bits as round(s * 255 / 65535), the rescaling
the PNG specification gives (section 13.12), where it was cut to its high
byte. An ink of 200 out of 65535 showed as none, and 0x8100 showed one
level too dark. The alpha path already rounds this way. The stored image
keeps its 16-bit samples.
A .ai in the legacy PostScript format opened with the box around all of
its art as the artboard, so art placed off the artboard came in on it.
Files opened as .eps keep their page.
- A .ai file read through its layers used the EPS rule from #1102, which
makes the art's bounding box the artboard. It now keeps the artboard
its header gives (%AI5_ArtSize around the center of %AI3_TemplateBox),
with its art outside it. The engine opens a PostScript .ai or .ait
through the new vectorcraft_eps::import_ai; an EPS's private data is
still read as an EPS.
- A .ai of versions 3 and 4 (no %AI5_FileFormat) does not record its
artboard's size. When it has a template box, its artboard is now
VectorCraft's own default, a US Letter page, centered on the template
box's center, which the version 7 specification (section 2.2) places
at the artboard's center. Before, it was the art's box. This also
applies to .ai files other apps write with a template box and no art
size (#1027).
- The center of a template box with a size (a file with a template
image) is now the middle of the box, not its lower-left corner.
A .ai with neither an art size nor a template box keeps its art's box
as the artboard.