Commit Graph
13024 Commits
Author SHA1 Message Date
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
Patrick Nadeau 3befda6e12 M4: limit gradient documentation to PDF behavior 2026-11-09 08:45:23 -05:00
Patrick Nadeau ad7cf2898c M4: keep gradient evidence with October history 2026-11-09 08:45:23 -05:00
Patrick Nadeau 6063e662bc M4: correct PDF gradient progress dates after review 2026-11-09 08:45:23 -05:00
Patrick Nadeau ac674accfd M4: fix PDF gradient placement in transparency groups
Move form transforms into page space so Quartz keeps gradients aligned with their artwork. Add macOS rendering regressions and round-trip coverage for transparency, masks, layers and overprint.

Update the fix for the shared craft-pdf writer and the split exporter modules. Preserve upstream mask, coordinate-limit and layer-box fixes, moving the layer's paper bounds into the form's new space too.

Verified all three Quartz regressions fail on upstream 65adb7b21 and all five gradient-form tests pass with the fix. The new translated-layer regression also fails without moving the layer's paper bounds.

Before the final rebase onto 782f213e4: 463 PDF tests passed (one existing ignored test), workspace fmt, PDF Clippy, wasm, pdf-deps, layers, assets and brands passed. The final rebase reconciles documentation only; the PDF crate is unchanged from that tested revision.

