Commit Graph
506 Commits
Author SHA1 Message Date
BFlat d89f593bfa Merge pull request #7380 from ncic/pencil-cursors
Pencil: shows where a stroke continues, connects and closes
2026-11-15 00:38:01 +07:00
ncic fc47e4782b Pencil: Use Precise Cursors shows the plain crosshair again; a far close is a straight segment 2026-11-14 13:23:22 +01:00
dotCooCoo aabeec34f6 Merge main into feat/learn-progress-rings 2026-11-14 04:21:47 -08:00
ncic bdaaff534c Merge remote-tracking branch 'upstream/main' into pencil-cursors
# Conflicts:
#	docs/ui-parity.md
2026-11-14 12:31:28 +01:00
dotCooCoo b67a9320bb Merge main into feat/learn-progress-rings 2026-11-14 01:49:40 -08:00
BFlat 73c59de0c2 Merge pull request #7424 from ruchirguitar/feat/layers-row-context-menu
Layers: row context menu and actions
2026-11-14 16:49:22 +07:00
ncic cbd1c142dc Merge remote-tracking branch 'upstream/main' into pencil-cursors
# Conflicts:
#	docs/target-app-parity.md
2026-11-14 09:05:01 +01:00
ruchirguitar f965fd6f4a Merge branch 'upstream/main' into feat/layers-row-context-menu 2026-11-14 09:58:09 +05:30
ruchirguitar 0ff98d0380 feat(layers): implement row context menu and actions
- Add right-click context menu on layer, group, and object rows:
  - Options... / Layer Options... / Options for Selection...
  - Duplicate <name> / Duplicate Selection
  - Delete <name> / Delete Selection
  - Lock Others / Unlock All Layers
  - Hide Others / Show All Layers
  - Locate Object
  - Collect for Export
- Select unselected row on right-click; preserve multiselection if already highlighted
- Dispatch actions via registered engine commands with Undo/Redo tracking
- Add headless egui tests covering selection, dispatch, and state integrity
- Update gaps and ui-parity documentation for G12
2026-11-14 09:47:46 +05:30
ncic 5a55fdce0e Merge upstream main into pencil-cursors
# Conflicts:
#	docs/mcp.md
#	docs/target-app-parity.md
2026-11-14 03:17:11 +01:00
dotCooCoo 00c0c1d6ea Learn: steps get check boxes, and skill rings fill as tutorials are finished
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.
2026-11-13 17:26:47 -08:00
dotCooCoo 91f77f1eb8 Actions: Button Mode shows actions as colored buttons that play on a click
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.
2026-11-13 17:26:31 -08:00
ncic 8a449cb98e Pencil: badged cursors keep their badge with Use Precise Cursors
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.
2026-11-14 01:45:40 +01:00
BFlat 9aa330c475 Merge pull request #7219 from dotCooCoo/fix/docs-layers-row-menu
Docs: Layers row context menu offers Collect for Export
2026-11-14 04:30:49 +07:00
BFlat d15a725626 Merge pull request #7216 from dotCooCoo/feat/trim-at-crossings
Path Precision Tools: Trim at Crossings removes the stretch of a path between crossings
2026-11-14 04:30:27 +07:00
ncic b67a08dc0a Pencil: shows where a stroke continues, connects and closes
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.
2026-11-13 22:29:09 +01:00
dotCooCoo ae113557be Merge main into fix/docs-layers-row-menu 2026-11-13 11:40:52 -08:00
dotCooCoo db047c000e Docs: Global Edit leaves out groups holding type or images
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.
2026-11-13 10:29:27 -08:00
dotCooCoo 683dea1c4b Docs: UI chrome rows no longer list SVG Interactivity as missing
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.
2026-11-13 10:11:30 -08:00
dotCooCoo 8b0e905586 Docs: Layers row context menu offers Collect for Export
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.
2026-11-13 09:57:59 -08:00
BFlat e41ef1ea62 Merge pull request #7148 from dotCooCoo/fix/blend-without-spine-widget
Blend: a blend without a spine shows the Appearance widget
2026-11-14 00:51:09 +07:00
BFlat 637d51df79 Merge pull request #7143 from dotCooCoo/feat/guides-layer-rows
Layers: ruler guide rows have their own eye and lock, and go to the trash
2026-11-14 00:50:35 +07:00
dotCooCoo 3a336fd32f Path Precision Tools: Trim at Crossings removes the stretch of a path between crossings
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.
2026-11-13 09:24:53 -08:00
BFlat 538e471783 Merge pull request #7163 from dotCooCoo/feat/live-paint-bucket-cursor
Live Paint: the bucket shows a filled bucket over a face and a brush over an edge
2026-11-13 23:31:19 +07:00
dotCooCoo e13384ebb4 Merge main into fix/blend-without-spine-widget 2026-11-13 08:06:40 -08:00
BFlat cb061d6a2c Merge pull request #7085 from dotCooCoo/feat/learn-next-up
Learn: View more opens a tutorial's practice sample, and Next Up shows the next tutorial
2026-11-13 23:05:29 +07:00
BFlat 6326acb122 Merge pull request #7070 from dotCooCoo/feat/recolor-prominent-colors
Recolor Artwork: the Prominent Colors bar weighs the art's colors
2026-11-13 23:05:19 +07:00
BFlat 714e3a3821 Merge pull request #7135 from dotCooCoo/fix/docs-paragraph-style-options-rows
Docs: Paragraph Style Options rows name the dialog and its seven sections
2026-11-13 23:01:36 +07:00
dotCooCoo 5700b0d8c1 Live Paint: the bucket shows a filled bucket over a face and a brush over an edge
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
2026-11-13 06:30:43 -08:00
dotCooCoo fc70b08f71 Blend: a blend without a spine shows the Appearance widget
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.
2026-11-13 06:17:47 -08:00
dotCooCoo fb41d79f28 Layers: ruler guide rows have their own eye and lock, and go to the trash
The eye and lock on a guide's row in the Layers panel hide or lock that
guide alone, in one undo step, and a drag down either column takes guide
rows along with the other rows it passes. A hidden guide is not drawn and
does not snap, and its row is dimmed; a locked guide is drawn and snaps
but can't be selected, moved or deleted. Both can be changed while the
guide's layer is hidden or locked, and the guide shows or can be edited
only when its layer allows it as well. The state is kept through save
and reopen.

