Commit Graph
10525 Commits
Author SHA1 Message Date
BFlat fa13af4b8f Merge pull request #6353 from Messhias/feat/g5-brush-lib-game-trails
G5: built-in Game Trails brush library
2026-11-11 02:53:07 +07:00
BFlat 2caa5670dd Merge pull request #6446 from slafebre/fix/6419-assign-profile-panel
Fix #6419: Edit › Assign Profile… and Color Settings… scroll to the Color Settings
2026-11-11 02:47:51 +07:00
BFlat 6a83f3a268 Merge pull request #6452 from dotCooCoo/fix/glyph-bounds-width-keeps-font-size
Docs: with glyph bounds, the font size follows the vertical scale
2026-11-11 02:36:28 +07:00
BFlat 437794f033 Merge pull request #6450 from dotCooCoo/fix/3d-extrude-limits
3D: Extrude & Bevel and Inflate build detailed shapes they refused as too complex
2026-11-11 02:20:21 +07:00
BFlat 5861a719fe Merge pull request #6449 from dotCooCoo/fix/script-run-keeps-file-scope
Scripts: a framed run keeps the file-access roots it started under
2026-11-11 02:18:21 +07:00
Fabio William Conceição 9dc15b8f1f G5: built-in Game Trails brush library
Add Speed Line, Dash Trail, Burst Ray and Zigzag as original art brushes so motion and impact strokes are one library click away.
2026-11-10 19:04:40 +00:00
BFlat d2402b75bf Merge pull request #6425 from Hassan1305/feat-4936-edit-custom-dictionary
#4936: Edit › Edit Custom Dictionary… dialog
2026-11-11 02:01:47 +07:00
dotCooCoo a5d09c13f0 Docs: with glyph bounds, the font size follows the vertical scale
docs/mcp.md and docs/target-app-parity.md said that a width or height
typed with Measure Type by Glyph Bounds on changes the font size by the
scale. The font size follows the vertical scale only: a width typed
alone, out of proportion, changes the horizontal scale and keeps the
font size, and a height typed alone changes the horizontal scale the
other way. A new test checks both.
2026-11-10 10:57:34 -08:00
Sven Lafebre 2dd63e7240 Fix #6419: document the Separations Preview panel's Color Settings section functions 2026-11-10 19:55:53 +01:00
dotCooCoo a900653c9c 3D: Inflate limits the work of filling its grid
Inflate's grid clipped every ring of the outline in each cell the
outline crosses and tested every edge for each cell's center, so its
work grew with the outline's points times the cells: a comb of 4,000
teeth (16,002 points) took 1.1 to 1.3 s and one of 16,000 teeth 8.8 to
9.1 s. Inflate now counts that work (the edge index's entries, the edges
its queries look at and the ring points its cells clip) and refuses the
shape with "The 3D surface is too complex; simplify the shape" once it
passes 268,435,456, VectorCraft's own value (about 0.65 s). The index
takes at most 16,777,216 entries (64 MiB). Each row's inside test reads
the sorted crossings of its line, and a cell clips only the rings whose
bounds meet it, so a 65,536-point circle inflates in 0.66 s instead of
1.0 to 1.2 s.

The effects test of a stroke past the limits uses 40,000 corners, so its
outline passes the 65,536 points a solid takes.

