Commit Graph
8471 Commits
Author SHA1 Message Date
BFlat 9b6adf5ab9 Merge pull request #5757 from K1nsmark/compound-shapes-default
Compound shapes default
2026-11-05 14:11:17 +07:00
BFlat db901d4465 Merge pull request #5756 from dotCooCoo/fix/gradient-stroke-slices-on-move
Render: a moved path reuses its gradient stroke slices
2026-11-05 14:11:01 +07:00
Kindmark 1b8d96433e Compound shapes default
Squashed from #5757 onto main.
2026-11-05 13:58:16 +07:00
dotCooCoo 63c48588b5 Render: a moved path reuses the slices of a placed gradient stroke
A move also moves where a stroke's gradient is placed, but the slices of a
gradient along or across the stroke take only its stops and kind. The
moved stroke is now compared with the stroke the slices were made for
with the gradient's placement left out, so a placed gradient no longer
makes its slices again after every move.
2026-11-05 13:58:16 +07:00
dotCooCoo d88f5eeed9 Render: a moved path reuses its gradient stroke slices
A path whose stroke has a gradient along or across it kept its slices under
the node's address, so every nudge made the slices again for the whole path,
although its stroke outline was already reused. The renderer now keeps the key
of a stroke's latest slices under the object's id, the stroke's place and the
tolerance level, and when the object has only moved (same stroke and gradient,
same fill rule, anchors moved by one offset) it draws those slices moved by the
offset, translating only the slices that reach the piece being clipped. Scale,
rotate, an anchor edit or a change to the stroke or its gradient makes the
slices again. The pixels are the same.
2026-11-05 13:58:16 +07:00
BFlat 432be17de8 Merge pull request #5755 from Silvertree2010/fix/5746-wont-allow-snapping-to-2-guides
Line a moved selection's edges up with ruler guides
2026-11-05 13:57:57 +07:00
NetterSilverandClaude Opus 5.5 568bb9315d Line a moved selection's edges up with ruler guides
Fixes #5746

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 13:45:49 +07:00
BFlat a88fbcedb8 Merge pull request #5754 from dotCooCoo/fix/remote-letter-shortcut-docs
MCP: remote press_key does not run single-key shortcuts
2026-11-05 13:35:22 +07:00
BFlat 79debf749c Merge pull request #5753 from dotCooCoo/fix/pointer-waits-for-queued-keys
MCP: pointer_gesture waits for a key sent before it
2026-11-05 13:35:07 +07:00
dotCooCoo 624c82941e MCP: remote press_key does not run single-key shortcuts
docs/mcp.md said that with nothing being dragged, remote press_key c
chose the tool bound to C and f ran the shortcut bound to F. Remote
press_key sends the key event without the letter it types, and the app
runs single-key shortcuts only from the typed letter, so neither runs.
The Arc tool, Selection marquee and grid paragraphs now say what
headless press_key does with these letters and point remote callers to
select_tool or invoke_menu.
2026-11-05 13:33:58 +07:00
dotCooCoo 94424bfa0c MCP: pointer_gesture waits for a key sent before it
In remote mode, press_key queues its key for the next UI pass, while
pointer_gesture drives the tool as soon as the app reads the request. A
release sent right after a key could commit the drag before the key
reached the tool, so C pressed while dragging out an arc left it open.

A ui.pointer request now waits, ahead of the requests after it, until
the synthetic input sent before it has been applied.
2026-11-05 13:26:22 +07:00
BFlat defc14680c Merge pull request #5694 from K1nsmark/contour-tool
Contour: live offset tool with a floating bar and its own icon
2026-11-05 12:58:08 +07:00
KindmarkandClaude Sonnet 5.5 db1ef1bfed Contour: make it a built-in add-on and translate its labels
Review of #5694 asked for two changes.

Add-on, not a core tool, as Enclosing Lasso is:
- The command is addon.contour.set, in an add-on module of its own
  (crates/engine/src/cmd/addons/contour.rs) with its tests beside it.
- The tool is listed under Object > Plug-ins > Contour and under its own
  "Contour" heading in All Tools. It has no Basic or Advanced toolbar
  slot and no default shortcut. The Contour bar is unchanged.
- The add-on drawer test lists Contour with the other add-on tools.
- Docs (mcp.md, the parity documents, ROADMAP) say add-on and use the
  new command name; mcp.md gains a Contour add-on section.

