Commit Graph
10464 Commits
Author SHA1 Message Date
Fabio William Conceição df6065b5b4 G5: assert Mana Glow appearance after addFromLibrary 2026-11-10 14:26:37 +00:00
Fabio William Conceição 710e14a33a G5: built-in Game HUD graphic style library 2026-11-10 14:26:37 +00:00
BFlat 73dc058596 Merge pull request #6352 from christianlappin/codex/fix-6318-thumbnail-test-race
Tests: synchronize the thumbnail queue priority assertion
2026-11-10 20:19:11 +07:00
BFlat 207091564e Merge pull request #6349 from juliusvaart/5421-line-arrowhead
Stroke: Line Arrow arrowhead (part of #5421)
2026-11-10 20:19:01 +07:00
BFlat d80e73b76e Merge pull request #6342 from christianlappin/codex/fix-6322-rotate-view-mcp
MCP: handle Rotate View gestures in the desktop canvas
2026-11-10 20:10:24 +07:00
BFlat 776e468e89 Merge pull request #6242 from annoybot/fix/pdf-gradient-forms-macos
M4: fix PDF gradient placement in transparency groups
2026-11-10 20:05:34 +07:00
BFlat f680f8b1fd Merge pull request #6339 from christianlappin/codex/fix-6323-kashida-test-order
Tests: preserve duplicate glyph order in kashida ownership checks
2026-11-10 20:05:25 +07:00
BFlat 67190e6737 Merge pull request #6243 from z3r0pix3l/fix/6072-pdf-arabic-ligatures
PDF import: Arabic ligatures keep their letters in order (#6072)
2026-11-10 20:01:04 +07:00
BFlat 8365bba400 Merge pull request #6397 from AhmedKhan-GH/fix/virtiofs-enotty-full-flush
Fall back to a plain flush when F_FULLFSYNC fails with ENOTTY
2026-11-10 20:00:55 +07:00
ruchirguitarandFredApps 243bdb3f63 Fix #5713: resizable icon flyouts and bottom-aligned panel footers (#5973)
* Fix #5713: resize icon flyouts and anchor panel footers

* Fix #5713: reconcile parity evidence with upstream docs

* Fix #5713: keep Actions rows above the pinned footer

* Fix #5713: align documentation dates and regression claims

* Fix #5713: keep short Glyphs grids above the footer

* Fix #5713: pin craft-ui host minimum-size correction

---------

Co-authored-by: FredApps <153173854+FredApps@users.noreply.github.com>
2026-11-10 13:40:55 +01:00
BFlat c86e66239e Merge pull request #6383 from jmverges/fix/3179-envelope-type-note
.ai import: a note for type in an envelope (part of #3179)
2026-11-10 18:58:09 +07:00
jmverges 636c7951f9 Merge main into fix/3179-envelope-type-note
# Conflicts:
#	docs/file-format-parity.md
2026-11-10 11:00:42 +00:00
Julius van der Vaart c65613aaf0 Merge branch 'main' of github.com:storytold/vectorcraft into 5421-line-arrowhead
# Conflicts:
#	docs/target-app-parity.md
2026-11-10 11:56:48 +01:00
BFlat d5ad6a817d Merge pull request #6416 from Messhias/feat/g5-symbol-lib-map-markers
G5: built-in Map Markers symbol library
2026-11-10 17:48:27 +07:00
Fabio William Conceição db97802ce6 G5: record Map Markers on the M10 milestone 2026-11-10 10:09:35 +00:00
Fabio William Conceição e3a17716ed G5: built-in Map Markers symbol library 2026-11-10 10:09:21 +00:00
Julius van der Vaart 2f662ca509 Merge branch 'main' of github.com:storytold/vectorcraft into 5421-line-arrowhead 2026-11-10 10:06:42 +01:00
BFlat 3290350b90 Merge pull request #6413 from jmverges/fix/envelope-check-white-art
.ai import: the live envelope and warped type check sees white art (#6412)
2026-11-10 15:50:33 +07:00
Julius van der Vaart 5b7325483a Merge branch 'main' of github.com:storytold/vectorcraft into 5421-line-arrowhead
# Conflicts:
#	docs/target-app-parity.md
2026-11-10 09:50:32 +01:00
BFlat 1341833542 Merge pull request #6407 from Hassan1305/feat-4936-context-menu-auto-spell
#4936: Spelling › Auto Spell Check in the context menu of type
2026-11-10 15:48:01 +07:00
BFlat d7ebc2f5ba Merge pull request #6411 from dotCooCoo/feat/script-run
Scripts: File › Scripts › Other Script… runs JavaScript files
2026-11-10 15:47:19 +07:00
BFlat a76d3b9dbb Merge pull request #6409 from dotCooCoo/fix/dimension-anchor-clicks
Dimension tool: a click on an anchor of any path takes that anchor
2026-11-10 15:31:18 +07:00
BFlat cd9dc52c79 Merge pull request #6408 from dotCooCoo/fix/outline-mode-canvas
View: Outline draws on a white canvas, with artboards as their edges
2026-11-10 15:18:48 +07:00
Julius van der Vaart 8508c9c620 Merge branch 'main' of github.com:storytold/vectorcraft into 5421-line-arrowhead 2026-11-10 09:13:56 +01:00
jmvergesandClaude Opus 5.5 3b1b5c7d47 .ai import: the live envelope and warped type check sees white art (#6412)
The check that keeps a live envelope or warped type only where it draws
as the art saved with it renders each on its own, over nothing, and
compared the pixels as seen on white. White art over nothing looks like
nothing on white, so white contents that drew somewhere else passed and
opened live in the wrong place.

Pixels now also differ when they look different seen on black, so such
art keeps its saved art, as colored art does. Opaque colored art is
compared as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 07:59:02 +00:00
HassanKhan 9220c8526c #4936: the spell check revision rows go in each doc's Revision history 2026-11-10 12:56:29 +05:00
BFlat 8400af1065 Merge pull request #6405 from dotCooCoo/fix/escape-resets-rotation-once
View: one Escape resets a rotated view when it has nothing else to end
2026-11-10 14:47:22 +07:00
dotCooCoo 7b44ef5737 Merge main into feat/script-run 2026-11-09 23:43:37 -08:00
dotCooCoo 59791c8c0f Dimension tool: a click on an anchor of any path takes that anchor
With the Linear mode, two problems kept a click on an anchor from
taking it:

- A press on an anchor that moved more than 3 pixels before the release
  dragged out the dimension of the segment under the pointer and
  committed it almost on top of the art. A press on an anchor now picks
  it unless the pointer moves past the anchor's 8-pixel reach; a longer
  drag still dimensions the segment.
- A pick linked only an anchor of the segment nearest the pointer. An
  anchor of another path near that segment, for example one inside a
  group lying just inside another object's edge, was taken at most as a
  Smart Guides point with no link, so the dimension did not follow it
  when the art changed. A pick now links the nearest anchor of any
  visible, unlocked path within reach, in groups and compound paths too.
2026-11-09 23:38:23 -08:00
dotCooCoo a0c2dbb6da View: Outline draws on a white canvas, with artboards as their edges
In Outline the canvas kept the Preview pasteboard color and filled each
artboard with white paper. Paths and type draw as black hairlines, so
art on the pasteboard was close to invisible in the dark interface
brightnesses.

In Outline the whole canvas is now white in every interface brightness
and Canvas Color, pasteboard included. The artboards draw no paper and
show as their edges, so Simulate Colored Paper, an artboard's background
color and the paper of View > Hide Artboards no longer show in Outline.
The artboard names and the ruler origin's crosshair draw in dark gray
there. In split views and floating windows the artboard names follow
that window's own Outline setting, as the canvas already did.
2026-11-09 23:34:14 -08:00
HassanKhan 20b9aa9401 #4936: the M7 row and the Type advanced area rows name Spelling › Auto Spell Check 2026-11-10 12:33:53 +05:00
BFlat dc456e18c7 Merge pull request #6401 from dotCooCoo/fix/svg-export-mask-regions
SVG export: mask and filter regions cover the art they apply to
2026-11-10 14:31:02 +07:00
dotCooCoo 19ce2b2547 Scripts: a command's savepoint copies no undo steps but the newest
Each command a script runs keeps a savepoint of the state it may need
to put back if it fails. The savepoint cloned every open document's
whole undo history, so a script that made N edits did O(N^2) work.

- The savepoint now clones each document's state without its history
  and keeps a mark: the newest undo and redo steps and the serials of
  the steps under them. Until the command ends, the history trims no
  step, and a new step sets the redo steps aside instead of dropping
  them. A failed command truncates both stacks back to the mark.
- file.close, file.closeAll, document.close and file.revert still keep
  a whole copy, since they remove the history or the document.
- When a failed command removed or changed a step under the newest
  one, the history cannot be put back exactly, and the run stops with
  an error; its rollback restores the documents as they were before
  the run.
- run_guarded no longer copies the histories during a script's run,
  and a committed run moves the histories from before it back instead
  of copying them.
- Symbol editing mode shares its saved redo steps between copies of a
  document's state.
- A script cannot run edit.clearHistory. A run keeps each document's
  undo steps from before it, so the command reported a clear that the
  commit then undid.
2026-11-09 23:23:27 -08:00
BFlat c86c535389 Merge pull request #6402 from dotCooCoo/feat/text-glyph-bounds
Type: an optional setting measures point type by its glyph outlines
2026-11-10 14:14:00 +07:00
HassanKhan 27616b1d7b #4936: Spelling › Auto Spell Check in the context menu of type
A right-click on type has a Spelling submenu with Auto Spell Check, as the
public Check and correct spelling page describes. A submenu that holds only
toggles shows their check marks, even in the context menu.
2026-11-10 12:09:02 +05:00
dotCooCoo 858e4235db View: one Escape resets a rotated view when it has nothing else to end
Escape reset a rotated view only as the second of two presses less than
a second apart, and a click or another key between them started the
count again. With the Rotate View tool one press reset it.

Now an Escape that has nothing else to end resets the rotation. An
Escape that ends something else (isolation mode, a path being drawn, a
full screen mode, a dialog and the others listed in
docs/target-app-parity.md) ends only that, and the next Escape resets
the view, however long after it comes. Tools report a path or pick that
Escape ends with `Tool::ends_on_escape`.

The rotate view tests that needed two presses now check one press, and
the screen mode test that named the old pair is renamed.

Docs: docs/target-app-parity.md.
2026-11-09 22:56:53 -08:00
BFlat f23624aeba Merge pull request #6398 from Hassan1305/feat-4936-context-menu-followups
Part of #4936: follow-ups to #6385 (only the topmost type's word; dictionary tests one at a time)
2026-11-10 13:37:41 +07:00
dotCooCoo 8ae9ca2012 SVG export: masks over type keep the full region; live art measured expanded
A mask, inverted mask or knockout group over type now keeps the region
that covers any artwork. Type is measured by its layout or, on a path,
by the path, and a reader that sets live type in its own font can draw
it wider, so a region sized from that box could cut glyphs off.

A live object (blend, envelope, repeat, mesh, placed document,
intertwine) under a mask is measured as the art the writer writes for
it, expanded on its own with the same limits.

The writer keeps its symbol boxes and symbols' art reach in plain
fields instead of cells.
2026-11-09 22:37:17 -08:00
BFlat 9761a5a514 Merge pull request #6400 from dotCooCoo/fix/revolve-clear-face-opacity
Revolve: a member whose fill or stroke is at 0% opacity stays invisible in a revolved group
2026-11-10 13:33:21 +07:00
BFlat d576dd0d39 Merge pull request #6399 from dotCooCoo/feat/api-reference
Commands: engine.apiReference returns the command API reference in Markdown
2026-11-10 13:28:44 +07:00
dotCooCoo bd0515ccc8 SVG export: mask and filter regions cover the art they apply to
Opacity masks, inverted and unclipped masks, and knockout groups were
written with mask and filter regions of 200,000 x 200,000 units around
the origin. CairoSVG draws each mask into an image of its region's size
and stops with "out of memory", so a file with any of them did not
open; Firefox drew inverted masks wrong and WebKit drew knockout groups
and inverted masks wrong.

Each region now covers what the masked or knocked-out art paints: its
visual box grown by its raster effects, brush art and members' reach,
the mask art's box, and in a scaled symbol instance its strokes and
effects at their own size. A mask whose art reaches past its object
still comes back whole on import.
2026-11-09 22:16:58 -08:00
BFlat ff6c300a9d Merge pull request #6396 from dotCooCoo/fix/export-selection-keeps-clip
Export: exported objects keep the clips, masks and effects around them
2026-11-10 13:13:14 +07:00
dotCooCoo 860149a981 Merge main into feat/text-glyph-bounds 2026-11-09 22:03:17 -08:00
dotCooCoo cc03fade6e Scripts: the growth budget counts every art store, with CLI and source fuzz tests
A document a script opens now counts the art in its graph designs and in
the original of the pattern being edited toward the growth allowance.
`Document::art_roots` and `art_roots_mut` list every tree of a document's
art; `any_node`, `edit_nodes_where` and the script's object count use them.

`script.run` checks the depth of `args` without recursion before it copies
or writes them out, so `args` nested 10,000 levels deep is refused with the
place it went past 64 levels instead of overflowing the stack.

New tests: graph-design art and the growth allowance, `args` nested 10,000
levels deep from a script (a RangeError) and from a caller, `run --cmd
script.run` on the command line with a report and with a thrown error, and
a property test that sends arbitrary source through `script.run`.
2026-11-09 22:00:04 -08:00
dotCooCoo 156613941a Type: glyph bounds take in underline and strikethrough bars
With Measure Type by Glyph Bounds on, point type is measured by its
glyph outlines and its underline and strikethrough bars, as the canvas
draws them. A typed W or H gives what is drawn that size, and underlined
or struck-through spaces are measured by their bars instead of the em
box.

The texts now say that each point type object selected as an object
(not inside a selected group) is measured this way, that moved type
snaps by its ink box, and which Arrange Tools commands follow the
option: Swap Objects, Replace with Top Object, Set Size of Each and
Sort Objects. Arrange in Grid and Group Overlapping Objects keep
measuring visual bounds.
2026-11-09 21:53:22 -08:00
HassanKhan 0d7c6dd6e2 Spelling right-click: Intertwine members by their tier at the point (part of #4936) 2026-11-10 10:48:52 +05:00
Julius van der Vaart 89482ba940 Stroke: Line Arrow's arms match the line at 100 % only from 0.25 pt (#5421) 2026-11-10 06:48:16 +01:00
Julius van der Vaart c8d7f2cce0 Stroke: Line Arrow's arms take the head's weight, at least 0.25 pt (#5421) 2026-11-10 06:42:19 +01:00
dotCooCoo c703cc5650 Revolve: a face drawn on its own keeps its fill or stroke's opacity and blending mode
A face of a group member that paints nothing (its fill or stroke at 0% opacity) was drawn without a group, so its zero opacity was lost and the member drew fully opaque. Such a face now keeps a group with the opacity and blending mode of its fill or stroke.
2026-11-09 21:37:27 -08:00
BFlat 04edd114b1 Merge pull request #6395 from dotCooCoo/fix/revolve-group-depth-order
Revolve: a group's faces keep one back-to-front order when a member is transparent
2026-11-10 12:27:32 +07:00