Commit Graph
12075 Commits
Author SHA1 Message Date
BFlat 34cc6fd47a Merge pull request #7004 from dotCooCoo/fix/schema-too-deep-bad-params
MCP: a parameter nested too deeply is refused as bad parameters, not as an internal error
2026-11-13 09:30:07 +07:00
BFlat 274ec46a51 Merge pull request #7012 from dotCooCoo/fix/followup-6887
New Document: profiles bring their color profiles and link base
2026-11-13 09:29:58 +07:00
BFlat 9c007ec416 Merge pull request #7009 from dotCooCoo/fix/3d-clip-image-outside-shape
3D: an image inside a clip's box but outside its shape is left out
2026-11-13 09:29:50 +07: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
BFlat d860886a95 Merge pull request #7013 from dotCooCoo/feat/curvature-modifiers
Curvature: Alt-click on an open end goes on from it, and starts a path with a corner
2026-11-13 09:29:34 +07:00
BFlat 6b790d611c Merge pull request #6977 from slafebre/fix/6969-rasterize-gray
Fix #6969: Rasterize to Grayscale or Bitmap makes a grayscale image
2026-11-13 09:29:25 +07:00
Sven Lafebre f04b9a0a2d Merge remote-tracking branch 'origin/main' into fix/6969-rasterize-gray
# Conflicts:
#	docs/target-app-parity.md
2026-11-13 02:40:43 +01:00
dotCooCoo d3bef19990 Docs: distance and angle labels while drawing are listed as shipped
docs/ui-parity.md and docs/target-app-parity.md listed the distance and
angle readouts while drawing as missing. With Smart Guides > Measurement
Labels on, the Line Segment tool labels the segment being drawn with its
distance, angle and X and Y offsets, and the Pen, Curvature and Smart Pen
tools label their rubber band the same way (#2983). The Measurement
labels row is marked done, the two dimension rows drop the gap, and the
Drawing aids entry describes the labels.
2026-11-12 17:31:36 -08:00
BFlat f7a03f7899 Merge pull request #6991 from dotCooCoo/feat/recolor-theme-picker
Recolor Artwork: the Color Theme Picker picks new colors from the art on the canvas
2026-11-13 08:31:13 +07:00
BFlat 39f7d33e22 Merge pull request #6943 from dotCooCoo/feat/color-rgb-percent
Color: a double-click right of an RGB field switches between percent and 0 to 255
2026-11-13 08:31:01 +07:00
BFlat 7430676ff0 Merge pull request #7000 from dotCooCoo/test/envelope-ink-type
Tests: envelope ink tests set type in a test face and check its outlines
2026-11-13 08:30:52 +07:00
BFlat 8bd948f9b4 Merge pull request #6996 from dotCooCoo/fix/align-artboard-distribute
Align: artboard Distribute buttons need three artboards with Align to Selection
2026-11-13 08:30:39 +07:00
BFlat 45d25f6a34 Merge pull request #6997 from dotCooCoo/fix/filter-gradient-plates
Plug-ins: a filter's gradient stop plates are clamped into range like its other colors
2026-11-13 08:30:29 +07:00
BFlat 2716eab08e Merge pull request #6975 from dotCooCoo/fix/followup-6841
Document Info: Spot Color Objects leaves out fills and strokes at opacity 0
2026-11-13 08:30:19 +07:00
BFlat d41cb1bd54 Merge pull request #6990 from dotCooCoo/test/intertwine-seam-third-object
Tests: Intertwine keeps a third member in front of a raised overlap's margin
2026-11-13 08:30:09 +07:00
BFlat a6f89f8c85 Merge pull request #6976 from dotCooCoo/fix/followup-6847
Cutting Tools: weeding lines stop at an outline that lies on a line
2026-11-13 08:29:58 +07:00
BFlat ae014cc896 Merge pull request #7002 from dotCooCoo/fix/3d-plain-fill-keeps-compound
3D: a fill or stroke without the effect keeps an even-odd path's holes
2026-11-13 08:29:49 +07:00
BFlat cae74519f2 Merge pull request #6998 from dotCooCoo/fix/i18n-script-messages
i18n: script errors and failed-run lines are translated in every complete-message catalog
2026-11-13 08:29:39 +07:00
BFlat d0a8fc708f Merge pull request #7001 from dotCooCoo/fix/wasm-clippy-runtime-default
Updates: Runtime derives Default on wasm32, so wasm32 clippy passes
2026-11-13 08:29:29 +07:00
BFlat b9a5476853 Merge pull request #6844 from jmverges/fix/6824-type-envelope-painted-box
.ai import: type in an envelope is also tried mapped from the box of what it paints
2026-11-13 08:29:17 +07:00
dotCooCoo 057db09c12 Curvature: Alt-click on an open end goes on from it, and starts a path with a corner
An Alt-click on an end of a selected open path makes that end the current
point without converting it, so the next click extends the path from it.
This applies to the other end too while one end is current; a plain click
there still closes the path. Alt-click on any other point still toggles it
between smooth and corner, and a double-click toggles any point, ends
included. An Alt-click that starts a new path places a corner point, as
later Alt-clicks do.

Changed behavior: an Alt-click on an end of a selected open path no longer
converts it; double-click converts it.

Help page: https://helpx.adobe.com/illustrator/desktop/draw-shapes-and-paths/draw-shapes/draw-shapes-with-the-curvature-tool.html
2026-11-12 17:23:58 -08:00
dotCooCoo bc97a8f897 New Document: profiles bring their color profiles and link base
Follow-up to #6887.

- file.new installs the color profiles a New Document profile's file
  carries when they are missing, as document.open does, so the new
  document's assigned profile draws and a save embeds it. A color
  profile that can't be used is listed in the result's `warnings` and
  shown in the status bar.
- The new document's links find their files through relative paths
  from the profile's file (`links_from`), as
  edit.newDocumentFromState sets it.
- When the read roots leave out the profiles folder, profileError's
  reason no longer names the folder's path.
2026-11-12 17:22:28 -08:00
dotCooCoo c5f406ffab 3D: an image inside a clip's box but outside its shape is left out
A 3D effect left an image in a clipping group out only when the image's
box missed the clipping path's box. An image in the corner of a round
clip's box, a turned image whose box reaches a clip but whose frame does
not, an image in an even-odd hole, or one inside each of two nested clips
but outside the area they show together was refused with the Image Trace
message, although it draws nothing.

The image's frame, the pixel rectangle as its transform places it, is now
cut to every clipping path around it in turn, each with its own fill rule,
and the image is left out when nothing is left. An image the clips show
any part of, a strip narrower than a hundredth of a point included, is
still refused. One effect's art cuts image frames at most 1,024 times;
past that, or when a cut fails, the art is refused.
2026-11-12 17:07:13 -08:00
BFlat 487ffbba4b Merge pull request #6994 from dotCooCoo/fix/paste-style-pattern-order
Paste: text styles that paint with a pattern are pasted after the patterns they use
2026-11-13 07:49:08 +07:00
BFlat 89e22cb608 Merge pull request #6987 from dotCooCoo/fix/number-param-wrong-type
MCP: a required number given as a string is refused as the wrong type, not reported as missing
2026-11-13 07:49:01 +07:00
BFlat 0d553f9a4d Merge pull request #6985 from dotCooCoo/fix/fonts-in-masks-and-patterns
Fonts: Find Font, Replace Missing Fonts and font lists include type in opacity masks and patterns
2026-11-13 07:48:52 +07:00
BFlat 24af0c146a Merge pull request #6938 from dotCooCoo/fix/pdf-large-page-export
Export As: a PDF without artboards opens Save PDF and its options
2026-11-13 07:48:44 +07:00
BFlat cd6d197c58 Merge pull request #6992 from dotCooCoo/fix/open-filter-grid-presets
File formats: File › Open has filters for graphic style libraries and perspective grid presets
2026-11-13 07:48:31 +07:00
BFlat b4bc86c45c Merge pull request #6942 from dotCooCoo/feat/cjk-insert-aki
Type: Insert Aki Left and Right add space before and after a character
2026-11-13 07:48:24 +07:00
BFlat 23825d2943 Merge pull request #6993 from dotCooCoo/fix/revolve-plugin-item-context
Effects: a fill's 3D Revolve tells the plug-in effect before it which fill it sits on
2026-11-13 07:48:14 +07:00
dotCooCoo 06db8adae9 MCP: a parameter nested too deeply is refused as bad parameters
A value that nests past a command schema's 16-level limit was reported
as an internal error ("please report this bug"). It is now a parameter
error that names the value's path, like the schema's other refusals; a
schema that is wrong in itself is still an internal error.

The schema check now also refuses a list of ids or a point inside 16
lists, since every value of those types is a list and the value check
refuses a list at that depth. A color there still takes a string.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-12 16:45:18 -08:00
dotCooCoo 9b65bf2708 3D: a fill or stroke without the effect keeps an even-odd path's holes
With a 3D effect on one fill or stroke, the object's other fills and
strokes were drawn as nonzero paths, so an even-odd compound path or
path filled its holes in them. Extrude & Bevel, Inflate, Rotate,
Revolve and their Classic kinds now draw those items with the source's
fill rule, through the group code's shape_node helper.
2026-11-12 16:28:54 -08:00
dotCooCoo 7764da6ad8 Updates: Runtime derives Default on wasm32, so wasm32 clippy passes
`cargo clippy --target wasm32-unknown-unknown -p vectorcraft-ui-egui
-- -D warnings` stopped twice. In vectorcraft-text, MAX_FILE_SEARCHES
is used only by the system font search, which is not compiled for
wasm32, so it was dead code there. In vectorcraft-ui-egui, Runtime
holds only manual_window_open and status_message on wasm32, and the
hand-written Default set them to false and None, so clippy's
derivable_impls stopped the run.

- MAX_FILE_SEARCHES is compiled only for targets other than wasm32,
  like the SysFallback struct next to it.
- Runtime derives Default on wasm32, and the hand-written Default,
  which creates the updater, is compiled only for other targets.
2026-11-12 16:27:30 -08:00
jmverges a8fc5275b6 Merge remote-tracking branch 'upstream/main' into fix/remaining-type-envelopes
# Conflicts:
#	docs/target-app-parity.md
2026-11-13 00:25:12 +00:00
dotCooCoo b1a35f8428 Tests: envelope ink tests set type in a test face and check its outlines
The three envelope ink tests set "Type" in the default family and
unwrapped ink_bounds(). Without bundled fonts, craft-fonts or system
fonts (vectorcraft-effects' tests on a bare Linux host), no face draws
and the effects test panicked at the unwrap.

Each test now adds the Heighttest Sans face built from the bundled
Source Sans 3 (test-fonts feature, now also on vectorcraft-effects'
dev-dependency), sets the text in it, and computes the expected box
from the layout's glyph outlines. It checks that envelope_ink gives
that box as well as the before and after registration boxes, so a
change to the registered measure fails the test.
2026-11-12 16:23:10 -08:00
Sven Lafebre 6fa569ecc3 Merge remote-tracking branch 'origin/main' into fix/6969-rasterize-gray
# Conflicts:
#	docs/target-app-parity.md
2026-11-13 01:17:36 +01:00
dotCooCoo b1a3ec4a97 Merge main into feat/color-rgb-percent 2026-11-12 16:15:23 -08:00
dotCooCoo a14236eca8 i18n: script errors and failed-run lines are translated in every complete-message catalog
The status bar shows a failed script run as one line: the script's
name, the line and column (and the included file), the error and the
kind of failure, with any files the run left written. No catalog had a
row for that line, so the whole line stayed in English. The errors of
File, Folder, vc.run, $.evalFile, a script's $ object, its alert,
confirm and prompt dialogs, vc.document, vc.log, the limits a run can
pass and Drop Script Engine had no row in any complete catalog either,
and several were not listed by the untranslated-strings report.

- Every complete-message catalog has rows for these errors and for the
  failed-run line at each place and for each kind (syntax, thrown,
  limit, stopped, internal). The script's name, paths, numbers, code
  names ($.flags, File, answers, true, null, UTF-8), command ids and
  the text a script throws itself are kept.
- A failure with no line and column, such as an error in code eval
  compiled, is shown with one colon after the script's name
  ("t.js: TypeError: no (thrown)" instead of "t.js:: TypeError: no
  (thrown)").
- A placeholder that occurs twice in a message template matches only
  the same text both times. Before, "{name}: the next answer in
  `answers` is for {_1}, not {name}" matched a whole failed-run line
  and dropped its line, column and kind.
- The message scan reads the script host's fail(, value( and .over(
  helpers and the script interpreter's errors (the js crate), skips
  *_tests.rs files and cfg(all(test, ...)) modules, and reads a
  constant's text from the file or crate that declares it, so the
  Scripts menu's headers are no longer listed as messages.

Tests: i18n::tests::script_errors_are_translated,
script_host_errors_are_translated,
a_repeated_placeholder_matches_the_same_text,
message_scan_reads_constants_of_the_file_and_its_crate,
message_scan_reads_script_interpreter_errors,
message_scan_skips_test_modules_with_any_test_cfg,
tests::script_run::an_error_without_a_place_names_the_script_and_kind.
2026-11-12 16:13:33 -08:00
BFlat 4b344e91ce Merge pull request #6960 from dotCooCoo/feat/3d-graphics-planar
3D and Materials: map graphics onto the planar faces of 3D objects
2026-11-13 07:10:09 +07:00
BFlat 2d22db13ff Merge pull request #6978 from dotCooCoo/fix/docinfo-brush-type-translations
Document Info: Brushes shows brush types in the interface language
2026-11-13 07:10:00 +07:00
BFlat 267555bc54 Merge pull request #6982 from jayzed80/fix/offset-inset-open-path-6427
Offset Path: an inset keeps the outline of open paths
2026-11-13 07:09:25 +07:00
BFlat b70b52836c Merge pull request #6984 from mockydevs/fix/swatches-show-recent-colors-6617
Swatches: the panel menu's Show Recent Colors shows or hides the Recent Colors row
2026-11-13 07:09:15 +07:00
dotCooCoo 4bb1df4929 Plug-ins: a filter's gradient stop plates are clamped into range like its other colors
A filter's or importer's output clamps each gradient stop's offset,
opacity, midpoint, tint and color, but kept its four process plates as
given, so a plate below 0, above 1 or infinite was stored in the
document. Each plate is now clamped to 0-1: a value that is not a
number becomes 0, and an infinite one becomes 0 or 1 by its sign.
Painted live effects still refuse such a stop.

Docs: docs/plugins.md, docs/target-app-parity.md.
2026-11-12 16:04:43 -08:00
dotCooCoo d3375c1656 Color: Toggle RGB Percent switches the RGB units from the keyboard
The double-click right of an RGB field was the only way to switch R, G and B
between percent and 0 to 255 from the UI. ui.colorRgbPercent (Toggle RGB
Percent) is listed in the command palette and in Keyboard Shortcuts without a
default key, and switches the same setting. A parameter answers an error and
changes nothing. The label has a row in every complete catalog.
2026-11-12 16:04:30 -08:00
dotCooCoo 3031fcf96d Cutting Tools: the weed params text keeps the spacing range in one key
The comma in "more than 0, at most 100000" split the `spacing` entry in
the params text of `addon.cutting.weed`, so the params check read
"at most 100000 (...)" as a key and every_description_parses failed.
The range now reads "more than 0 and at most 100000".
2026-11-12 16:01:28 -08:00
dotCooCoo addbcd918e Paste: text styles that paint with a pattern are pasted after the patterns they use
Paste placed character and paragraph styles before the patterns, symbols
and brushes they use, and compared each one with the document's before a
pattern it painted with had its final name. A style that painted with a
pattern added as "Dots 2" kept painting with the document's own "Dots",
or was matched to a document style of its name that paints with that
"Dots". A symbol whose art paints with such a pattern, and a brush whose
art sets type in a style renamed on the way in, were matched the same way.

Paste, and the symbol, brush, pattern and Libraries imports that add art
through it, now place each style, symbol, pattern and brush after the
ones it uses, as Load Character Styles and Load Paragraph Styles already
did, and relink the styles they add at the end. Pasted back into its own
document, each definition stays the document's of its name.
2026-11-12 15:59:36 -08:00
dotCooCoo 12c4c06fc1 Save PDF: a PDF automation asked for stays closed after its save panel answers
View PDF after Saving checked only whether automation was acting at
that moment. When automation asked for Save as PDF without a path, the
save panel's answer arrives later, so the written PDF opened in the
system viewer. The check now uses automation_asked, which also covers
the answer of a save panel automation opened, in view_file and in
Export As.
2026-11-12 15:59:19 -08:00
dotCooCoo 2a5d255217 File formats: File › Open has filters for graphic style libraries and perspective grid presets
File › Open already opened `.vcstyles` graphic style libraries in their
library panel and imported `.vcperspective` perspective grid presets, but
its dialog had no filter for either. It now lists "Graphic Style
Libraries" after "Swatch libraries" and "Perspective grid presets" after
"Print presets". "All readable files" still lists documents only.

Other Library… and Locate Library… in the swatch and graphic style
library panels list their library filter once; the swatch dialog listed
"Swatch libraries" twice.
2026-11-12 15:55:58 -08:00
dotCooCoo 632830947a Merge main into feat/recolor-theme-picker
Xf::new is test-only on main now: the Color Theme Picker's canvas layer builds its view transform with Xf::at and the canvas's interface zoom.
2026-11-12 15:54:28 -08:00
dotCooCoo e3f1609195 Tests: Intertwine keeps a third member in front of a raised overlap's margin
A red, blue and green rectangle are made into an Intertwine group, and
red is brought over blue where they overlap. The green sliver meets that
overlap's edge over red only. The test checks that green still draws in
front of red within the 2 pt margin, that red's raised area takes in the
margin where only red paints, and that it leaves out the part where
green paints too.
2026-11-12 15:53:31 -08:00