Translations: rows for "Contour", "Contour Tool", "Sharp", "Bake" and
"Turn the Contour into plain paths" in all 26 catalogs ("Round" and
"Square" already had them). Drafted from each catalog's own vocabulary
(for Bake, the verb it uses for Expand Appearance; a word other than the
catalog's Stroke or Path word for the tool's name where they collide);
they are not native-speaker reviewed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 12:57:51 +07:00
KindmarkandClaude Sonnet 5.5 8ce22e71eb Contour: keep a Contour's corners when dragged again; ignore a no-distance drag
Two fixes from review of #5694, each with a test that fails without it:

- Dragging a selected Contour sent the tool's own corner options, so a
  Round or Square Contour came back Sharp and lost its miter limit, and
  the Contour bar (which reads the effect) disagreed with the shape. The
  press now reads the Contour's own corners and miter limit and every
  preview of that drag carries them; a new Contour still takes the tool's
  options.
- A drag that never moved the distance (along the edge, or rounded to
  nothing by Shift) previewed offset 0 and committed an unchanged copy
  and an undo step. Nothing is previewed until the distance leaves where
  it started.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 12:57:51 +07:00
KindmarkandClaude Sonnet 5.5 8584bf1ab6 Contour: live offset tool with a floating bar and its own icon
Add a Contour tool (Modify group). Dragging away from a selected path or
shape's edge makes a copy of it that carries a live Offset Path effect,
grown by the drag; dragging toward the inside shrinks it. The result is
one undo step and stays editable until baked with Expand Appearance. A
second drag on a selected Contour changes its distance instead of
nesting another effect.

- object.contour: the command behind it (offset, sharp/round/square
  corners, miter limit), usable over MCP and the control channel too.
- Contour tool: live preview, Shift rounds to whole points, Escape
  cancels, a dashed guide with a white halo shows the outline the shape
  had, and a pill shows the distance.
- Contour bar: a floating bar above the selection with the offset box,
  Sharp / Round / Square and Bake (Expand Appearance).
- Toolbar slot under Modify (Basic and Advanced) and dc-contour.svg, an
  original icon with its ASSETS.md row.
- Tests for the command, the tool's pointer gestures and the bar; the
  border-with-a-gap recipe (two Contours, bake, Minus Front) is covered
  end to end.
- Docs: beyond-Illustrator row, revision histories and the ROADMAP log.

Beyond Illustrator: a VectorCraft design built on Offset Path. Scores and
estimates unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 12:57:50 +07:00
BFlat 8e97819769 Merge pull request #5751 from dotCooCoo/fix/global-edit-check-cheap
Global Edit: the enabled check decides without normalizing every anchor
2026-11-05 12:48:25 +07:00
dotCooCoo 30a2d85658 Global Edit: the enabled check decides without normalizing every anchor
The Control bar asks whether Select > Start Global Edit can run every
frame it shows a one-object selection. For a path, compound path or
symbol instance that check built the object's form: a copy of every
anchor and handle, normalized into a unit box. On a 200,000-anchor path
it took about 2.2 to 3.0 ms a frame.

