Commit Graph
14658 Commits
Author SHA1 Message Date
BFlat fe5787405e Merge pull request #7879 from dotCooCoo/fix/screens-artboard-name-keys
Export for Screens: artboard name fields close on a first-frame key and commit when another opens
2026-11-16 01:31:09 +07:00
BFlat f23d7f9d00 Merge pull request #7744 from ruchirguitar/feat/4936-check-spelling-dialog
feat(ui): implement Check Spelling modal dialog (#4936)
2026-11-16 01:31:00 +07:00
BFlat 5bd8acfce9 Merge pull request #7762 from dotCooCoo/feat/3d-classic-track-cube
3D (Classic): the track cube turns the object on the Rotation tab
2026-11-16 00:04:07 +07:00
BFlat a391dedfe5 Merge pull request #7875 from dotCooCoo/fix/live-paint-bucket-click-history
Live Paint: Bucket double-click and triple-click match the paint from before a drag, a view-tool press or a joined edge
2026-11-15 23:56:28 +07:00
BFlat cf34cf8ed0 Merge pull request #7829 from dotCooCoo/fix/shadow-validation-builds-its-shadow-geometry
3D: shadow validation casts from the solids it checks
2026-11-15 23:56:19 +07:00
dotCooCoo e837dae7b3 Export for Screens: artboard name fields close on a first-frame key and commit when another opens
Escape or Enter pressed in the first frame that draws an artboard's name
field was dropped: the field asked for focus and skipped its key checks,
while the dialog kept itself open for the field. The field now ends the
edit on either key in that frame too.

A double-click on an earlier artboard's name, with both clicks in one
frame, replaced the edit of a later artboard before that artboard's field
was drawn, so the name typed there was lost. The typed name now goes to
its artboard before the new field opens.

Follows #7695.
2026-11-15 08:30:11 -08:00
ruchirguitar 104a844da1 feat(ui): implement Check Spelling modal dialog (#4936)
# Conflicts:
#	docs/roadmap.md
2026-11-15 21:33:12 +05:30
BFlat bd67a010f6 Merge pull request #7827 from dotCooCoo/feat/ai-export-writes-kinsoku-kinsoku-shori-type
.ai export: paragraphs keep Kinsoku, Kinsoku Shori Type, Burasagari and Bunri-Kinshi
2026-11-15 22:45:05 +07:00
BFlat 9c2f6ec53d Merge pull request #7838 from dotCooCoo/feat/ai-save-nested-envelope-editable
.ai import: an envelope straight in another envelope's contents block opens live inside it
2026-11-15 22:44:56 +07:00
BFlat 7ba0d2fd08 Merge pull request #7841 from MMexicann/patch-1
docs(G2): describe the shipped Effect Gallery preview
2026-11-15 22:44:48 +07:00
BFlat d5b8d51d64 Merge pull request #7843 from MMexicann/patch-2
docs(G6): complete the control method reference
2026-11-15 22:44:40 +07:00
dotCooCoo dd57562d46 Merge main into feat/3d-classic-track-cube 2026-11-15 07:42:24 -08:00
dotCooCoo 6437627050 Merge main into fix/shadow-validation-builds-its-shadow-geometry 2026-11-15 07:41:58 -08:00
dotCooCoo 80baae91cd 3D (Classic): the panel's and a dialog's track cubes each keep their own focus and drag
With the 3D and Materials panel and a classic 3D dialog both showing a
track cube, the two cubes shared one widget id, so the keyboard focus of
one moved the other, and a drag on one cube was read by the other: Escape
there put the first cube's settings into it, and its button-up check ended
the gesture before the cube being dragged saw the release. Each cube now
has its own id, keyed by its dialog or panel, and only the cube a drag
started on follows, restores or ends it.
2026-11-15 07:38:56 -08:00
BFlat 8803a9e31a Merge pull request #7857 from storytold/fix/ka-duplicate-rows
i18n: Georgian keeps one row of each duplicated message (fix main)
2026-11-15 22:38:46 +07:00
dotCooCoo d86c9871c6 Live Paint: a triple-click after a release across an edge matches the fill from before it
When a click's press lands in one face and its release in the next, the
drag fills both. The bucket now notes the fill every face the drag
crosses had before the press, the release included, so a double-click
or triple-click that follows on such a face compares that fill instead
of the one the first click gave it. This also holds when the release of
the last click crosses into the clicked face.

When the first click makes the Live Paint group, or merges the selection
into a selected group, the crossed face counts with the fill it was made
with: a kept face's paint from the merged group (an unplaced gradient
fixed to its fit), else the fill Make gives it, the topmost fill that
draws of the front-most source path over it that has one. A selected
group's edges no longer count as source paths.

A double-click whose two clicks land on two joined edges now paints the
edges joined through the other edge its clicks painted:
livePaint.strokeEdge takes `through`, edge ids that the join counts as
drawing with `match`, and the tool passes that edge. When the second
press lands on the next edge and is released back on the first, the
double-click matches the first edge's stroke paint from before the
first click.

A press that the view tools take (held Space, the middle button), or
that holds Cmd/Ctrl and goes to the lent selection tool, now counts as
a press that paints nothing, so the clicks around it are not taken for
one triple-click's: the session tells the tool through the new
Tool::press_elsewhere.

The tool doc, docs/mcp.md and the progress-doc line now say that a click
records an undo step only when it changes a paint, and that a
triple-click paints the faces that have the clicked face's fill (and the
edges that draw with the clicked edge's stroke paint) with the bucket's
paint.

Follows #7291.
2026-11-15 07:19:56 -08:00
dotCooCoo d1213a923e Merge branch 'feat/3d-classic-track-cube' into feat/3d-classic-track-cube 2026-11-15 06:56:42 -08:00
bflatastic f577781921 i18n: Georgian keeps one row of each message added twice
#7774's Georgian catalog and #7532's script.run answers rows landed in the same batch with
twelve of the same messages, so bundled_catalogs_are_consistent fails on a duplicate. The
first of each pair stays.
2026-11-15 21:50:17 +07:00
dotCooCoo 4cbd326445 Merge main into feat/3d-classic-track-cube 2026-11-15 06:18:12 -08:00
dotCooCoo 0272bb6de8 Merge main into fix/shadow-validation-builds-its-shadow-geometry 2026-11-15 06:15:03 -08:00
BFlat 3075889f0c Merge pull request #7812 from dotCooCoo/fix/a-nested-message-value-that-starts-with-is-not
i18n: an effect refusal inside another message is translated with its reason
2026-11-15 20:46:00 +07:00
BFlat 3239725c40 Merge pull request #7817 from dotCooCoo/feat/psd-import-options-import-slices-after-7649
PSD: Import Slices brings a file's slices in as user slices on Open and Place
2026-11-15 20:45:50 +07:00
BFlat b389d3e5bc Merge pull request #7830 from dotCooCoo/fix/a-symbol-instance-written-as-its-art-reads-back
.ai save: live art written as a group keeps wrapping type by its bounds
2026-11-15 20:45:41 +07:00
BFlat 402b8c7820 Merge pull request #7824 from dotCooCoo/fix/a-part-with-nan-opacity-neither-casts-a-shadow
3D: art at NaN or infinite opacity casts no shadow
2026-11-15 20:45:32 +07:00
BFlat e06958143d Merge pull request #7825 from dotCooCoo/fix/nested-symbol-box-is-not-a-hit
Selection: a nested symbol instance's box past the outer box is not a hit
2026-11-15 20:45:25 +07:00
BFlat 9531b8a57a Merge pull request #7826 from dotCooCoo/fix/a-knockout-group-with-no-blending-inside-still
PDF export: a knockout group that does not isolate is written without /I true
2026-11-15 20:45:11 +07:00
BFlat ea3f81d9c3 Merge pull request #7518 from Taha-Mahmoodi/feat/indic-composers
feat(text): Middle Eastern & South Asian and Standard composers per paragraph (#4935)
2026-11-15 20:45:02 +07:00
BFlat 126f820db2 Merge pull request #4508 from el-j/perf/post-edit-cascade-4502
perf(engine): optimize selection prune and sanity checks for large selections (#4502)
2026-11-15 20:44:54 +07:00
BFlat 4a29b219d2 Merge pull request #7774 from devius/ka-update
i18n(ka): update the Georgian catalog (2,129 strings)
2026-11-15 20:44:47 +07:00
Mex 6b821c7c50 docs(G6): complete the control method reference
Document the existing resize defaults and parameterless focus method. Keep one complete ui.render row, including traceViews, and record the documentation revision.

Source and rendered table reviewed. No local Rust build or tests ran; cargo/rustc are unavailable and PR CI validation is required.
2026-11-15 14:37:37 +01:00
Mex 55f1e6430a docs(G2): distinguish the raster pipeline from the gallery
Separate the 57-filter pipeline from the gallery's six browsable categories. Retain the original upcoming raster-effects work; only the already-shipped thumbnails and in-dialog preview leave the missing list.

Documentation review follow-up; no local Rust build or tests ran.
2026-11-15 14:33:55 +01:00
Mex 33acc1fe11 docs(G2): describe the shipped Effect Gallery preview
Align the README status and upcoming work with the shipped Effect Gallery thumbnails and in-dialog preview. Keep the filters described as approximations.

Documentation only. Reviewed against the current gallery source, regression coverage, ROADMAP.md and docs/gaps.md. Local cargo/rustc are unavailable; the PR CI gate must complete before validation is claimed.
2026-11-15 14:26:27 +01:00
dotCooCoo 4e57e7594a Merge main into feat/ai-save-nested-envelope-editable 2026-11-15 04:55:08 -08:00
dotCooCoo 6fc0ef4596 .ai import: an envelope straight in another envelope's contents block opens live inside it
An envelope record that lies in an outer envelope's AIDeformArtKey
block (X= ... X+) with no group around it now opens as a live envelope
inside the live outer one, and an object's own dictionary there (its
name) applies to it. Each envelope is still compared with its own drawn
art: an inner one that doesn't match keeps its drawn art as the outer
envelope's contents, and an outer one that doesn't match keeps its own.

- An envelope record in an opacity mask's art reads as part of the
  mask; its block's X+ no longer ends the mask's art, which failed the
  import.
- Envelopes still waiting for their XP when a dictionary ends keep
  their drawn art, so a stray XP in a later container cannot take them.
2026-11-15 04:54:40 -08:00
BFlat 99ae951f3b Merge pull request #7562 from dotCooCoo/fix/i18n-scanner-return-tail
i18n: the untranslated scan reads return values and tail expressions, not locals
2026-11-15 19:45:17 +07:00
BFlat 04731b9ce0 Merge pull request #7771 from dotCooCoo/feat/status-bar-show-menu
Status bar: a Show menu chooses what the info field displays
2026-11-15 19:45:09 +07:00
BFlat e8221bbc1d Merge pull request #7831 from storytold/fix/trace-seam-anchors
Fix main: trace seam runs after the Anchors change, and duplicate Russian rows
2026-11-15 19:42:20 +07:00
bflatastic 34eac939c9 i18n: Russian keeps one row of each script answers message
#7532's script.run answers rows and the Russian message rows landed in the same batch with
the same ten messages, so bundled_catalogs_are_consistent fails on a duplicate. The first
of each pair stays.
2026-11-15 18:35:11 +07:00
bflatastic 0f08d53b06 Image Trace: a closed seam run is the subpath itself
#7814 made SubPath::anchors an Anchors, and #7810's seam fills, merged in the same batch,
passed it to SubPath::new, which takes a Vec, so vectorcraft-trace doesn't compile on main.
A closed subpath whose every segment is marked is its own run: clone it.
2026-11-15 17:36:46 +07:00
BFlat 8f339eeaa1 Merge pull request #7532 from dotCooCoo/fix/script-answers-errors-translated
i18n: script.run answers errors are translated in every complete-message catalog
2026-11-15 17:31:19 +07:00
BFlat f62932eb93 Merge pull request #7776 from dotCooCoo/feat/aia-files-carry-select-object-steps
Actions: Load Actions… reads .aia Set Selection steps as Select Object
2026-11-15 17:31:10 +07:00
BFlat 8138a6e973 Merge pull request #7814 from dotCooCoo/feat/editing-one-anchor-copies-the-whole-anchor-list
Paths: editing one anchor of a long path keeps one chunk of anchors for undo
2026-11-15 17:31:01 +07:00
BFlat e5951a7dfe Merge pull request #7815 from dotCooCoo/fix/a-reverted-document-keeps-its-uid-so-a-trace
Image Trace: a trace started before Revert does not apply after it
2026-11-15 17:30:52 +07:00
BFlat 20282a13d0 Merge pull request #7807 from dotCooCoo/fix/guide-add-select-allonartboard-select-font-scope
MCP: guide.add and the artboard selections refuse an artboard that is not a whole number
2026-11-15 17:30:38 +07:00
BFlat 1387328255 Merge pull request #7731 from dotCooCoo/feat/svg-filter-user-space-matrix
SVG Filters: a filter on a turned or skewed object is kept on import and drawn
2026-11-15 17:30:29 +07:00
BFlat b13d3d15b4 Merge pull request #7806 from dotCooCoo/fix/merging-a-spot-swatch-into-another-drops-the-old
Swatches: merging a swatch drops the process plates of the gradient stops linked to it
2026-11-15 17:30:20 +07:00
BFlat 7350a7a703 Merge pull request #7810 from dotCooCoo/fix/burasagari-and-push-in-on-a-tabbed-right-to-left
Type: a burasagari mark hangs only where it is drawn at the line's right end
2026-11-15 17:30:12 +07:00
el-j ed61c1b6aa perf(engine): keep only the objects_in_range change; main's Selection::prune has moved on (#4502) 2026-11-15 11:17:26 +01:00
dotCooCoo 4c669e9ba1 Merge main into fix/a-symbol-instance-written-as-its-art-reads-back 2026-11-15 02:11:11 -08:00
el-jandClaude Sonnet 5.5 3ed9d333b0 perf(engine): keep the symbol part check on Selection::prune fast paths (#4502)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-15 11:04:24 +01:00