After the final rebase, workspace fmt and Clippy pass. Full cargo xtask ci timed out while compiling workspace tests, so the full test suite and remaining CI stages did not complete. The earlier macOS Clippy blocker has been fixed upstream.
2026-11-09 08:45:23 -05: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
Taha-Mahmoodi 5d9c16411b Merge remote-tracking branch 'origin/main' into feat/glyph-alternates
# Conflicts:
#	docs/gaps.md
#	docs/target-app-parity.md
#	docs/type-parity.md
2026-11-09 17:48:57 +04:30
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
Taha-Mahmoodi 1ba9025583 Glyphs: warn for Entire Font glyph choices and fit regression previews 2026-11-09 17:35:08 +04:30
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
Fabio William Conceição 6def1c6b04 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 13:00:35 +00:00
Taha-Mahmoodi 673298e86d Merge remote-tracking branch 'origin/main' into fix/import-document-title
# Conflicts:
#	docs/file-format-parity.md
#	docs/gaps.md
#	docs/target-app-parity.md
2026-11-09 17:29:33 +04:30
Taha-Mahmoodi 645ad40c87 Merge remote-tracking branch 'origin/main' into fix/ruler-double-click-guide 2026-11-09 17:29:20 +04:30
Taha-Mahmoodi 699073d66e Glyphs: accept positional glyph choices and tighten reviewed style values 2026-11-09 17:11:14 +04:30
BFlat 6dac80e75d Merge pull request #6166 from thisisgomaa/codex/snapping-quick-access
Control bar: add glyph and alignment guide toggles to Snapping
2026-11-09 19:38:52 +07:00
BFlat 49853de906 Merge pull request #6303 from Hassan1305/feat-4936-dictionary-followups
Part of #4936: follow-ups to #6296 (read the dictionary file whole; keep other windows' words when a save fails)
2026-11-09 19:19:41 +07:00
Fabio William Conceição 1ff0fd62fc G5: rustfmt dynamic symbol part paint paths 2026-11-09 12:18:55 +00:00
Fabio William Conceição 1e278a3dff G5: dynamic symbol parts take opacity, blend and non-solid paint
Direct Selection of a path, compound path or type inside a dynamic instance now applies transparency and gradient or pattern fills through the usual paint commands, and the G5 docs catch up on Overlap and Pattern auto corners.
2026-11-09 12:14:14 +00:00
Ahmed Gomaa 7fa506c3f8 Merge remote-tracking branch 'upstream/main' into fix/macos-native-cursor-delivery 2026-11-09 14:13:27 +02:00
Ahmed Gomaa e873ae6f87 Merge remote-tracking branch 'upstream/main' into codex/snapping-quick-access 2026-11-09 14:03:54 +02:00
Ahmed Gomaa 85a96463bc Merge remote-tracking branch 'upstream/main' into fix/arabic-mark-colour-ownership 2026-11-09 14:03:39 +02:00
Ahmed Gomaa aec326b6c6 macOS: deliver canvas cursors through AppKit pending a winit fix
On macOS the canvas paints tool cursor glyphs into the frame, so they
trail the pointer by a frame or more (#2292). This interim adapter
delivers the same glyphs as native NSCursors, which AppKit moves
independently of canvas redraws.

ui-egui prepares cached 1x/2x RGBA requests from the existing cursor
rasterizer and hotspots (transparent padding only) and keeps returning
a visible system fallback icon. The desktop host builds NSImage/NSCursor
objects with point-sized images and hotspots, owns cursor-rectangle
suspension and restoration, and hands the cursor back on menu tracking,
focus loss, empty passes, cursor overrides and shutdown.

Windows/X11, Wayland and web delivery are unchanged. No artwork, no
production unsafe, no new dependency package: only four AppKit features
are enabled on the already-shipped objc2-app-kit. Remove once the pinned
winit sizes macOS cursor images and hotspots in points.

Addresses #2292.
2026-11-09 13:44:32 +02:00
HassanKhan f0a4d59c93 Read the dictionary file whole before trusting it; keep other windows' words on a failed save 2026-11-09 16:23:08 +05:00
BFlat 81e467172c Merge pull request #6296 from Hassan1305/feat-4936-custom-dictionary
Part of #4936: custom dictionary and Ignore All commands
2026-11-09 19:20:59 +08:00
HassanKhan e1ce012b79 Part of #4936: docs name the CLI as keeping the custom dictionary; spell check row reads in order
docs/mcp.md: vectorcraft-cli's mcp and run sessions keep the words in the file too; only without preferences do they last until the app closes. docs/type-parity.md: the custom dictionary commands are done and only the dialogs and Auto Spell Check remain, with the evidence at the end of the row.
2026-11-09 15:42:58 +05:00
BFlat 6f5721b0be Merge pull request #6047 from mockydevs/fix/eps-page-type-ligatures
EPS/.ai editing data: a ligature glyph named by a private-use character matches its text object
2026-11-09 18:37:14 +08:00
Ahmed Gomaa a3e626600c Merge remote-tracking branch 'upstream/main' into fix/arabic-mark-colour-ownership 2026-11-09 12:36:54 +02:00
Ahmed Gomaa aad040f012 Merge remote-tracking branch 'upstream/main' into codex/snapping-quick-access 2026-11-09 12:27:27 +02:00
HassanKhan 11779d6d46 Merge remote-tracking branch 'upstream/main' into feat-4936-custom-dictionary
# Conflicts:
#	docs/gaps.md
#	docs/roadmap.md
#	docs/target-app-parity.md
2026-11-09 15:04:56 +05:00
HassanKhan a22cbd9d16 Part of #4936: never write over an unreadable dictionary; undo a failed save
- A custom dictionary file that is there but can't be read whole (not a
  file, unreadable, or larger than the 1,000,000 bytes craft-proof reads)
  is not loaded and never written over: attaching it logs why, and every
  add, delete or change is refused with that reason. A missing file is
  still created by the first save.
- When a save fails, the command takes back only its own change, so memory
  and file agree; words the save took in from the file stay.