The check now walks the object the same way and measures only the box
of those points, then applies the same size test, so it gives the same
answer for every object without allocating. Starting Global Edit still
builds the forms it compares.
2026-11-05 12:36:41 +07:00
BFlat e2eed881cc Merge pull request #2818 from jo-quast/pref-hyphenation-language
Part of #394: each run hyphenates in its own language; Default Language sets new type's
2026-11-05 12:36:22 +07:00
jo-quast bddb834231 Part of #394: each run hyphenates in its own language; Default Language sets new type's
Squashed from #2818 onto main.
2026-11-05 12:17:33 +07:00
BFlat 1943c7272c Merge pull request #5749 from ruchirguitar/feat/5663-document-tab-reorder
Document tabs: drag a tab along the strip to reorder the open documents (#5663)
2026-11-05 12:14:27 +07:00
ruchirguitarandClaude Opus 5.5 e0645341a4 Document tabs: drag a tab along the strip to reorder the open documents (#5663)
A document tab dragged sideways along the tab strip moves its document to the
place an insertion line marks; the current document stays current. Dragged
above or below the strip, the tab still tears off into a floating window. The
views Window > New Window opened move with their document, and each document
keeps its own zoom, centre and artboard.

The move is the engine command `document.move {from?, to}`, so the control
channel, MCP and recordings reach it, and a replay moves the document before
the steps recorded after it. `sync_views` keeps the views with their documents
by uid when the documents change order.

Behaviour: https://helpx.adobe.com/illustrator/using/customizing-workspace.html

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 12:02:46 +07:00
BFlat f73701a0e7 Merge pull request #5748 from Silvertree2010/fix/5729-bug-pencil-tool-options-wrong-fi
Keep Pencil and Paintbrush Fidelity in screen pixels at any zoom
2026-11-05 12:02:27 +07:00
BFlat b087cc5625 Merge pull request #5747 from mockydevs/fix/rasterize-color-mode-dropdown-5660
Rasterize: Color Model is a dropdown of the document's model, Grayscale and Bitmap (#5660)
2026-11-05 12:02:12 +07:00
bflatastic f3a00b1383 Tests: the Pencil's Fidelity slider reads in px 2026-11-05 11:52:34 +07:00
NetterSilverandClaude Opus 5.5 1db874610f Keep Pencil and Paintbrush Fidelity in screen pixels at any zoom
Fixes #5729

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:52:34 +07:00
Don Omondi 44b828629d Rasterize: Color Model is a dropdown of the document's model, Grayscale and Bitmap (#5660) 2026-11-05 11:52:25 +07:00
BFlat ba1757d603 Merge pull request #5743 from dotCooCoo/fix/stroke-move-large-coordinates
Render: at very large coordinates an edited path is not taken for a moved one
2026-11-05 11:41:47 +07:00
dotCooCoo 815671b3a2 Render: at very large coordinates an edited path is not taken for a moved one
The check that reuses a moved path's stroke outline allowed each
coordinate to differ from the moved one by 4 x f64::EPSILON times the
sum of the compared coordinates and the largest coordinate of the first
point, about 2.7 pt near 1e15, so a 0.5 pt anchor or handle edit there
drew the outline made before the edit.

offset_between and anchors_moved now measure the offset on each axis at
the pair of points with the smallest coordinates on that axis, then
check every pair against that offset within 3 units in the last place
of the pair's own coordinates. A first anchor far from the origin no
longer sets the tolerance for points near it.

Tests: 0.5 pt anchor and handle edits at 1e9 and 1e15 (and 0.0005 pt
at 1e9); an edit near the origin of a path that starts at 1e16; a path
whose coordinates shrink with each point, moved by growing amounts.
2026-11-05 11:29:39 +07:00
BFlat 77559d5506 Merge pull request #5741 from dotCooCoo/feat/prefs-folders-choose
Preferences: Additional Plug-ins Folder gets Choose…, and OK checks typed folders
2026-11-05 11:29:21 +07:00
BFlat aa518ad796 Merge pull request #5738 from ruchirguitar/feat/5532-release-type-on-a-path
Fix #5532: Release Type on a Path splits type on a path into point type and its path
2026-11-05 11:29:04 +07:00
dotCooCoo 21680cb53a Docs: Additional Plug-ins Folder's Choose… cites the preferences help
The progress line for the folder preferences now cites the preferences
help for Plug-ins & Scratch Disks as the place where additional plug-ins
folders are set, and names the plug-ins Choose… button and the check of
a typed folder on OK as VectorCraft's own rules.
2026-11-05 11:17:09 +07:00
ruchirguitarandClaude Opus 5.5 528faa8e0a Fix #5532: Release Type on a Path splits type on a path into point type and its path
A Type Tools add-on command (Object › Plug-ins › Type Tools › Release Type on a
Path…, `addon.type.releasePath`): each selected type on a path becomes point
type with the same runs, character and paragraph attributes, on one straight
line whose baseline starts where its first character sat, and the plain path
it was set on, with its exact shape and transform, in its layer and stacking
place, with no fill or stroke. `mode` keeps both, the path only or the text
only; `keepOriginal` leaves the type on a path and adds the released objects
above it. Other objects are left alone, nothing to release makes no undo step,
the run is one undo step and the released objects are selected. The command
dialog previews it as Type on a Path Options does (#5360): Cancel leaves no
history, OK is one step. Tests, command_sweep cases, catalog rows in all 26
languages, docs/mcp.md and the parity docs (beyond Illustrator: scores
unchanged).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:17:09 +07:00
dotCooCoo 045030f444 Preferences: Additional Plug-ins Folder gets Choose…, and OK checks typed folders
Additional Plug-ins Folder (Plug-ins & Scratch Disks) gets the Choose…
button that Data Recovery's Folder has, on hosts with a folder picker.
A picked plug-ins folder must be a folder whose contents can be listed;
otherwise the status bar says why and the field keeps its value.

OK now gives a folder typed into either field the same check as a
picked one. When it fails, the dialog stays open, the status bar says
why and no preference is set. An empty field and the folder already
saved are not checked. Under automation roots, a folder outside them is
refused before it is looked at.

Additional Fonts Folder and Templates Folder stay typed only.
2026-11-05 11:17:09 +07:00
BFlat a2af871579 Merge pull request #5737 from mockydevs/feat/set-corners-angle-range-5545
Set Corners: round only the corners in an angle range (#5545)
2026-11-05 11:16:49 +07:00
BFlat 04afb8e81e Merge pull request #5736 from mockydevs/fix/gradient-delete-stop-5403
Gradient panel: Delete Stop sits beside the ramp, so a short panel no longer hides it (#5403)
2026-11-05 11:16:38 +07:00
Don Omondi 62c6d42dff Set Corners: round only the corners in an angle range (#5545)
Squashed from #5737 onto main.
2026-11-05 11:04:52 +07:00
Don Omondi 077ef54d70 Gradient panel: Delete Stop sits beside the ramp, so a short panel no longer hides it (#5403)
The Delete Stop button sat at the end of the Opacity/Location row, below
the selected stop's Color row. In the default docked panel height that
row is cut off as soon as a stop is selected, so the button looked
missing. It now sits at the right end of the ramp, level with it, and
shows whenever the ramp does (with options hidden too). It deletes the
selected stop, never below two, as before.

Adds a headless panel test for deleting a stop by dragging it off the
ramp and with the button beside it, one undo step each, and for a
two-stop gradient keeping both.
2026-11-05 11:04:41 +07:00
BFlat f79b648ac7 Merge pull request #5735 from dotCooCoo/fix/chrome-idle-frame-cost
Control bar and task bar: idle frames borrow the selected object instead of copying it
2026-11-05 11:04:09 +07:00
BFlat 8260dc158e Merge pull request #5734 from makzumi/fix/wayland-double-cursor
fix(ui): avoid duplicate cursor without Wayland theme
2026-11-05 11:03:52 +07:00
dotCooCoo 8a5ec6a25f Tests: the task bar follows an edit and Undo
The task bar drops Join once the selected open path is closed and offers it
again after Undo, and Shape Properties shows a rectangle's corner radius as
it is after object.setLiveShape and after Undo. The progress line names the
new test.
2026-11-05 10:54:45 +07:00
bflatastic ba3e4a9da2 Cursors: drop the system-pointer branch that no cursor theme can reach any more 2026-11-05 10:54:45 +07:00
dotCooCoo c236129702 Docs: name the task bar test in the Control bar and task bar line 2026-11-05 10:54:45 +07:00
Ammar Almakzumi 822e4669ce fix(ui): avoid duplicate cursor without Wayland theme 2026-11-05 10:54:45 +07:00
dotCooCoo dba2193234 Tests: the task bar follows the active document after a switch
A test selects an open path in one document and a rectangle in a new
one, then switches back and forth with set_active: the task bar offers
Join only for the open path and Shape Properties only for the rectangle.
2026-11-05 10:54:45 +07:00
dotCooCoo 3f12cfdbbf Control bar: idle frames read the selected object without copying it
The Control bar and the contextual task bar copied the first selected
object every frame (the task bar twice), which on a path of 200,000
anchors costs about 1.4 ms per copy. Both bars now borrow it; the task
bar copies it only when it is a basic shape, for Shape Properties.

With one selected open path of 200,000 anchors, an idle frame with both
bars shown takes 3.8 ms instead of 8.0 ms in a release build.
2026-11-05 10:54:45 +07:00
BFlat dfc0f28004 Merge pull request #5733 from mockydevs/feat/set-corners-odd-even-5546
Set Corners: round all, odd-numbered or even-numbered anchors (#5546)
2026-11-05 10:54:27 +07:00
bflatastic 95d5c738dc i18n: Set Corners dialog strings in every catalog 2026-11-05 10:42:37 +07:00
Don Omondi 7aa759d4de Set Corners: round all, odd-numbered or even-numbered anchors (#5546)
addon.pathtools.cornerSet takes `every` ("all", "odd" or "even"; default
"all"), which keeps, of the anchors already chosen (named, direct-selected
or all), only the odd- or even-numbered ones, counted along each path from
its first anchor as number 1. Anchors that take no corner still count, so
the pattern follows the path's anchor order on open and closed paths; when
nothing is left the command says so. Unknown values are refused.

Object › Plug-ins › Path Precision Tools › Set Corners… (also a button in
the Anchor Inspector's Corners section) opens a dialog with Radius, Corner
kind and Anchors (All / Odd-Numbered / Even-Numbered) that previews on the
canvas and commits as one undo step.
2026-11-05 10:42:37 +07:00
BFlat 76ef53045e Merge pull request #5732 from dotCooCoo/fix/render-stroke-outline-reused-on-move
Render: a moved path reuses its stroke outline
2026-11-05 10:40:33 +07:00
BFlat fd7606bacc Merge pull request #5731 from mockydevs/fix/artboards-multi-apply-5698
Artboards: Shift- and Ctrl/Cmd-click in the Artboards panel select several artboards with any tool, and Fill applies to all of them (#5698)
2026-11-05 10:40:17 +07:00