Commit Graph
3553 Commits
Author SHA1 Message Date
BFlat 25433ede65 Merge pull request #6619 from jmverges/fix/6610-aligned-lines-trailing-tracking
Type: aligned lines leave the tracking after their last character out
2026-11-12 00:39:30 +07:00
BFlat 3deafc24eb Merge pull request #6612 from dotCooCoo/feat/js-e4x-xml
JavaScript: run E4X XML literals and the XML, XMLList, Namespace and QName objects behind an option
2026-11-12 00:01:49 +07:00
BFlat 45246e9c9d Merge pull request #6551 from Messhias/fix/mcp-gaps-command-list
MCP: list UI_COMMANDS in command_list and close catalogue gaps (#6460)
2026-11-11 23:51:59 +07:00
jmverges 352b488b12 Merge remote-tracking branch 'upstream/main' into fix/aligned-lines-trailing-tracking
# Conflicts:
#	docs/file-format-parity.md
2026-11-11 16:38:59 +00:00
BFlat b6b23703b0 Merge pull request #6608 from dotCooCoo/fix/inspect-pending-read-root
MCP: ui.inspect leaves out paths outside the read roots
2026-11-11 23:25:21 +07:00
BFlat 2ba90707b0 Merge pull request #6602 from dotCooCoo/fix/3d-group-member-blend-mode
3D effects: Extrude & Bevel, Inflate and Rotate on a group keep each member's blending mode
2026-11-11 23:20:20 +07:00
jmvergesandClaude Opus 5.5 9f80b4daae Type: aligned lines leave the tracking after their last character out (#6610)
A centred or right-aligned line of tracked type was measured with the
tracking after its last character, so it sat half that tracking
(centred) or the whole tracking (right-aligned) left of where the page
of users' .ai files draws it. That page aligns a line as wide as its
characters without that tracking.

Shaping now records the tracking each glyph's advance holds
(SGlyph::tracking), and a line that isn't justified leaves its last
character's out of the width it is aligned by. The last character is
the last one the line draws before a paragraph's end, a forced line
break or the spaces a wrap leaves; spaces or a tab typed before a
paragraph's end or a forced line break keep the letter's tracking, as
the page does. Forced line breaks and wraps aren't in the files: they
follow the rule so that turning a wrap into a paragraph or a forced line
break keeps the line in place. Hyphenated lines, lines whose last
character hangs, vertical and right-to-left lines and type on a path
keep it. The tracking stays in the glyph's advance, so the caret,
selections, line breaking and Fit Headline are unchanged.
LineInfo::trailing gives the amount. Right-aligned area type sets the
text after its last tab the same way.

What aligns by line widths follows. Convert To Area Type makes its
frame end where the lines are aligned, with room for the tracking, so
tracked type converted either way stays in place. Affinity import lines
up differently aligned paragraphs of artistic text by the aligned
widths. SVG import moves a centred or right-aligned letter-spaced line
back by its share of the last letter spacing, so it stays where a reader
draws it and SVG export, which anchors lines at the end of their
advances, reads back unchanged.

Centred and right-aligned tracked type lays out differently than before
in every document.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:07:40 +00:00
Fabio William Conceição 3f26409d4a MCP: keep UI_COMMANDS mirror in sync via xtask
Add `cargo xtask ui-commands` (and `--check` in ci) so the headless
catalogue cannot drift from desktop UI_COMMANDS, and fix params-doc
escaping that printed literal backslashes.
2026-11-11 15:56:33 +00:00
dotCooCoo c4d323eb28 Merge main into feat/js-e4x-xml
# Conflicts:
#	crates/js/src/interp.rs
2026-11-11 07:48:21 -08:00
Fabio William Conceição 13098fa9f4 MCP: list UI_COMMANDS in command_list and close catalogue gaps (#6460)
Headless command_list exposes the desktop UI catalogue with ui: true, docs
clarify effect vs command ids, and prompts cover spelling, variables and path tools.
2026-11-11 15:48:05 +00:00
dotCooCoo 774f7568da MCP: ui.inspect hides every loaded library path outside the read roots
Under --automation-read-root, ui.inspect and ui.docking hid a library's
path only when its panel was in ui.library_panels. A library used as the
Color Guide's limit, or named by a closed panel's place in
ui.docking_hidden, a workspace layout or the docking layout, still showed
its full loaded/<path> id.

The ids to hide now come from every place the UI state refers to a
library: the library panels, the Color Guide's limit, and the panel ids in
the docking layout, closed panels, icon and collapsed lists and workspace
layouts. Typed text such as a command palette query is not read as an id.

Two hidden libraries with the same file name no longer share one id, which
dropped one of them from an object keyed by panel id. They show as
loaded/<file name>, loaded/<file name> (2) and so on, in the order of
their full ids, and a library has the same id in ui.inspect and
ui.docking.

Docs: docs/mcp.md.
2026-11-11 07:40:36 -08:00
jmverges 4556f7718e Merge remote-tracking branch 'upstream/main' into fix/envelope-edit-contents
# Conflicts:
#	docs/file-format-parity.md
2026-11-11 15:19:51 +00:00
dotCooCoo 6ae93b1222 3D effects: Extrude & Bevel, Inflate and Rotate on a group keep each member's blending mode
On a group, these effects drew every member's solids in Normal mode: only
an opacity mask on a member or on a group inside the 3D group was applied
to the solids it holds. A member's blending mode, and that of a group
inside the 3D group, now apply the same way, to the solids of the members
it holds together. Group Revolve already did this.
2026-11-11 07:12:15 -08:00
BFlat 9fc43f2a35 Merge pull request #6598 from dotCooCoo/fix/pasted-svg-filter-brush-names
Effects: a pasted SVG filter avoids brush effect names and is refused with no free name
2026-11-11 22:10:15 +07:00
BFlat fe537ab13b Merge pull request #6585 from Hassan1305/fix-6437-outline-select-behind
Outline view: a click on a path's outline selects it through an image or a gradient mesh in front (#6437)
2026-11-11 22:04:00 +07:00
dotCooCoo 5d7e2fa8e1 MCP: ui.inspect leaves out paths outside the read roots
Under --automation-read-root, ui.inspect returned the paths of documents
still opening, the recent files, library panels' files and the folder
preferences even when they lay outside the read roots. The reply now
leaves them out, checked with file_access::check_read as ui.menu.list
checks recent files and listed scripts:

- opening and ui.recent_files keep only the readable paths, in order.
- A library panel keeps its row without its path; a library loaded from
  outside the roots shows as loaded/<file name> in its id and panel id,
  in ui.inspect and ui.docking.
- The folder preferences in ui.engine_prefs and in an open Preferences
  dialog are left out; an empty folder and the scratch disk choices
  Startup and None stay.

The app's own state is not changed. Without roots the replies are as
before.

Docs: docs/mcp.md, docs/control-protocol.md, docs/target-app-parity.md.
2026-11-11 06:13:33 -08:00
dotCooCoo e0e361a834 Effects: a pasted SVG filter avoids brush effect names and is refused with no free name
Follows #6592. Paste now also skips the names that effects in the
document's brush art use when it picks a free name for a pasted SVG
filter. When no free name keeps the filter within the 64 KB limit (a
one-letter name at the limit with every free letter and digit taken),
the paste is refused instead of keeping the name of the document's
filter. Clipboard::import_into and import_text_styles return a Result,
and their callers pass the error on before the document changes.
2026-11-11 06:08:58 -08:00
HassanKhan fd43a1901d Merge remote-tracking branch 'upstream/main' into fix-6437-outline-select-behind
# Conflicts:
#	docs/ui-parity.md
2026-11-11 19:01:30 +05:00
dotCooCoo 48e342f03b Merge main into feat/script-dollar-object 2026-11-11 05:55:39 -08:00
BFlat bebe0a402a Merge pull request #6568 from Hassan1305/fix-6506-middle-click-close-tab
Document tabs: a middle-click closes the tab, as the × does (#6506)
2026-11-11 20:51:28 +07:00
BFlat 8c05cbbe72 Merge pull request #4338 from SofiaAFigueredo/fix/4312-move-edges-snap-to-ruler-guides
Fix #4312: a Shift move lands the selection's edges and centre on ruler guides
2026-11-11 20:45:06 +07:00
BFlat 8353e8fdd3 Merge pull request #6562 from dotCooCoo/fix/script-console-report-text
Script Console: report lines match script.console, counts of one are singular, every run ends
2026-11-11 20:36:11 +07:00
BFlat 332b63a10b Merge pull request #6591 from dotCooCoo/fix/web-heavy-filter-limit-doc
Plug-ins: the web build's heavy filter runs stop at the 300 s limit too
2026-11-11 20:24:06 +07:00
BFlat 2703633064 Merge pull request #6589 from ruchirguitar/fix/6502-ai-layer-colour-index
#6502: .ai layer colour index follows the file's numbering
2026-11-11 20:20:00 +07:00
HassanKhan ad75391187 Merge remote-tracking branch 'upstream/main' into fix-6437-outline-select-behind
# Conflicts:
#	docs/ui-parity.md
2026-11-11 18:08:24 +05:00
HassanKhan 6c731e026a Merge remote-tracking branch 'upstream/main' into fix-6506-middle-click-close-tab
# Conflicts:
#	docs/ui-parity.md
2026-11-11 18:08:22 +05:00
dotCooCoo f77fe0423f Merge main into fix/script-console-report-text 2026-11-11 04:58:29 -08:00
dotCooCoo ccf153dccc Merge main into feat/script-dollar-object 2026-11-11 04:52:37 -08:00
SofiaAFigueredoandClaude Sonnet 5.5 337a2e02f5 Fix #4312: a Shift move lands the selection's edges and centre on ruler guides
main lines a moved selection's edges and centre up with ruler guides
(snap_moved_to_rulers, #5746) but not when Shift keeps the move to its line. The
bounds now slide along that line onto a ruler guide the same way
(snap_moved_along_to_rulers), when nothing else lined up and the grabbed point is
not on a guide, within twice the Snap to Point distance along the line.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 09:51:18 -03:00
BFlat a2e34903e9 Merge pull request #6577 from dotCooCoo/fix/script-rethrown-error-place
Scripts: an error $.evalFile could not run, caught and thrown again, is reported where it was thrown again
2026-11-11 19:44:23 +07:00
BFlat 3af2b09d9c Merge pull request #6587 from SofiaAFigueredo/fix/4343-blob-brush-round-tips-preview
Blob Brush: a round tip's preview is the outline of the area, round at both ends (#4343)
2026-11-11 19:44:14 +07:00
dotCooCoo be960fa28c Plug-ins: the web build's heavy filter runs stop at the 300 s limit too
Docs: docs/plugins.md said the instruction budget alone bounds a heavy
filter run on the web. The web build now also checks the run's 300 s
wall-clock limit.
2026-11-11 04:28:15 -08:00
BFlat 58c37a28e9 Merge pull request #6580 from dotCooCoo/fix/menu-list-recent-read-root
MCP: ui.menu.list leaves out recent files outside the read roots
2026-11-11 19:27:56 +07:00
ruchirguitar 68ff19f0f1 Merge remote-tracking branch 'origin/main' into fix/6502-ai-layer-colour-index
# Conflicts:
#	docs/file-format-parity.md
2026-11-11 17:52:50 +05:30
BFlat dab8b9a494 Merge pull request #6584 from dotCooCoo/fix/web-plugin-budget-clock
Plug-ins: the web build times the first-view budget and each run's limit
2026-11-11 19:14:55 +07:00
BFlat df081c52fa Merge pull request #6581 from jmverges/fix/6472-ai-save-type-stroke-join
.ai save: stroked type keeps its cap, join and miter limit
2026-11-11 19:10:17 +07:00
BFlat e8a570cb0e Merge pull request #6578 from dotCooCoo/fix/print-bitmap-side-limit
Print: Print as Bitmap prints all of a page longer than 32,768 pixels
2026-11-11 19:05:50 +07:00
dotCooCoo c8475771b9 Merge main into fix/script-rethrown-error-place 2026-11-11 03:59:08 -08:00
SofiaAFigueredo 334a93277a Merge remote-tracking branch 'upstream/main' into fix/4343-blob-brush-round-tips-preview
# Conflicts:
#	docs/ui-parity.md
2026-11-11 08:58:18 -03:00
dotCooCoo d50ea29772 Merge main into feat/script-dollar-object 2026-11-11 03:58:05 -08:00
SofiaAFigueredoandClaude Sonnet 5.5 478bc4d408 Blob Brush: a round tip's preview is the outline of the area, round at both ends (#4343)
While painting, a round Blob Brush showed a line as wide as the brush, which ends
square, though the stroke it adds is round at both ends. Only an angled or flattened
tip showed the outline of the area. The Blob Brush now shows that outline whatever
its roundness (blob_area, which path.blob's stroke matches).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 08:57:09 -03:00
dotCooCoo 2b88f31a7d Merge main into fix/script-console-report-text 2026-11-11 03:56:06 -08:00
HassanKhan e54a14643c Merge remote-tracking branch 'upstream/main' into fix-6437-outline-select-behind
# Conflicts:
#	docs/ui-parity.md
2026-11-11 16:51:31 +05:00
HassanKhan cc7020847f Merge remote-tracking branch 'upstream/main' into fix-6506-middle-click-close-tab
# Conflicts:
#	docs/ui-parity.md
2026-11-11 16:45:31 +05:00
BFlat c443a25016 Merge pull request #6569 from dotCooCoo/feat/script-strict-on
Scripts: #strict on runs the script with strict write checks instead of refusing it
2026-11-11 18:45:03 +07:00
dotCooCoo c03fe29ad8 Plug-ins: the web build times the first-view budget and each run's limit
The web build had no clock for plug-in runs, so its first view deferred
every plug-in live effect until Effect > Refresh Deferred Effects, and a
run's wall-clock limit was not enforced there. The deferrals clock and
the run deadline now read `web_time::Instant`, which is the system's
monotonic clock on the desktop and the page's `performance.now()` in the
web build. The web's first view now shares the same 2,000 ms budget, and
its runs stop at the 5 s, 60 s and 300 s limits as on the desktop.

Docs: docs/plugins.md, docs/mcp.md, docs/target-app-parity.md.
2026-11-11 03:41:05 -08:00
HassanKhan a87d996e1d Outline view: a click on a path's outline selects it through an image or a gradient mesh in front (#6437)
In Outline view an image was still hit anywhere inside its box and a
gradient mesh inside its fill, though Outline draws only the image's
frame and the mesh lines. A path behind them could not be picked there.
Now an image is hit on its frame (unless Show Images in Outline Mode
draws its pixels) and a mesh on its edge and mesh lines. Preview is
unchanged.
2026-11-11 16:38:59 +05:00
BFlat 7e9633e3cb Merge pull request #6573 from dotCooCoo/fix/rasterize-side-limit
Rasterize: art longer than 32,768 pixels at the resolution is refused, not cut off
2026-11-11 18:35:36 +07:00
jmverges c33473a96c Merge remote-tracking branch 'upstream/main' into fix/envelope-edit-contents
# Conflicts:
#	docs/target-app-parity.md
2026-11-11 11:30:29 +00:00
dotCooCoo baf8056c5f Merge main into fix/script-console-report-text 2026-11-11 03:28:54 -08:00