Object › Distribute follows Object › Align and lists Horizontal
Distribute Left, Center and Right, Vertical Distribute Top, Center and
Bottom, Horizontal Distribute Space and Vertical Distribute Space. Each
item runs the button's `align.distribute*` command, so it uses Align To,
the key object and the Distribute Spacing value, and with the Artboard
tool chosen it spaces the selected artboards.
Keep upstream codec and Global Edit work identical to main so only the 38 Tech Circuit feature files remain in the PR diff. Resolve the G5 documentation conflict by preserving completed Global Edit behavior and the Tech Circuit estimate reduction. Fresh deep CodeRabbit review of the exact feature diff passed with zero findings; no full local rebuild repeated.
Preserve current main documentation and translations while keeping the original Tech Circuit brush library. Formatting, all 13 focused brush-library tests, translation-label validation, and a fresh deep CodeRabbit review of all 38 feature files passed. The previous full local CI passed all 13 gates at 1030b7aa7; rely on PR CI for this integration.
Preserve Weather Icons and the Tech Circuit library while resolving documentation and Hungarian catalog conflicts. Validated all 13 cargo xtask ci gates on Linux and a fresh deep CodeRabbit review with zero findings.
Select > Start Global Edit now also takes rotated copies of the selected
object or group, in the highlights before the start, in the Global Edit
Options' Results count and in the started edit. An edit reaches each copy
turned by that copy's angle, so an anchor moved to the right on the
selected object moves downward on a copy turned a quarter turn clockwise.
The copy's angle is the one that lays the selected object's anchors and
handles on the copy's in order (a least-squares fit in the unit box),
and the copy is the same shape when each point then lies within a
millionth of the larger side of the copy's box. Reflected copies and
copies stretched along one direction stay unmatched. With Size, a rotated
copy matches when it is the object rotated without scaling. The no-match
message now names only reflected copies, in every catalog that has it.
Docs: docs/mcp.md, docs/gaps.md, docs/ui-parity.md and the evidence list
in docs/target-app-parity.md.
The For you and Skills tab buttons, a skill's row, a tutorial's row and
Back changed the Learn panel's view directly, so the control channel and
MCP could not choose a tab, open a skill's tutorials or go back.
- learn.tab {tab: forYou|skills} shows the panel on that tab; the Skills
tab keeps the skill and tutorial it had open.
- learn.skill {skill} shows the panel on the Skills tab with that skill's
tutorials and returns the skill as learn.list lists it.
- learn.back {} goes up one level, as Back does.
- A tutorial's row runs learn.show.
- The commands are listed in both UI command catalogs, and their labels
have a row in every catalog.
- Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md.
Each step of a Learn tutorial now has a check box that marks it done
once the tutorial's practice sample is open, and Finish tutorial marks
every step done. A skill's ring fills by the share of its tutorials
finished, its count shows tutorials finished of all, and a finished
tutorial has a check mark in its skill's list. Screen readers get the
count and the finished state as the rows' values.
The progress is saved with the UI preferences and read leniently: an
unknown tutorial, a step a tutorial does not have, a repeated entry or a
value of the wrong kind is skipped without resetting other preferences.
Reset progress under the list of skills clears it. A finished tutorial
can be finished again after a restart without reopening its sample.
- learn.markStep marks or clears one step; learn.resetProgress clears
the progress; learn.list adds done and total per skill and finished
and completedSteps per tutorial. Both new commands are in the UI
command catalogs, and bad params are errors that change nothing.
- New labels and messages have rows in every catalog.
- Docs: docs/mcp.md, docs/target-app-parity.md and docs/ui-parity.md.
The Actions panel menu has a Button Mode item with a check mark. While it
is on, the panel shows every action of every set by name as a button in
its Action Options color, without set names, steps or checkmarks, and a
click on a button plays that action without its excluded steps. Choosing
Button Mode again shows the list.
- ui.action.buttonMode {enabled?} switches the view (left out: the
other view) and is kept with the UI preferences; it cannot be turned
on while an action records.
- ui.action.playAt {set, action} plays an action by its place, as the
buttons do.
- An action without a color is an ordinary button. The bottom bar shows
only Stop Playing/Recording while an action plays or records, and Play
Current Selection while one waits at a stop. Menu items for a selected
action or the current set are off in Button Mode.
Docs: docs/mcp.md, docs/ui-parity.md, docs/target-app-parity.md.
The Pencil's and the Paintbrush's new-path, continue, close and straight-line
cursors are drawn on the crosshair already; Precise Cursors no longer turns
them into the plain crosshair, so the badge still says what the press or the
release does.
The continuation cursor (a short rising line) shows over an open end of a
selected path before any press, freehand too, and while a continuing stroke
nears an open end of another selected path it connects to. The straight-line
cursor becomes a short level line. A stroke continuing a path, a straight line
too, shows the closing ring within Close Paths When Ends Are Within of the
path's other end, and the release closes it; path.freehand takes the tool's
closed for extend instead of its own four-Fidelity distance.
Global Edit does not take images or text, so a group holding type or an
image is not a missing case. docs/gaps.md drops it from G5's Missing
line and states the exclusion next to the similar-groups entry, with
the help page. docs/ui-parity.md states the same exclusion and no longer
lists highlighting the matches before the start as remaining, since it
ships with a regression test. docs/target-app-parity.md gains an
Evidence line.
The UI chrome rows in target-app-parity.md listed SVG Interactivity and
context menus beyond the canvas as remaining work. The SVG Interactivity
panel ships, and the canvas, Layers rows, artboard rows, libraries,
rulers and toolbar grips have menus, so the rows now name context menus
in the panels that have none. ui-parity.md drops a second checklist row
that listed SVG Interactivity as missing; the row above it already
lists Retype, Comments and Version History.
The gap lists and area tables said Layers rows, panels and type have
no context menu. Layer, sublayer, group and object rows offer Collect
for Export for the row or every highlighted row, and right-clicking
type opens the canvas menu. The docs now list what ships and name the
remaining gaps: other row menu commands, guide and blend spine rows,
and panels without a menu. The Layers panel menu list adds Collect for
Export, and SVG Interactivity leaves the missing list.
The Scale and Reflect tools, object.scale, object.reflect and the
Transform panel flips act along a rotated bounding box instead of the
page axes, until Object > Transform > Reset Bounding Box, as Free
Transform does. The Scale and Reflect dialogs and the Properties panel
flips run the same commands and follow the box too.
- object.scale and object.reflect with a named axis take
basis?: "box"|"page" ("box" by default; "page" keeps the page axes;
any other value is an error before anything changes). The journal
records the basis, so recorded actions replay in the same frame; an
older recording without it acts along the box.
- A numeric Reflect axis and a Reflect axis drawn with the tool stay
lines on the page. While a Reflect drag has not drawn an axis away
from the reference point, the tool uses the box's vertical axis, and
Shift steps 45 degrees from the box.
- Mixed-angle selections and anchors selected with Direct Selection use
the page axes; an Alt-drag copy of such anchors scales the whole
objects along their box. Transform Again repeats the page matrix.
Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md.
The new Trim at Crossings Tool removes stretches of paths between the
places where they are crossed by another path or by themselves. A click
removes the stretch under the pointer, a drag removes every stretch its
rectangle touches, and an Alt-drag removes every stretch its freehand
line crosses. It works on every path that can be edited, selected or
not, and each gesture is one undo step.
- `addon.pathtools.trim {at, tolerance?}`, `{rect}` or `{points}` is the
command behind the tool. A closed path that loses a stretch becomes
open, an open path that loses a middle stretch becomes two paths with
its appearance in its place in the stacking order, and a path that
nothing crosses is removed whole. The stretches that stay get no new
anchors.
- Hidden and locked paths, guides and clipping paths are not trimmed and
do not count as crossing. Only the paths the gesture reaches are
searched for crossings, and one work limit covers every path the
command trims.
- `crossings_on` and `crossings_on_within` in `vectorcraft-pathops` find
the crossings on one path and compare it only with the segments in
its box.
- The new tool shares the crossing search with Add Points at Crossings
and Split at Crossings, so those change too: two segments of a path
that meet at an anchor, directly or across segments with no length,
now count as crossing where they cross again away from that anchor,
and do not count as crossing at the anchor itself. With Self
Crossings, a curved segment that loops over itself counts as crossing
itself. Before, both crossings were missed.
- The tool is an add-on tool: Object › Plug-ins › Path Precision Tools
and the All Tools drawer list it, it has no shortcut, and neither
shipped toolbar shows it.
Docs: docs/mcp.md, docs/ui-parity.md, docs/target-app-parity.md.
The Live Paint Bucket drew the crosshair in place of its own cursor. It
now shows what a click paints: a filled paint bucket over a face it
fills (of a Live Paint group, or a region of the selected paths), a
brush over an edge it paints, and an empty bucket where it paints
nothing. The cursor follows Paint Fills, Paint Strokes and Shift, and
shows with Highlight off too. Alt still shows the Eyedropper, and Use
Precise Cursors shows the crosshair.
With a Live Paint group and ordinary paths selected, a region of the
paths outside the group is now highlighted, as a click there fills it.
The help page: https://helpx.adobe.com/illustrator/desktop/paint-and-fill/learn-painting-basics/paint-with-the-live-paint-bucket-tool.html
A blend made with Create Spine set to Never now shows the Appearance
widget with the Selection and Blend tools, so its color Shift can be
dragged on the canvas as on a blend with a spine. The Easing widget
stays hidden, since easing needs a spine.
The widget sits 16 px above the halfway point, by length, of the
straight lines between the key centers that the steps are laid out
along, and a drag follows those lines' direction there. The lines are
not drawn. `blend_layout_line` exposes that line; `blend_spine` still
returns `None` for such a blend.