A closed freehand stroke is fitted as the open stroke would be and closed by a
straight segment from its end back to its start. Fitted as one loop, the
closing segment curved on past both ends and back, like a hat's brim.
A Live Paint Bucket click or drag over faces that already have the
fill, a stroke on an edge that already has the paint and width, Gap
Options with the options the groups have and no gap to close, and Make
or Merge given one Live Paint group alone now leave the document, the
undo and redo steps and the saved state as they are, and reply as
usual. Such a fill or stroke also leaves the recent colors as they are.
Gap Options with Close Gaps With Paths makes a group's faces again only
when it adds a path or what paint stops at changes, so the faces keep
their ids otherwise.
Type > Create Outlines dropped the fills and strokes of the type object
itself (the items around the Appearance panel's Characters row), so the
outlines no longer drew what the type drew. On type without effects of
its own, Object > Expand outlines the type with the same command, so it
lost them before Fill or Stroke could expand them.
- Create Outlines puts those items on paths of the type's whole outline:
the items below the Characters row on one path under the glyph paths,
the others on one path over them, in their order. Unplaced gradients
are fixed to the type's layout box, as the canvas paints them.
- object.expand.info reports the type object's own strokes, pattern
fills and gradient fills, measuring a gradient on the whole outline.
It counts them only when the type has an outline: type of only spaces
reports none of them.
- The stroke flag of object.expand.info counts every stroke Outline
Stroke outlines, not only the topmost one, for paths as well as type.
Expand skipped Stroke for a visible stroke under a stroke with no
paint.
Create Outlines still does not carry over the type object's own effects.
Docs: docs/mcp.md, docs/target-app-parity.md.
Invert Colors, the Convert to commands, Saturate, Adjust Color Balance,
the Blend commands and Recolor Artwork recorded an undo step even when
they changed no color, for example Invert Colors with fills and strokes
off, Saturate at 0 or a second Blend Front to Back. The empty step also
cleared the redo steps. paint.invert and paint.complement on whole
objects, Apply as Filter (addon.color.filter) and Apply Nearest Swatch
run the same pass and did the same.
These commands now run on a copy of the document and record the step
only when something changed. Convert to Indexed Color uses the same
helper. Recolor Artwork also compares the documents when it counted no
recolored paint, so rewriting a color group's swatches still records
its step.
A graph draws the art of a column or marker design inside a series again
from the stored design. Rows, effects and graphic styles that a command
gave that art were lost the next time the graph's data, type or size
changed. The paint commands already left the art out.
- The appearance.* row and whole-appearance commands, effect.apply,
appearance.addEffect and the effect.* commands that edit, move or
remove an effect, threeD.mapGraphic, graphicStyle.apply,
graphicStyle.addFromLibrary with apply, transparency.set with a fill
or stroke item, and appearance.copyFrom (as the target) leave out any
object inside a series group other than a path directly in it, given
by id, selected or reached through target: "contents". They edit the
other objects given, and a command whose objects are all design art
is an error.
- appearance.transfer with design art as its target, or as its source
without copy, is an error.
- A Pathfinder effect no longer groups selected design art.
- The paint commands given a design's copy with a fill or stroke item
leave it out as well.
docs/mcp.md states the rule, and the Graphs line in
docs/target-app-parity.md names it.
Session::replace_document on a tab other than the current one cleared
the bounds of type set in a font named like a composite font and left
that type with estimated bounds until the document came to the front.
- The replacement's type without bounds is measured at once, in the
document's own composite fonts, lent for the measuring. The front
document stays the one whose composite fonts are registered.
- When the document then comes to the front unchanged, its type in its
own composite fonts is not measured again. Type set in a composite
font only another document defines is still measured again, as
missing, and so is type set in a composite font name that another
thread's loan held with a different definition.
A legacy .ai graph (%_Gs ... %_GS) opened as plain art, with its table,
type, axes and settings left out. A grouped column, stacked column, line
or area graph now keeps them on its group when every record has the
shape and values the version 7 specification's appendix A gives, the
table holds at least one number, the drawn art strokes the plot's left
and bottom edges, and each series group is tagged once as a whole
column, holds only paths and paints them with one fill and one stroke.
The saved art stays as it is on open; Graph Data redraws the graph from
its data afterward, with each series' fill and stroke kept.
Any other graph (pie and scatter graphs, designs, customizations, record
shapes of later versions, tables past 10,000 categories, 256 series or
2,600,000 cells) keeps its art as plain objects with the existing note.
Saving a graph to .ai, in either form, now warns that its data and
settings are not written.
A path directly in a graph series lost what these commands gave it when
the graph was drawn again, for example after graph.setData:
- While Global Edit is on in an isolated graph, a match that is a series
path, or a series group whose paths take the edit, now has what
changed on its paths stored for their series: the paint, weight,
opacity and blend mode of the topmost visible fill and stroke, and the
object's opacity and blend mode. The edited match is stored by its own
command as before.
- addon.arrange.randomizeOpacity and addon.arrange.sort with apply
"opacity" now store the object opacity, with the blend mode, of the
series paths whose opacity they change. When they change several
paths of one series, the frontmost of them sets what the graph
stores, as for the other commands.
The graph stores them in the same undo step as the edit. The params
text of addon.arrange.randomizeOpacity and addon.arrange.sort,
docs/mcp.md and docs/target-app-parity.md describe the new behavior.
The check after each edit that the selected objects stay within the
canvas measured the whole of every selected path. Moving one anchor of
a 10,000-anchor path measured all 9,999 segments. A path or compound
path whose anchors and handles are all finite and inside the canvas
range now passes without being measured, because its curves stay inside
their control points. A path with a point outside that range is still
measured, so the check accepts and refuses the same edits as before.
path.moveAnchor to the point the anchor is already at, and
path.setHandle to the point the handle is already at, now leave the
document as it is and record no undo step.
vectorcraft_geom::path::measured_segments counts the segments that
PathData::bounds measures, and the new engine tests use it.