- layer.setProps takes ruler guide node ids; every other command still
  refuses them.
- guide.list rows carry the guide's node id and its own hidden and
  locked state.
- Alt-click and Ctrl/Cmd+Alt-click on a guide row's eye or lock act on
  the other layers, as on any row in that layer.
- Object > Lock > Selection and Object > Hide > Selection lock or hide the
  selected ruler guides with the selected art, in one undo step, outside
  isolation mode. Unlock All and Show All, document scope, also unlock or
  show guides locked or hidden on their own and select them as guides.
- Guide rows dropped on the Layers panel's trash delete their guides
  (guide.remove {indexes}). A click on a guide row clears the highlighted
  rows, so Delete deletes the guide; with no row highlighted the trash
  deletes the selected guides.
- guide.remove and guide.setLayer refuse index together with indexes and
  an indexes value that is not a list, and count a repeated index once.
  guide.select, guide.remove and guide.setLayer refuse an indexes list of
  more than 10,000 entries; guide.setLayer cut such a list short before.
- Moving, deleting or moving to another layer a guide that is hidden or
  locked on its own fails with "the guide is hidden or locked"; a guide
  on a hidden or locked layer still fails with "the guide is on a hidden
  or locked layer".

Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md.
2026-11-13 06:07:27 -08:00
dotCooCoo e97113c5c9 Docs: ui-parity.md names all nine built-in brush libraries
The Brush libraries row named four libraries. It now names the nine in
BUILTIN order (crates/engine/src/cmd/brushlib.rs), as the Window ›
Brush Libraries menu shows them, and says nine built-in libraries.
2026-11-13 05:40:21 -08:00
dotCooCoo 38bcbb817f Docs: Paragraph Style Options rows name the dialog and its seven sections
A double-click on a paragraph style's row and the panel menu both open
Paragraph Style Options (ui.paraStyleOptions, paraStyle.edit) with its
seven sections. The type-parity and ui-parity rows still called it the
rename dialog and named ui.paramDialog with paraStyle.rename; they now
name the dialog, its sections and its tests.

The target-app-parity entry said each section has a Reset Panel. Reset
Panel is unavailable in General, and the entry now states that.
2026-11-13 05:38:52 -08:00
dotCooCoo d747f5b365 Learn: Back to skills and the Quick skill guide card run learn.skills
learn.skills {} shows the Learn panel on its Skills tab with the list of
skills, with no skill and no tutorial open, and returns what learn.list
returns. Back to skills after a skill's last tutorial and the Quick skill
guide card on the For you tab now run it, so the control channel and MCP
can reach the same view.

- The command is listed in both UI command catalogs, and its label has a
  row in every catalog.
- Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md.
2026-11-13 04:34:35 -08:00
dotCooCoo 3792561e1a Learn: View more opens a tutorial's practice sample, and Next Up shows the next tutorial
Under a tutorial's steps, View more opens the tutorial's practice sample
as a new untitled document, which becomes the active one; open documents
stay as they are, and Save asks where to save the copy. Each of the 12
tutorials has its own small SVG drawing in panels/learn/samples.rs, read
only when View more is pressed.

Once the sample is open, Finish tutorial marks the tutorial finished.
A finished tutorial shows Next Up with the next tutorial's title in the
same skill, and Next Up shows that tutorial without opening its sample.
After a skill's last tutorial the panel says so and shows Back to
skills; Next Up never moves to another skill. Finished tutorials are
kept while the app runs; the skill rings and counts do not show them
yet. The help page's short video is not part of this change.

- learn.openSample, learn.finish and learn.next run the three controls
  and are listed in the UI command catalogs; a missing, non-string or
  unknown tutorial id, or a step out of order, is an error and changes
  nothing.
- New labels and messages have rows in every catalog.
- Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md and
  the ASSETS.md line for art generated in code.