Docs: docs/three-d.md, docs/mcp.md.
2026-11-10 10:43:24 -08:00
dotCooCoo af0d01308f Scripts: a framed run keeps the file-access roots it started under
A script.run that a control request started in the app's frames was
advanced by later frames, which run unconfined, so its vc.run file
commands could read and write outside the caller's automation roots.
The job now keeps the file-access scope of its script.run and runs
each slice in it, as background opening and the folder walker do.
2026-11-10 10:39:48 -08:00
BFlat 3776100ba6 Merge pull request #5560 from MarekSpodBiedry/issue-5534
Crop Image: cut plain raster images from their pixels instead of re-rendering (#5534)
2026-11-11 01:21:59 +07:00
BFlat 82944dd7b5 Merge pull request #5559 from MarekSpodBiedry/issue-5349
Step a blank Stroke Weight from 0.25 pt (#5349)
2026-11-11 01:17:35 +07:00
dotCooCoo 382d352da1 Merge main into fix/3d-extrude-limits 2026-11-10 10:15:04 -08:00
Sven Lafebre 64fb4d4554 Fix #6419: Edit › Assign Profile… and Color Settings… scroll to the Color Settings
Both commands show the Separations Preview panel (#4542), whose Color Settings
section, with the Assign row, comes after the plates and Proof Setup. A
floated panel fits its content only up to 320 points, so the section opened
out of sight and the panel looked like the wrong one. The commands now leave a
one-shot flag that scrolls the section into view, without animation, the next
time the panel draws. Window › Separations Preview and edits made in the panel
leave the scroll alone.
2026-11-10 19:14:48 +01:00
dotCooCoo 6484e72dff 3D: Extrude & Bevel and Inflate build detailed shapes they refused as too complex
Each Extrude & Bevel and Inflate solid now takes up to 65,536 outline
points (was 2,048) and 163,840 faces (was 32,768), VectorCraft's own
limits, as Revolve's. Before any point is sampled, the outline's lines
and curves are counted with each curve's tolerance pieces, and the faces
the walls, bevels and caps (Extrude) or the sides (Inflate) need. When
they do not fit, every curve takes fewer pieces, down to 4; a shape that
does not fit at 4 is refused with the existing surface error before any
face is built. The subpath count is capped at the point limit too. The
error texts are unchanged.

A closed path of 2,000 curves now extrudes with a bevel and inflates,
and paths of 5,000 and 10,000 curves build at the default settings.

Docs: docs/three-d.md, docs/mcp.md, docs/target-app-parity.md.
2026-11-10 10:14:22 -08:00
HassanKhan ab466f20a7 Merge remote-tracking branch 'upstream/main' into feat-4936-edit-custom-dictionary
# Conflicts:
#	docs/target-app-parity.md
2026-11-10 23:12:28 +05:00
BFlat 8e5d816b1d Merge pull request #6421 from jmverges/fix/3179-live-type-envelopes
.ai import: envelopes of type open live where they draw as their drawn art (#3179)
2026-11-11 01:11:19 +07:00
MarekSpodBiedry e9069e1418 Restore the spacing in the Weight spinner test helper (#5349) 2026-11-10 18:39:05 +01:00
MarekSpodBiedry a7df8985f9 Clear the textures delta in the Weight spinner test helper (#5349) 2026-11-10 18:38:50 +01:00
MarekSpodBiedry 4fc392977d Crop Image: check the pixel grid before decoding the image (#5534) 2026-11-10 18:36:34 +01:00
MarekSpodBiedry 90a8912027 Merge remote-tracking branch 'origin/main' into review-5560
# Conflicts:
#	docs/target-app-parity.md
2026-11-10 18:36:27 +01:00
MarekSpodBiedry eac92af537 Find the Weight spinner in the blank-weight tests from its rect, not fixed offsets (#5349) 2026-11-10 18:36:09 +01:00
MarekSpodBiedry 6a5b33bf29 Merge main into issue-5349 (#5349) 2026-11-10 18:36:08 +01:00
HassanKhan c66c1f207b Merge remote-tracking branch 'upstream/main' into feat-4936-edit-custom-dictionary
# Conflicts:
#	docs/gaps.md
2026-11-10 22:26:51 +05:00
jmvergesandClaude Opus 5.5 309d7e5363 Envelopes: put back only the outermost drawn art, and keep hidden type until the drawn art is found
The put-back after a failed page check replaces each live envelope with
its drawn art in one go, which fails as a whole when one envelope lies in
another's art: only the outermost are put back now. A live envelope of
type removes its hidden type only once it has found the drawn art it
replaces. The file format docs lose a revision row left twice by a rebase.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 17:26:29 +00:00
jmvergesandClaude Opus 5.5 3995dc79e4 docs: envelopes of type held to the page, and visibility bindings
The file-format revision row for #3179 says that the page check weighs
a live envelope of type as the art it draws, that layers used though
they don't draw as the page leave envelopes of type their drawn art,
and that a slot bound to a visibility variable keeps it too, and lists
the new tests. The parity assessment's evidence says the same, and
the change gets its row and status entry there.

Part of #3179.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 17:26:29 +00:00
jmvergesandClaude Opus 5.5 06d0651ebf .ai import: an envelope of type bound to a visibility variable keeps its drawn art
A variable library binds the text object a slot of the envelope's
contents became, which stays hidden beside the drawn art. Once the
envelope opened live that hidden text object went, and its type in the
envelope has an id of its own, so a visibility binding was dropped and
counted as one that wasn't made. A slot bound to a text variable
already kept the drawn art; one bound to a visibility variable does
too now, with the note, so the binding is kept.

Carrying the binding over to the type in the live envelope would bind
an object inside an envelope's contents, which nothing in the import,
the data sets or the .ai writer is known to handle, so it is left for
later.

Part of #3179.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 17:26:19 +00:00
jmvergesandClaude Opus 5.5 bf716bfecc .ai import: envelopes of type keep their drawn art in layers used though they differ from the page
An envelope of type opens live only where the layers with it draw as
the page. Two ways of using layers that don't left it live all the
same: the editing data trusted (they come from it with a note), and
the objects that draw differently coming in as the page's art. In both
the envelope now keeps its drawn art and its type, hidden, with the
note, as where its drawn art is put back. A .ai whose layers would
open alone, without its PDF part, then opens alone again, as it did
before envelopes of type could open live, rather than compared with
the page.

The type put back no longer carries the mark of type made from the
text document in its name.

Part of #3179.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 17:26:19 +00:00
jmvergesandClaude Opus 5.5 0916b40654 .ai import: the page check weighs a live envelope of type as the art it draws
The comparison with the page counts the area of each text object that
shows as type, which it holds to less (type laid out again from the
file's text can sit a little apart from the page's). It took the text
object in a live envelope's contents for such type, at its own unbent
box, so most of what an envelope of type draws went unweighed: one
opened live where the page draws other art there, with only a note
that the type differs. The envelope draws its type bent, as art, and
is now weighed as such, as the drawn art it takes the place of is.

Part of #3179.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 17:26:19 +00:00
jmvergesandClaude Opus 5.5 47b20b4366 .ai import: envelopes of type open live where they draw as their drawn art
An envelope whose contents hold type kept its drawn art, with the type
hidden, because the type is laid out from the text document only after
the layers are read. It now waits for that, as warped type does: once
its text slots hold their type, the envelope is made of that type and
drawn by VectorCraft's own rule, and where it draws as the drawn art the
file saves (the same check and budget as other envelopes) it takes the
drawn art's place, with the type visible and editable in Edit Contents.
The hidden copy of the type goes.

As other live envelopes are, it is held to the page: when the layers
with it don't draw as the page, its drawn art and hidden type are put
back. A .ai whose layers would open alone, without its PDF part, now
waits on the PDF part when an envelope of type is in them; where none
opens live, the layers open alone as before. Layers built without a page
leave envelopes of type their drawn art.

Elsewhere it keeps its drawn art and hidden type, with the note: type in
a font that isn't available, a slot without made type (threaded, bound
to a text variable, a wrap object, type a look draws), an envelope that
doesn't read, no check left, or one that draws differently. Envelopes in
a symbol's or a pattern's art keep their drawn art.

Part of #3179.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 17:26:19 +00:00
BFlat d70f4a59e4 Merge pull request #6444 from ruchirguitar/docs/tidy-gaps
Docs: tidy misplaced and duplicated notes at the top of docs/gaps.md
2026-11-11 00:23:55 +07:00
HassanKhan 5080a8eced text.spelling.editDictionary: say each list entry must be a single word (part of #4936) 2026-11-10 22:13:23 +05:00
BFlat 1d57048645 Merge pull request #6443 from ruchirguitar/docs/tidy-roadmap
Docs: move stray notes at the top of ROADMAP.md into Revision history
2026-11-11 00:10:59 +07:00
HassanKhan 9ab5c033b1 Merge remote-tracking branch 'upstream/main' into feat-4936-edit-custom-dictionary
# Conflicts:
#	docs/roadmap.md
#	docs/target-app-parity.md
2026-11-10 21:48:55 +05:00
HassanKhan 4a954a6a84 Edit Custom Dictionary: Done saves its deletes and adds together, all or none (part of #4936)
Done ran text.spelling.removeWord and text.spelling.addWord one word at a
time, each saving the file, so a save that failed after a delete was saved
left that word deleted even after Cancel. text.spelling.editDictionary
{remove, add} makes every change, saves once and takes all of them back when
the save fails; Done runs it once.
2026-11-10 21:48:25 +05:00
BFlat eddf676611 Merge pull request #6403 from makesomethingshit/fix/6369-halftone-preview-outlines
Keep selection outlines off the Vector Halftone preview (#6369)
2026-11-10 23:39:35 +07:00
ruchirguitarandClaude Opus 5.5 223cb3c814 Docs: record the docs/gaps.md tidy-up in its status line
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 21:55:33 +05:30
ruchirguitarandClaude Opus 5.5 466da0f8c8 Docs: record the ROADMAP.md tidy-up in its status line
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 21:55:33 +05:30
HassanKhan bc3d23bb50 Merge remote-tracking branch 'upstream/main' into feat-4936-edit-custom-dictionary
# Conflicts:
#	docs/gaps.md
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/type-parity.md
2026-11-10 21:13:30 +05:00
ruchirguitarandClaude Opus 5.5 d144014cee Docs: tidy stray notes at the top of docs/gaps.md
Move a stray table row and the PR #3273/#3272 revision notes into
Feature revisions, keep one "Feature evidence last updated" line, drop the
duplicate Flyout update status line and fold eight reconciliation rows
into one per date. No score or estimate changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 21:31:12 +05:30
ruchirguitarandClaude Opus 5.5 34a3734798 Docs: tidy stray notes at the top of ROADMAP.md
Move the unheaded change bullets above the Stage line and the revision
row inside the Headline numbers table into Revision history, each under
the date of the commit that added it. No score or estimate changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 21:30:52 +05:30
makesomethingshit a96f442e8c #6369: Reconcile roadmap and parity notes with main 2026-11-11 00:47:14 +09:00
BFlat e1137877ac Merge pull request #6424 from Messhias/feat/g5-style-lib-game-hud
G5: built-in Game HUD graphic style library
2026-11-10 22:19:35 +07:00
BFlat a991ec8dd6 Merge pull request #6432 from ruchirguitar/fix/3565-direct-select-type-path
Direct Selection shows and drags type on a path's direction handles (#3565)
2026-11-10 22:11:14 +07:00
makesomethingshit 0d198483f6 #6369: Merge main and preserve halftone preview notes 2026-11-11 00:00:30 +09:00
BFlat 0e63933019 Merge pull request #6431 from ruchirguitar/test/verify-stale-high-issues
Regression tests for #3566 (SVG entities in element content) and #3084 / #2096 (Export for Screens JPGs)
2026-11-10 21:52:51 +07:00
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
ruchirguitarandClaude Opus 5.5 b29f02a42e Test #3084: test that Export for Screens JPGs open in every colour model
Exports RGB, CMYK and grey JPGs at qualities 100, 80 and 50, at 1x and 2x,
and decodes each one. It also checks that only the CMYK files leave out the
JFIF segment (#3140). Covers #2096 too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 19:39:18 +05:30