Commit Graph
12259 Commits
Author SHA1 Message Date
bflatastic c58bd01525 3D: the shadow passes read the six-field solid parts again
#6716 added the member index to each solid part after #6754's shadow
code was written against the five-field tuple, so main stopped compiling
once both landed. The Inflate, Extrude and shadow-drawing loops now
destructure all six fields.
2026-11-12 10:11:01 +07:00
dotCooCoo 396de45501 Merge main into feat/learn-panel 2026-11-11 19:10:42 -08:00
dotCooCoo 4f08f19ce4 Learn: a Learn panel lists tutorials by skill, opened from Explore tutorials on the app bar
Window › Learn and a new Explore tutorials button beside the search icon on
the app bar show and hide the Learn panel. Its For you tab holds a Get started
section with a Quick skill guide card that opens the Skills tab. The Skills tab
lists VectorCraft's own skills with their tutorial counts and empty progress
rings; a skill lists its tutorials, a tutorial shows its numbered steps, and
Back goes up one level. The tutorials live in a data catalog whose test checks
unique ids, that every named tool and command exists and that no skill is
empty.

- window.learn {show?} shows, hides or toggles the panel; showing it also
  shows a hidden dock, and the panel counts as hidden while the dock is hidden
  or a full screen mode hides the panels.
- learn.list lists the skills and tutorials; learn.show {tutorial} opens one.
  A missing, non-string or unknown id is an error and changes nothing.
- New labels and messages have rows in every catalog. The tutorial text is
  English.

Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md.
2026-11-11 19:10:02 -08:00
dotCooCoo 7559607037 Document Setup: a Color tab sets the color mode and the assigned profiles
Document Setup gets a Color tab with the document color mode (RGB Color
or CMYK Color), a Convert to CMYK or Convert to RGB box for a mode
change (cleared, the colors keep their numbers), and the RGB and CMYK
profiles assigned to the document, with a working-space entry for none.

When the tab changes something, OK runs document.setup, then
edit.assignProfile, then file.documentColorMode in one command.batch,
and the document's changes are one undo step. Assign Profile runs first,
so a mode change converts through the profile picked with it. An
unchanged Color tab adds no color commands, and Cancel, or OK with
nothing changed, records no undo step. A Color tab field with a value of
the wrong kind is an error, and the dialog stays open with nothing
changed. File › Document Color Mode and Edit › Assign Profile… stay
where they are.

Catalogs: "Working RGB (don't tag)" and "Assign Profile" rows in every
complete catalog, and the "`{key}` must be a profile name or null"
message in every complete-message catalog. Docs: docs/mcp.md,
docs/control-protocol.md, docs/target-app-parity.md.
2026-11-11 19:08:06 -08:00
BFlat 6b8be09699 Merge pull request #6688 from dotCooCoo/fix/plugin-call-reprepare-test
Edit: a command that ends a drag keeps its unapplied preview
2026-11-12 10:06:12 +07:00
dotCooCoo 935ebccc25 EPS: Save As options are menus with readable names, and Export As's Range shows an example
Save As to an EPS file showed Preview Format, Overprints and Flattener
Preset as text fields holding their ids (tiffColor, preserve, medium),
the PostScript level as a number field, and labeled every EPS option
except Use Artboards from its name ("Cmyk Post Script", "Thumbnails").

The dialog now shows the options Export's EPS Options shows. Preview,
Overprints, Flattener preset (the built-in presets, then saved ones) and
PostScript are menus of readable names. Transparent and Opaque apply to
the color TIFF preview only. Embed Fonts shows checked and disabled. The
PostScript level comes last. A pick writes the same values as before
(previewFormat "tiffColor", a built-in preset's id, a saved preset's
name, the level as a number). A value that the save would reject shows
as it is.

Every option the dialog shows has a written label. "Preview:" has a row
in every catalog, and the de, it, ja, ko, uk, vi and zh-hant catalogs
gain the menu names, which Export's EPS Options also showed in English.