2026-11-13 00:51:37 -08:00
Don Omondi ffc22ffc4c Merge remote-tracking branch 'upstream/main' into fix/graphic-styles-list-height-2992
# Conflicts:
#	docs/roadmap.md
#	docs/target-app-parity.md
2026-11-13 03:20:58 -05:00
BFlat d0b4df357c Merge pull request #7063 from dotCooCoo/fix/ui-parity-pencil-fidelity-unit
Docs: the Pencil row gives Fidelity in screen pixels
2026-11-13 14:17:05 +07:00
dotCooCoo fafd06c959 Recolor Artwork: the Prominent Colors bar weighs the art's colors
With art selected, the Edit tab shows a Prominent Colors bar under the
wheel: a part for each row in its new color, as wide as the row's share
of the art, the largest first. Dragging the edge between two parts moves
width from one to the other; when the drag ends, the rows' current
colors move toward the new widths and the art previews the result. OK
keeps the recolor as one undo step.

- recolor.weigh {map, weights?, ids?} returns each row's share of the
  uses of the art's colors and, with weights, the rows with their
  current colors moved: one color at a time between rows that have a
  new color, while a move brings the shares nearer the weights, the
  color nearest in Lab to the row it goes to first. A row keeps its
  first color, the tints of one global swatch move together, colors
  that stay keep their order, and the command changes nothing. A use
  counts for the row recolor.apply recolors it with, and the work is
  bounded at 50,000,000 color-by-row comparisons.
- The New Color Group menu beside the link button has Save All Colors
  (the new colors in row order) and Save Prominent Colors (the bar's
  colors in its order); each saves a color group as its own undo step.
- The dialog's weights field drives the bar from ui.dialog.set. A new
  Colors count drops it.
2026-11-12 22:48:57 -08:00
BFlat c6da74eef3 Merge pull request #7043 from dotCooCoo/fix/pen-readout-without-rubber-band
Drawing tools: the measurement readout shows with the rubber band off
2026-11-13 13:17:57 +07:00
Don Omondi 25c7c1a383 Merge remote-tracking branch 'upstream/main' into fix/graphic-styles-list-height-2992
# Conflicts:
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-11-13 00:45:57 -05:00
dotCooCoo 9468508501 Docs: the Pencil row gives Fidelity in screen pixels
#5748 moved the Pencil's and the Paintbrush's Fidelity to screen pixels, but
docs/ui-parity.md still gave it in points. The Pencil row now gives the
slider's rail, the field and the key steps in px, and says the tool sends
path.freehand the value in points at the current zoom.

The Pencil row also appeared twice, the second copy without the Fidelity
text. The two rows are merged into one.

The comments on FIDELITY_MAX, fidelity_step, fidelity_at and fidelity_from
in the Tool Options dialog name the tool's unit, since the slider is shared
with Smooth and Blob Brush, which stay in points.
2026-11-12 21:33:07 -08:00
dotCooCoo fad257ce82 Drawing tools: the measurement readout shows with the rubber band off
Enable Rubber Band now hides only the preview segment in the Pen, the
Curvature tool and the Smart Pen. With it off and Measurement Labels on,
the three tools still show the D / Angle / dX / dY readout at the pointer
while a path is drawn, and the Curvature tool also shows it when
going on from the current end of a selected path. With Measurement Labels
off, no readout shows either way. The click places the same anchor as
before.

Docs: docs/mcp.md (penRubberBand, curvatureRubberBand), docs/ui-parity.md,
docs/target-app-parity.md.
2026-11-12 20:27:27 -08:00
Don Omondi cabef90876 Merge remote-tracking branch 'upstream/main' into fix/library-panel-list-height-2992
# Conflicts:
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-11-12 22:40:11 -05:00
Don Omondi 60228dbfd6 Merge remote-tracking branch 'upstream/main' into fix/graphic-styles-list-height-2992
# Conflicts:
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-11-12 22:39:56 -05:00
Don Omondi 3bc09c66fd Merge remote-tracking branch 'upstream/main' into fix/library-panel-list-height-2992
# Conflicts:
#	docs/target-app-parity.md
2026-11-12 21:45:59 -05:00
Don Omondi 9fdaf3d999 Merge remote-tracking branch 'upstream/main' into fix/swatches-list-height-1638
# Conflicts:
#	docs/target-app-parity.md
2026-11-12 21:45:37 -05:00
Don Omondi 49ca5e8f66 Merge remote-tracking branch 'upstream/main' into fix/graphic-styles-list-height-2992
# Conflicts:
#	docs/target-app-parity.md
2026-11-12 21:45:10 -05:00
BFlat 14c73e0052 Merge pull request #7014 from dotCooCoo/docs/drawing-readouts-ship
Docs: distance and angle labels while drawing are listed as shipped
2026-11-13 09:29:42 +07:00
Don Omondi 27f6c450c8 Merge remote-tracking branch 'upstream/main' into fix/library-panel-list-height-2992
# Conflicts:
#	docs/target-app-parity.md
2026-11-12 20:55:24 -05:00
Don Omondi 53da405efb Merge remote-tracking branch 'upstream/main' into fix/swatches-list-height-1638 2026-11-12 20:52:15 -05:00