Commit Graph
3542 Commits
Author SHA1 Message Date
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
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
jmvergesandClaude Opus 5.5 8b39cbc324 .ai save: stroked type keeps its cap, join and miter limit
The text document writer wrote a type stroke's paint and weight but not
its cap, join or miter limit, which .ai import reads since #6500 (keys
61, 62 and 64). A file saved here and opened again came back with butt
caps, miter joins and a miter limit of 10, and the save reported those
attributes as left out. A stroked run now writes the three keys,
numbered as PostScript numbers caps and joins, with the miter limit as
import takes it back (1 to 500, else 10), and they no longer count as
lost. A run without a stroke no longer counts them as lost either: they
draw nothing.

Follow-up to #6472.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 11:25:55 +00:00
BFlat 212bc9f837 Merge pull request #5457 from Taha-Mahmoodi/fix/ruler-double-click-guide
Fix #5239: double-clicking a ruler adds a guide there
2026-11-11 18:24:56 +07:00
BFlat 31971bc090 Merge pull request #6555 from dotCooCoo/feat/plugin-effect-open-budget
Plug-ins: live effects of a document's first view share a 2,000 ms budget
2026-11-11 18:22:28 +07:00
dotCooCoo 68f3095cfd Print: Print as Bitmap prints all of a page longer than 32,768 pixels
Print as Bitmap limited each page's image to 65,535 pixels a side, but the
renderer draws at most 32,768. A 9000 x 100 pt artboard at a 300 ppi raster
effects resolution printed as an image that stopped at 7,864 pt and was
placed as if whole. The resolution is now lowered until the longest side
fits.
2026-11-11 03:21:57 -08:00
dotCooCoo 56abc9685b Merge main into fix/menu-list-recent-read-root 2026-11-11 03:20:53 -08:00
dotCooCoo dfa6e6ea60 MCP: ui.menu.list leaves out recent files outside the read roots
Under --automation-read-root, a control client's ui.menu.list (and
ui.contextMenu.list, which shares the listing) left every File › Open
Recent Files row in, so the client saw the names of recent files it may
not read. file.recentFiles returned their full paths, and
file.openRecentN for such a file answered with a refusal naming the path.

Now the listing leaves out a recent file outside the read roots, as it
already leaves out listed scripts outside them. The other rows keep their
ids, so file.openRecent3 still opens the third file. file.recentFiles
returns only the files inside the roots, in order, and file.openRecentN
for a file outside them ends with "no such recent file", as an empty slot
does. The person's own menus and Home screen are unchanged.

Docs: docs/mcp.md, docs/control-protocol.md, docs/target-app-parity.md.
2026-11-11 03:20:14 -08:00
dotCooCoo 0bb923fc40 Scripts: $.sleep throws where the run cannot wait, and toSource checks its length as it escapes
A getter, a conversion, a callback of a built-in function or a file
$.evalFile runs is executed on native frames, so the run cannot stop at a
$.sleep there. Such a call used to only mark the run to pause, so the
code after it ran first and the wait came later. $.sleep with more than 0
milliseconds now throws an Error there, as alert, confirm and prompt do.

toSource checked the 16,777,216-unit length limit only after a whole
string was written. A long string of characters that are escaped could
reach the heap limit first, which ends the run instead of throwing a
RangeError. The limit is now checked before each part is added.
2026-11-11 03:18:55 -08:00
BFlat d5c75d3699 Merge pull request #6567 from dotCooCoo/fix/flatten-long-area-side-limit
Flatten Transparency: a long rasterized area is placed whole
2026-11-11 18:16:31 +07:00