Export As's Range field shows the "1-3, 5" example when emptied, as
Save As's does.
2026-11-11 19:04:27 -08:00
dotCooCoo 17a51fc591 Data Recovery: a running app locks its area again when the lock file is removed
While an app runs, its Data Recovery area's .lock file, or the whole area
folder, can be removed by the user, a cleaner or another program. The app
kept writing copies into an area that no lock held, and another app could
lock that area and offer the copies as a crash's copies.

Each recovery save and heartbeat now checks that the file at the area's
.lock path is still the file the app locked. When the lock file or the
folder is gone, or another file is in its place, the app makes the area
again if it is gone, locks it again, and writes again the copies that went
with the folder. A lock file that can't be read for another reason still
counts as held. When another app holds the area by then, the app takes a
new area and writes every copy there. The app does not offer or discard
its own copies in the old area as a crash's copies. It removes each one
when its document has a copy in the new area, or is saved, reverted or
closed, and removes all of them when it quits with nothing unsaved. The
app that holds the old area also removes them when it quits with nothing
unsaved.

A copy that was being written when the Data Recovery folder preference
changed is now removed from the folder it was written to. Before, the
document took that copy as its current one, and the copy stayed in the old
folder after the document was saved or closed.
2026-11-11 19:04:16 -08:00
dotCooCoo c6d9712b9e Merge main into fix/plugin-grants-delete-test-portable 2026-11-11 19:03:22 -08:00
BFlat 433a3009b7 Merge pull request #6701 from dotCooCoo/fix/xml-namespace-scope-fuel
JavaScript: XML namespace lookups take fuel for each ancestor they climb
2026-11-12 10:03:17 +07:00
BFlat bac3be03cb Merge pull request #6716 from dotCooCoo/fix/3d-fill-walls-behind-stroke
3D: a stroke's walls cover the fill's walls at concave corners
2026-11-12 10:03:08 +07:00
dotCooCoo 1716f10790 Merge main into feat/type-path-center-on-top 2026-11-11 19:00:23 -08:00
dotCooCoo 3e0d5a0aaf MCP: a library saved with another platform's absolute path is hidden under a read root
Outside Windows, a library path that starts with a drive or a backslash counts as outside the read roots, since the file access check would read it as a name in the working folder.
2026-11-11 18:59:31 -08:00
dotCooCoo 7e071feb4d Merge main into feat/pixel-align-new-objects 2026-11-11 18:57:23 -08:00
Sven Lafebre 46e8f576cc Merge remote-tracking branch 'origin/main' into fix/5111-kern-paragraph-start
# Conflicts:
#	docs/target-app-parity.md
#	docs/type-parity.md
2026-11-12 03:56:06 +01:00
dotCooCoo 2649f20c8e Merge main into feat/styles-textures-library 2026-11-11 18:55:43 -08:00
BFlat 765bd30783 Merge pull request #6744 from dotCooCoo/feat/color-show-recent-colors
Color: the panel menu's Show Recent Colors shows or hides the Recent Colors row
2026-11-12 09:55:35 +07:00
dotCooCoo be4fd1c23e Merge main into fix/plugin-put-back-result 2026-11-11 18:55:34 -08:00
dotCooCoo 68cbf041a4 MCP: replies hide each sent path the same way whatever the outcome
Each hidden id or path is replaced once, chosen from the reply as given,
so a hidden path inside another library's shown id is not replaced
again, and a readable id written with %XX escapes keeps the hidden path
it begins with. A path quoted with {:?} is matched with its quotes and
control characters escaped. A path outside the read roots that the
request sent is shown by its file name in a reply that succeeded as in
one that failed, and a path param counts with a relative path too. A
relative path is not replaced where it ends a longer path. Without a
read root, a file: URL that names another host stays in ui.inspect's
recorded steps.
2026-11-11 18:50:00 -08:00
dotCooCoo 822efb5db9 Merge main into fix/plugin-grant-sealed-api
# Conflicts:
#	docs/target-app-parity.md
2026-11-11 18:49:27 -08:00
dotCooCoo 269a75c45c Merge main into feat/eps-save-use-artboards 2026-11-11 18:49:02 -08:00
dotCooCoo 558568d531 Merge main into feat/dynamic-text-release-path 2026-11-11 18:48:20 -08:00
dotCooCoo 19ed0889b1 Merge main into fix/script-files-followups
# Conflicts:
#	crates/engine/src/script/files.rs
2026-11-11 18:48:18 -08:00
dotCooCoo c0289333e1 Merge main into feat/control-bar-align-to 2026-11-11 18:47:46 -08:00
dotCooCoo c02f2a5d75 Merge main into fix/links-read-roots 2026-11-11 18:46:20 -08:00
BFlat eb35bd6b3b Merge pull request #6754 from dotCooCoo/feat/3d-shadows
3D and Materials: shadows behind or below the object, with Distance and Bounds
2026-11-12 09:45:11 +07:00
dotCooCoo 09c35cce38 Merge main into feat/char-style-options-tcy-offsets 2026-11-11 18:45:03 -08:00
dotCooCoo b403fe230f Merge main into fix/pdfa-14-long-pages 2026-11-11 18:43:27 -08:00
BFlat 3859e9b5ff Merge pull request #6748 from dotCooCoo/perf/gstyle-apply-shared-appearance
Graphic Styles: applying a style shares one appearance across the objects
2026-11-12 09:40:20 +07:00
BFlat aeffe1d004 Merge pull request #6731 from dotCooCoo/feat/actions-insert-menu-item
Actions: Insert Menu Item adds a menu command to an action
2026-11-12 09:40:12 +07:00
Christian Lappin f6dbc82e6e M3: validate paragraph-only Eyedropper bounds (#6404)
Paragraph justification can move point text past the canvas limit even when character copying is disabled. Check those targets before keeping the edit or remembered sample, and cover the explicit-target case with a regression.
2026-11-11 21:40:10 -05:00
Christian Lappin 4e3ebb2810 M3: preserve effective text dimensions in Eyedropper picks (#6404) 2026-11-11 21:40:10 -05:00
BFlat 01efd56ee3 Merge pull request #6752 from dotCooCoo/fix/open-shows-every-import-note
Open: the status bar names what the file left out first, and its hover lists the notes
2026-11-12 09:40:03 +07:00
dotCooCoo e0e4d7e8d7 Merge main into fix/malformed-id-not-missing 2026-11-11 18:38:43 -08:00
dotCooCoo 982cf2ef5a Merge main into feat/hpgl-import 2026-11-11 18:38:00 -08:00
dotCooCoo 4bc50fa21f Type: Dynamic Text Presets put type on a circle, arch or bow
Type › Dynamic Text Presets › Circle, Arch and Bow
(`type.dynamicTextPreset {preset, position?, flip?, ids?}`) put the
selected point type and type on a path on a new path of that shape and
turn Dynamic Text on, so the text is sized to fill it.

- Circle is a circle as wide as the text, the text running clockwise
  from its bottom; Arch and Bow are a 120° arc whose chord is as wide as
  the text, bulging up or down. The shape is upright on the page when
  the object is rotated or scaled.
- `position` above, center or below sets Align to Path to Descender,
  Center or Ascender; `flip` turns the text to the other side of its
  path. Effect and Spacing stay.
- Area type is left as it is, threaded type on a path is refused, and a
  preset that changes nothing records no undo step.

Docs: docs/mcp.md, docs/target-app-parity.md.
Part of #4134.
2026-11-11 18:36:09 -08:00
dotCooCoo 417f687776 Merge main into feat/brushes-bristle-library 2026-11-11 18:34:50 -08:00
dotCooCoo 98ad53e799 Merge main into fix/js-tosource-property-flags 2026-11-11 18:34:29 -08:00
dotCooCoo 172e2923c0 MCP: regenerate the UI catalog 2026-11-11 18:33:55 -08:00
dotCooCoo 123c9b5e7d Brushes: built-in Bristle Brushes library with one bristle brush for each tip shape
Window > Brush Libraries > Bristle Brushes holds ten original bristle
brushes generated in code, one for each tip shape: Fine Liner, Pointed
Flat, Stubby Round, Dry Scrub, Soft Dome, Filbert, Angled Round, Angled
Flat, Fan Blender and Grass Fan. Their names and values are VectorCraft's
own, and every value lies inside the range the bristle brush keeps.

A test checks the ranges, that every tip shape is covered, that no name
matches a default brush or another library's brush, that adding the
library is one undo step and a second add adds nothing, and that a saved
library reopens with the same brushes. The library and brush names have
rows in every catalog. docs/mcp.md lists the library.
2026-11-11 18:33:53 -08:00
dotCooCoo d28b72a358 Scripts: toSource refuses read-only, non-configurable and non-extensible data it cannot write back
A literal makes an extensible object whose properties are writable and
configurable, and an array whose length is writable. toSource wrote a
property defined with writable or configurable false, a sealed, frozen or
non-extensible object or array, and an array with a read-only length as an
ordinary literal, so evaluating the text gave an open value.

toSource now throws a TypeError for each of these, at any depth, as it
already does for getters, hidden properties and other prototypes.
Properties defined with every flag on are written as before.
2026-11-11 18:33:42 -08:00
dotCooCoo 6eeff01625 Merge main into test/select-skips-raster-effects 2026-11-11 18:32:38 -08:00
BFlat 7dd71a6972 Merge pull request #6708 from dotCooCoo/feat/mojikumi-line-end-fit
Type: Mojikumi spacing at line ends counts when lines break
2026-11-12 09:32:21 +07:00
BFlat 06cdea4321 Merge pull request #6710 from dotCooCoo/fix/recovery-tidy-race
Data Recovery: saving no longer fails when another running copy tidies the new area
2026-11-12 09:32:13 +07:00
dotCooCoo 2a5f8d8d5d Selection: a click on a drop shadow or glow selects the object under it
Clicks, the hover pointer and marquees with the selection tools already
leave out the area that raster effects paint beyond an object. New tests
in crates/engine/src/tests/select_effects.rs hold that in place for drop
shadows, Outer Glow and Gaussian Blur on paths, groups, point type,
symbol art and images, for Shift-click, Direct Selection, the hover
pointer, a drag from a selected object's shadow and a marquee. hit_leaf
gets a doc comment, and docs/target-app-parity.md gets a line citing
https://helpx.adobe.com/illustrator/using/selecting-objects.html.
2026-11-11 18:31:51 -08:00
Dylan M. Taylor a971a14898 Fix Flatpak updates and bump to 0.24.1 (#6649)
* fix(flatpak): allow release checks and self-update helpers

* test: keep Flatpak permission parsing within strict Clippy rules

* chore: bump version to 0.24.1 for the Flatpak update fix

* test: locate CLI binaries after Nextest archive relocation

* docs: explain the Flatpak update permission bootstrap
2026-11-11 21:30:40 -05:00
dotCooCoo fabc28370f Merge main into fix/plugin-call-reprepare-test 2026-11-11 18:29:37 -08:00
dotCooCoo d7a32d09ec Merge main into feat/hang-report 2026-11-11 18:28:39 -08:00
BFlat 588f1678e3 Merge pull request #6750 from dotCooCoo/perf/eps-thumbnail-from-preview
EPS export: the thumbnail is made from the preview instead of drawing the document again
2026-11-12 09:27:26 +07:00
dotCooCoo 4795701122 Merge main into feat/styles-textures-library 2026-11-11 18:27:09 -08:00
dotCooCoo 2d29087ac2 Graphic Styles: built-in Textures library with grain, canvas, craquelure and tile styles
Window › Graphic Style Libraries › Textures, after Hand-Drawn, holds eight
styles that paint their fills and strokes with the texture effects: Fine
Grain (Grain), Canvas Weave and Burlap Sack (Texturizer), Cracked Glaze
(Craquelure), Mosaic Floor (Mosaic Tiles), Quilted Squares (Patchwork),
Leaded Glass (Stained Glass) and Damp Paper (Water Paper). The styles,
their names and their settings are VectorCraft's own.

Each catalog has rows for the library and style names. Docs: docs/mcp.md,
docs/gaps.md, docs/target-app-parity.md.
2026-11-11 18:25:50 -08:00