Commit Graph
10283 Commits
Author SHA1 Message Date
dotCooCoo 4ec99c7cd9 Commands: view.transparencyGrid lists session as what it writes
The grid is view state of each open document, with no undo step, so its schema's x-writes is session rather than the default document. A test pins x-writes for all six View commands, and the level 1 schema hash is updated.
2026-11-09 14:37:28 -08:00
dotCooCoo 2e6ba25598 Commands: parameter schemas cover every route, bound hostile values and translate their errors
Check a new call's params against the schema in execute_spec, after the
key check and before the parser, and check every command.batch step
before the first one runs. menucmds::run_raw and the two other direct
runs go through the same check. Saved steps keep keys the schema does
not name and have the values it names checked.

Limit nesting to 16 levels, cut error text and paths to a fixed length,
and copy nothing before it has passed. Treat a whole number written
with a fraction as an integer. Check declared defaults and duplicate
names once at first use.

Give the five schema errors rows in the 22 complete-message catalogs.
2026-11-09 14:19:22 -08:00
dotCooCoo 1796c77765 Merge main into feat/command-param-schemas 2026-11-09 13:31:22 -08:00
BFlat e6680d6979 Merge pull request #6327 from thisisgomaa/fix/pdf-import-actualtext
PDF import: preserve authored text in ActualText spans
2026-11-10 04:23:23 +07:00
BFlat a90d7bcec1 Merge pull request #6346 from slafebre/fix/6140-extrude-refusal-reason
3D effect dialogs say why a selection is refused and turn OK off (#6140)
2026-11-10 03:47:25 +07:00
Ahmed Gomaa 323b3385bc Merge remote-tracking branch 'upstream/main' into fix/pdf-import-actualtext 2026-11-09 22:42:50 +02:00
dotCooCoo f688129ef2 Merge main into feat/command-param-schemas 2026-11-09 12:34:02 -08:00
BFlat 9394a43e58 Merge pull request #6347 from jmverges/fix/6314-pdf-separation-images
PDF import: Separation images keep their ink (#6314)
2026-11-10 03:18:58 +07:00
Ahmed Gomaa 09d5322283 Merge remote-tracking branch 'upstream/main' into fix/pdf-import-actualtext 2026-11-09 21:59:07 +02:00
Sven Lafebre 619cd7aa0c A 3D dialog's Preview-off try waits for another interaction to end (#6140)
begin_interaction joins an interaction already in progress, so the
try replaced that interaction's preview and then cancelled it.
2026-11-09 20:58:11 +01:00
BFlat 2318ba0457 Merge pull request #6341 from Hassan1305/feat-4936-auto-spell-check
Part of #4936: Auto Spell Check underlines the unknown words of the type
2026-11-10 02:31:29 +07:00
Sven Lafebre 05ada26dc1 3D effect dialogs say why a selection is refused and turn OK off (#6140)
The 3D effects refuse objects they can't build from, such as clipping
groups and blends under Extrude & Bevel. The preview failed, OK stayed
on and only repeated the error in a status-bar line that gets cut off,
so the dialog looked broken.

The dialog now shows the command's reason under Preview and turns OK
and Enter off while it holds. With Preview off, it tries the values
once when they change and rolls back, so the reason still appears.
2026-11-09 20:31:11 +01:00
HassanKhan f8ca2c09cb Merge remote-tracking branch 'upstream/main' into feat-4936-auto-spell-check
# Conflicts:
#	docs/gaps.md
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/type-parity.md
2026-11-09 23:50:29 +05:00
Ahmed Gomaa 8692b090d0 PDF import tests: ActualText geometry fixtures embed Source Sans 3
Three geometry fixtures used unembedded Helvetica, so the reader fell
back to Source Sans 3 widths where Helvetica is not installed (CI) and
fitted the line length instead of placing glyphs exactly; the following
"C" then landed about 3 pt off its untagged comparison. Embed the
bundled Source Sans 3 with matching explicit widths. Every assertion and
the 0.05 pt tolerance are unchanged.
2026-11-09 20:49:36 +02:00
Ahmed Gomaa 9fda083329 Merge remote-tracking branch 'upstream/main' into fix/pdf-import-actualtext 2026-11-09 20:49:32 +02:00
HassanKhan ff1079b3ce Auto Spell Check: underline the unknown words of the type on the canvas (part of #4936) 2026-11-09 23:41:41 +05:00
jmvergesandClaude Opus 5.5 ca59598cd7 PDF import: Separation images keep their ink (#6314)
An image in a Separation color space opened as an RGB image: its spot ink
was lost (no plate in Separations Preview), and Fill and Recolor Artwork
didn't reach its color.

It now opens as a grayscale image of its tints (white where it lays no
ink, black at 100 %, its Decode array applied; 1 to 16 bits a sample, or
one gray channel from its JPEG, CCITT, JBIG2 or JPEG 2000 decoder),
colorized by its ink at 100 %: the spot swatch, a process plate's CMYK
color, or Registration. Its mask becomes its opacity mask, as a CMYK
image's does. The ink is found by the image's color space among those the
file defines, once per image. The ink None, an ink whose color can't be
told, images inside an alpha soft mask, inline images and DeviceN images
open as before; samples that can't be read open in RGB with a warning, and
the ink gets no swatch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 18:39:46 +00:00
BFlat 9dc4c33529 Merge pull request #6330 from thisisgomaa/fix/pdf-export-mark-text
PDF export: letters with marks are written once in the text layer
2026-11-10 01:29:17 +07:00
BFlat 9cf3a4e5b6 Merge pull request #6334 from JonRC/fix/eps-missing-fonts-of-the-document
EPS import names the missing fonts of the document's type (#6326 follow-up)
2026-11-10 00:49:58 +07:00
Ahmed Gomaa 95a2527585 Merge remote-tracking branch 'upstream/main' into fix/pdf-export-mark-text 2026-11-09 19:47:08 +02:00
Ahmed Gomaa ad4b4f881e Merge remote-tracking branch 'upstream/main' into fix/pdf-import-actualtext 2026-11-09 19:46:57 +02:00
BFlat 14d545e875 Merge pull request #6329 from Messhias/feat/g5-symbol-lib-ui-frames
G5: built-in UI Frames symbol library with default 9-slice
2026-11-10 00:29:14 +07:00
Ahmed Gomaa 9ffea06f82 Merge remote-tracking branch 'upstream/main' into fix/pdf-export-mark-text 2026-11-09 19:12:24 +02:00
Ahmed Gomaa f2c4743072 Merge remote-tracking branch 'upstream/main' into fix/pdf-import-actualtext 2026-11-09 19:12:14 +02:00
JonRC d439d734e6 EPS import names the missing fonts of the document's type (#6326 follow-up)
The warning #6326 added listed the families `set_text` met while the
page ran. An Illustrator EPS can be rebuilt from its editing copy,
whose type may be in other fonts than the page's, and `stringwidth` and
`charpath` reach `set_text` without adding any type. The families are
now taken from the text objects of the document the import gives (its
layers and its symbols), once each, in the order the type comes,
whichever path built it.
2026-11-09 14:01:27 -03:00
Fabio William Conceição a668f44780 G5: assert default 9-slice on every UI Frames symbol
Keep the library test aligned with SymbolNineSlice::default() for Panel, Button and Bar.
2026-11-09 16:40:13 +00:00
Fabio William Conceição e5ef855903 G5: size UI Frames so default 9-slice keeps round corners
Button and Bar were shorter than 4x their corner radius, so the default guides cut through the curves on a vertical resize.
2026-11-09 16:29:22 +00:00
Fabio William Conceição bd9b1696e0 G5: built-in UI Frames symbol library with default 9-slice
Add Panel, Button and Bar HUD chrome as a second original symbol library so games can drop resizable UI frames without inventing art each time.
2026-11-09 16:29:22 +00:00
BFlat 9086ff3e96 Merge pull request #6325 from Silvertree2010/fix/h15445-graph-csv-parser-does-not-strip
Strip leading byte-order mark in graph CSV parser
2026-11-09 23:16:56 +07:00
Ahmed Gomaa 9b797c06d1 PDF export: letters with marks are written once in the text layer
A mark glyph's vertical translation started a new draw_glyphs batch, so
krilla received the cluster's source range again and mapped its
characters twice. Copying or searching the exported PDF then found
doubled letters for Arabic harakat in any font, and for every dotted
letter in fonts that draw dots as zero-advance mark glyphs (Noto Sans,
Naskh and Kufi Arabic).

Keep compatible glyphs on the same layout line in one batch and carry
their relative vertical placement as per-glyph y_offset; horizontal
placement is unchanged (next_x - x advances). Font, size, linear
transform, line/column, paint run, list marker and hyphen boundaries
still split batches. Krilla keeps owning cluster mappings and
ActualText. No importer change.

Regressions decode the content stream and ToUnicode maps: one batch per
layout line, no duplicated cluster assignment, one ActualText per
multi-glyph cluster, contours within 0.05 pt of outline export; mixed
scripts, vertical columns, path rotations and PDF/X variants covered.
The reader round-trip stays an ignored test until the importer consumes
ActualText (#6165).

Addresses #6309.
2026-11-09 18:13:14 +02:00
BFlat 09aedd417d Merge pull request #6326 from JonRC/fix/eps-missing-fonts-warning
Fix #6320: EPS import warns about fonts that aren't available
2026-11-09 23:12:31 +07:00
Ahmed Gomaa 6e71211a16 PDF import: preserve authored text in ActualText spans
Editable PDF import derived characters from glyph Unicode/CID mappings
even when the enclosing marked-content sequence supplied /ActualText.
A span that paints "xy" but says "AB", followed by "C", imported "xyC".

Track the outermost replacement owner per span (absent, explicitly
empty, consumed), decode it with the existing PDF text-string decoder,
emit it once at the first placeable glyph, and let the remaining glyphs
of the span advance the pen without phantom character slots or
inferred spaces. Authored stretches keep their logical order while
adjacent ordinary text still goes through visual-to-logical
reconstruction. Glyph identity still drives font matching. Depth and
size are bounded; oversized or unbalanced spans fall back to glyph
mappings with a warning.

Outlines mode and PDF export are unchanged. Parity docs updated,
scores unchanged.

Fixes #6165.
2026-11-09 17:43:28 +02:00
BFlat 7875114168 Merge pull request #6308 from Messhias/feat/g5-dynamic-symbol-part-appearance
G5: dynamic symbol parts take opacity, blend and non-solid paint
2026-11-09 22:31:51 +07:00
JonRC ddbc0d545a Fix #6320: EPS import warns about fonts that aren't available
Type set in a family that isn't available keeps its name and shows in
the fallback font, as in PDF import, but EPS import said nothing. It
now notes each such family once, in the order its type comes (at most
64), and ends with PDF import's warning: "fonts that aren't available
show in the fallback font until they are: <families>".

Tests that set type in fonts the test machine may lack (Helvetica,
Ryumin, made-up names) check the program's warnings without that note,
since which fonts are installed depends on the machine.
2026-11-09 12:31:17 -03:00
BFlat 67c7cbda51 Merge pull request #6321 from jmverges/fix/6313-pdf-image-mask-colorized
PDF import: image masks open colorized by the color they are painted in (#6313)
2026-11-09 22:26:37 +07:00
NetterSilverandClaude Haiku 5.5 511bb23999 Strip leading byte-order mark in graph CSV parser
Found while testing crates/engine/src/cmd/graph/data.rs:45-47 (parse_csv)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 15:25:52 +00:00
BFlat c66cb516e2 Merge pull request #6317 from dotCooCoo/fix/pdf-cmyk-gradient-image
PDF export: dithered and Perceptual CMYK gradients stay CMYK
2026-11-09 21:46:10 +07:00
jmvergesandClaude Opus 5.5 def928c0dc PDF import: image masks open colorized by the color they are painted in (#6313)
A PDF image mask (`/ImageMask true`) painted in a solid color opened as an
RGB image with the color in its pixels: Fill and Recolor Artwork didn't
reach the color, a spot color lost its ink, and the same mask painted again
in another color took the first one, because the painted image was cached
by the mask alone, and so did an uncolored pattern whose cell draws a mask.

It now opens as a grayscale image of what it paints, colorized by that
color, as the .ai reader opens a 1-bit image mask (#5790). A spot color
keeps its swatch and tint. The page's walk counts paths, not images, so the
ink is found from the color space. Readings of a pattern cell are told
apart by colorized images' colors too. Inside an alpha soft mask, or
painted with a pattern, a mask opens as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 14:43:13 +00:00
Fabio William Conceição 84e7d55bc8 G5: finish Eyedropper and undo wording for a picked part
copyFrom only writes paints enabled for pickup and apply, and paint, Transparency and the Eyedropper record an undo step only when the override changes.
2026-11-09 14:42:18 +00:00
Fabio William Conceição a4ea6d6fbe Merge remote-tracking branch 'upstream/main' into feat/g5-dynamic-symbol-part-appearance
# Conflicts:
#	docs/gaps.md
#	docs/target-app-parity.md
2026-11-09 14:42:18 +00:00
BFlat b4cb6a69c4 Merge pull request #6306 from thisisgomaa/fix/macos-native-cursor-delivery
macOS: deliver canvas cursors through AppKit pending a winit fix
2026-11-09 21:37:25 +07:00
Fabio William Conceição 0f2dde0282 G5: qualify when a picked part takes the Eyedropper and Transparency
copyFrom still edits the part when reverse, append and defaultsOnly are false, and reverse copies onto source. transparency.set records an undo step only when the override changes.
2026-11-09 14:27:19 +00:00
Fabio William Conceição e88e9077e7 G5: spell out part-paint targets and the pen gaps still open
A picked part takes transparency and the Eyedropper only when those calls omit their other targets. Art, Pattern and Bristle brushes, native Wayland and the web still do not take tilt, bearing or rotation.
2026-11-09 14:07:48 +00:00
Fabio William Conceição 08cc3d6ffa Merge remote-tracking branch 'upstream/main' into feat/g5-dynamic-symbol-part-appearance
# Conflicts:
#	docs/target-app-parity.md
2026-11-09 14:07:11 +00:00
Ahmed Gomaa 7020af6501 Merge remote-tracking branch 'upstream/main' into fix/macos-native-cursor-delivery 2026-11-09 15:59:17 +02:00
dotCooCoo 90bc821f3f PDF: dithered and Perceptual CMYK gradients stay CMYK
A dithered fill or a Perceptual linear or radial gradient whose stops
are all CMYK was written as an RGB image. It is now a CMYK image.
The stops keep their inks, an off-center midpoint is halfway between
its two stops' inks, and a Perceptual curve uses the ink mixes a
DeviceN shading uses. Dither's noise is added per ink and adds no ink
where the gradient has none.

The Output settings convert the inks as they do for any CMYK image.
A gradient with an RGB, gray or Lab stop, a stop linked to a spot
swatch, or a Perceptual curve of more than 4,096 stops is still written
as an RGB image.
2026-11-09 05:55:04 -08:00
BFlat 1eaf678083 Merge pull request #6158 from thisisgomaa/fix/arabic-mark-colour-ownership
Type: colouring Arabic marks preserves joining and glyph ownership
2026-11-09 20:39:32 +07:00
Fabio William Conceição 0216bd58c5 G5: document gradient, pattern, opacity and blend on a picked part
The MCP guide and the Eyedropper spec still said those were refused for a Direct Selection of a dynamic symbol part.
2026-11-09 13:12:49 +00:00
Ahmed Gomaa 5c64c074ca Merge remote-tracking branch 'upstream/main' into fix/macos-native-cursor-delivery 2026-11-09 15:02:19 +02:00
Ahmed Gomaa 7d4f8dce27 Merge remote-tracking branch 'upstream/main' into fix/arabic-mark-colour-ownership 2026-11-09 15:02:18 +02:00