2026-11-09 15:04:39 +05:00
BFlat 50e3cab9b1 Merge pull request #6297 from adambelis/fix/blend-spine-followup
Follow-up to #6254: the blend spine keeps only the subpath it samples
2026-11-09 18:01:39 +08:00
Don Omondi 9d23da0c41 EPS/.ai editing data: a ligature glyph named by a private-use character matches its text object
When the page's type is matched with the text objects, page words are also
split at private-use characters (from uniXXXX ligature glyph names such as
/uniE028 for a "ti" ligature) and each piece is matched as its own word, so
"Quality" set with that ligature matches its text object and the layers are
read without a false note.
2026-11-09 04:43:53 -05:00
BFlat 6c99701b6f Merge pull request #6067 from mockydevs/fix/eps-named-cidfont-unicode
EPS import: CIDFonts only named, over a Unicode CMap, set their characters as live type
2026-11-09 17:40:50 +08:00
BFlat 06b65abff2 Merge pull request #6066 from mockydevs/fix/eps-cmap-base-fonts
EPS import: CMap mappings to base fonts' codes and glyph names draw their glyphs
2026-11-09 17:35:32 +08:00
BFlat 1d728666ba Merge pull request #6064 from mockydevs/fix/eps-kshow
EPS import: kshow runs its procedure between the characters of live type
2026-11-09 17:33:53 +08:00
BFlat ab3cd54310 Merge pull request #6294 from Silvertree2010/fix/h14198-graph-labels-show-0-for-tiny-neg
Show 0 instead of -0 for tiny negative graph labels
2026-11-09 17:29:15 +08:00
BFlat 1bca14355d Merge pull request #6031 from mockydevs/fix/eps-cid-fonts
EPS import: CID-keyed fonts draw the glyphs of the CIDFonts the file carries
2026-11-09 17:29:02 +08:00
Drew Dibble d8472b2acc Canvas redraw: a trace object's source in each version; review follow-ups
Review of #6290.

- An Image Trace object's hidden source image counts as shown in each
  version by that version's own first member: an edit that puts it
  first again (undoing Send to Back on a traced shape), or a new source
  image in its place, redraws where it shows. Tested with an image
  source on screen with the objects' views.
- A shape of an Image Trace object in Outline view is left out by the
  rule every object is (node_checks::left_out), so the drawing and the
  measure of an edit can't disagree.
- The renderer keeps the brush library's key from its first measure of
  3D art until the library changes; the test says so, and that a change
  lets it go.
- The test of a 3D effect that builds nothing covers it on a fill and
  on a stroke, without effects of the object's own (exactly as without
  it) and under a raster effect.

On the commit before, "Canvas: a 3D effect on a fill that builds nothing
draws without it": it needs no effect of the object's own. A 3D effect
on a fill or stroke that builds nothing overflowed the stack on its own
too. With a raster effect, the object now draws from its art, where
without the 3D effect it draws as a path, whose raster effects are
clipped to the path's own geometry, cutting off the item's Roughen
spikes: the new drawing is the one that keeps them.
2026-11-09 02:18:53 -07:00
adambelis 585621a661 Blend: the spine keeps only the subpath it samples
Spine stored a full clone of the blend's PathData but only ever read its
first subpath. Store that SubPath instead, which drops the extra
allocation and makes the field's purpose clear. Document the field and
the two cases where Spine::new returns None.
2026-11-09 10:06:49 +01:00
BFlat c314ea25b9 Merge pull request #6293 from slafebre/fix/new-art-colorized-image
Follow-up to #6252: a selected colorized image gives new art its fill
2026-11-09 17:05:00 +08:00
HassanKhan 5bef0ed79a Part of #4936: custom dictionary and Ignore All commands
text.spelling.addWord, removeWord and changeWord are Check Spelling's Add
and Edit Custom Dictionary's Add, Delete and Change; text.spelling.dictionary
lists the words. They live in craft-proof, which every language's check
reads. The desktop app and vectorcraft-cli keep them in
`Custom Dictionary.txt` next to the preferences (none without preferences);
elsewhere they last until the app closes.

text.spelling.ignoreAll is Ignore All: the active document's checks skip the
word while it is open; not saved, not undoable, and not a change to the
document's revision.

Behaviour: https://helpx.adobe.com/illustrator/desktop/design-with-text/edit-format-text/check-and-correct-spelling.html
2026-11-09 13:54:08 +05:00
Don Omondi f71c6aaf5b EPS import: CIDFonts only named, over a Unicode CMap, set their characters as live type
A CMap name of the public Unicode CMap form (UniJIS-UCS2-H, UniGB-UTF16-H
and similar) is understood without being defined in the file, so type in a
CIDFont the file only names decodes to its Unicode characters and is set as
live type.
2026-11-09 03:48:35 -05:00
Don Omondi dc00c31a24 EPS import: CMap mappings to base fonts' codes and glyph names draw their glyphs
bfchar and bfrange mappings are kept in the CMap and carried over by
usecmap. A code mapped to a character code draws that code in the base font
usefont named; a code mapped to a glyph name draws that glyph.
2026-11-09 03:48:35 -05:00