Commit Graph
4632 Commits
Author SHA1 Message Date
BFlat 730ccfcf8b Merge pull request #3053 from nrq6993-a11y/stream/vc-feat1-g1-cmd-alt-group-selection
G1: Cmd+Alt temporarily lends Group Selection
2026-10-21 23:58:41 +07:00
BFlat 773964cb80 Merge pull request #3026 from nrq6993-a11y/stream/vc-feat-g2-artistic-dry-brush
G2: Effect › Artistic › Dry Brush raster filter
2026-10-21 23:58:26 +07:00
BFlat a97c92481c Merge pull request #3000 from nrq6993-a11y/stream/vc-issue-2995-panel-tab-reorder
Fix #2995: reorder grouped panel tabs by dragging within the tab strip
2026-10-21 23:58:09 +07:00
BFlat e5be5c21d0 Merge pull request #2592 from dotCooCoo/feat/lock-artboards
Artboards: the Artboards panel locks an artboard and the art on it
2026-10-21 23:57:52 +07:00
BFlat f85fe0effb Merge pull request #3317 from dotCooCoo/feat/align-buttons-in-keyboard-shortcuts
Keyboard Shortcuts: each Align and Distribute button of the Align panel can be given a key
2026-10-21 23:57:37 +07:00
BFlat 775016b455 Merge pull request #3312 from dotCooCoo/feat/bristle-brush-name-limit
Brushes: New Brush and Bristle Brush Options take a bristle brush name of at most 31 characters
2026-10-21 23:57:22 +07:00
BFlat 29d783eac1 Merge pull request #3434 from dotCooCoo/feat/docx-kashida-justification
Place: Word's low, medium and high kashida justification sets Insert Kashidas
2026-10-21 23:57:03 +07:00
BFlat 4f0d98107b Merge pull request #3433 from dotCooCoo/fix/tabs-ruler-sets-whole-points
Tabs: a stop placed or moved on the ruler lands on a whole point
2026-10-21 23:56:47 +07:00
BFlat 844d78e58f Merge pull request #3427 from dotCooCoo/fix/pdf-export-writes-rights-fields
PDF export: PDF and .ai files carry File Info's copyright status, notice and URL
2026-10-21 23:56:19 +07:00
BFlat 49355a08bc Merge pull request #3422 from midasdf/jp/jis-paper-sizes
Print: JIS B4/B5 and Japanese paper sizes (はがき・封筒・四六判)
2026-10-21 23:56:04 +07:00
BFlat cda55f690a Merge pull request #3419 from flamesquirrel/eps-styled-type
EPS/.ai editing data: type keeps stacked art styles as live appearance
2026-10-21 23:55:48 +07:00
BFlat 2a1885d2de Merge pull request #3411 from nrq6993-a11y/stream/vc-featD-g4-fractional-widths
G4: Fractional Widths rounds a type object's advances to whole points
2026-10-21 23:55:05 +07:00
BFlat 10d78516f6 Merge pull request #3409 from lehni/fix/thread-release-duplicates
Threaded text: releasing a frame from a longer thread no longer duplicates its text
2026-10-21 23:54:49 +07:00
BFlat e6db3421ce Merge pull request #3408 from lehni/feature/path-type-threads
Threaded text: type on a path threads, mixed with area type
2026-10-21 23:54:34 +07:00
BFlat 0ad0b7ab0f Merge pull request #3402 from dotCooCoo/feat/brush-colorization-tips
Brush Options: Tips shows each colorization method on a sample
2026-10-21 23:54:17 +07:00
BFlat ab6f62128e Merge pull request #3398 from nrq6993-a11y/stream/vc-featD-g4-no-break
G4: No Break keeps marked characters on one line
2026-10-21 23:54:01 +07:00
BFlat 84efde6ba0 Merge pull request #3394 from dotCooCoo/feat/optical-margin-right-to-left
Type: Optical Margin Alignment hangs punctuation in right-to-left paragraphs
2026-10-21 23:53:45 +07:00
BFlat 833523e29e Merge pull request #3397 from dotCooCoo/feat/f8-new-symbol-key
Symbols: F8 opens Symbol Options for a new symbol from the selection
2026-10-21 23:53:30 +07:00
BFlat c8432aee37 Merge pull request #3390 from dotCooCoo/feat/new-brush-dialog
Brushes: New Brush asks for the type and opens its Brush Options
2026-10-21 23:53:14 +07:00
BFlat cb1512d9fe Merge pull request #3388 from dotCooCoo/fix/dialog-sliders-take-arrow-keys
Dialogs: sliders step their field's number with the arrow keys
2026-10-21 23:52:58 +07:00
BFlat 3b3eba6ae1 Merge pull request #3385 from dotCooCoo/fix/brush-rename-and-delete-reach-every-stroke
Brushes: renaming or deleting a brush updates every stroke that uses it
2026-10-21 23:52:41 +07:00
BFlat 8f2e2740c3 Merge pull request #3374 from dotCooCoo/fix/expand-keeps-random-transform-seeds
Effects: expanded, flattened and exported art keeps the random Transform the canvas drew
2026-10-21 23:52:24 +07:00
BFlat fae70b006c Merge pull request #3369 from dotCooCoo/feat/brush-reorder
Brushes: dragging a brush reorders it within its type
2026-10-21 23:52:08 +07:00
BFlat ef7cdf5927 Merge pull request #3368 from dotCooCoo/feat/library-panel-lists-missing-file
Library panels: a persistent panel whose file is gone stays listed as missing
2026-10-21 23:51:51 +07:00
BFlat 21291ab387 Merge pull request #3438 from dotCooCoo/fix/docs-localization-parity-lists-dutch-danish-indonesian
Docs: localization parity lists the Dutch, Danish and Indonesian catalogs
2026-10-21 23:51:34 +07:00
BFlat 2cf7ad1ad1 Merge pull request #3418 from KnottyDyes/squad/icc-profile-padding
ICC: all built-in profiles are checked for aligned sizes and tags
2026-10-21 23:51:18 +07:00
BFlat de01edb28a Merge pull request #3414 from dotCooCoo/fix/docs-zh-hant-catalog-counts
Docs: localization parity row counts match the catalogs on main
2026-10-21 23:51:05 +07:00
BFlat 0a1c4cdd87 Merge pull request #3406 from oracola91/fix/recovery-folders-owner-only
Data Recovery: the recovery folders are owner-only on Unix
2026-10-21 23:50:49 +07:00
BFlat 5fc175a5ef Merge pull request #3389 from dotCooCoo/fix/tests-data-set-export-fresh-folder
Tests: the data set export test checks the whole file in a folder emptied first (#2969)
2026-10-21 23:50:33 +07:00
BFlat ba047ee5f7 Merge pull request #3382 from dotCooCoo/fix/altgr-typing-runs-no-command
Type: a character typed with AltGr while editing text runs no command
2026-10-21 23:50:18 +07:00
BFlat ecb7ac1fc6 Merge pull request #3376 from dotCooCoo/fix/tests-half-form-face-filter
Tests: the half-form test uses only a fallback face that forms Ka's half form (#2670)
2026-10-21 23:50:02 +07:00
BFlat f9e289410d Merge pull request #3373 from dotCooCoo/fix/docs-pages-sentence-names-the-file
Docs: the document.open pages sentence names the file saved without PDF compatibility
2026-10-21 23:49:47 +07:00
BFlat a1738c15d4 Merge pull request #3372 from dotCooCoo/fix/save-as-replaces-a-typed-extension
Save As: a typed extension of a format the save doesn't write is replaced
2026-10-21 23:49:31 +07:00
BFlat 9a5c5459bd Merge pull request #3371 from nikolainyegaard/language-picker-order
Preferences: list the languages alphabetically by their own name
2026-10-21 23:49:15 +07:00
nrq6993-a11yandCursor 2dcceea8e1 G1: limit Cmd+Alt Group Selection to active Direct Selection
Pen Cmd-borrow keeps Direct Selection when Alt is held so guide copy and other Alt modifiers on the lent tool still work.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 23:38:02 +07:00
bflatastic 0a3628f62f G2: Effect › Artistic › Dry Brush raster filter
Squashed from #3026 onto main.
2026-10-21 23:38:02 +07:00
nrq6993-a11yandCursor 571ac32362 Fix floating tab reorder deadlock by calling strip_tab_reorder in-frame.
Route dock and floating strip reorders through shared logic, sync layout.floating order, and assert reorder via window.panel.move in the harness test.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 23:38:02 +07:00
bflatastic 58066428c6 Artboards: the Artboards panel locks an artboard and the art on it
Squashed from #2592 onto main.
2026-10-21 23:38:02 +07:00
bflatastic 9c20027778 Keyboard Shortcuts: each Align and Distribute button of the Align panel can be given a key
Squashed from #3317 onto main.
2026-10-21 23:38:02 +07:00
nrq6993-a11yandCursor fface52206 G1: Cmd+Alt lends Group Selection for one gesture
When Direct Selection was last used or is active, Cmd+Alt borrows Group Selection for pointer presses, matching the documented modifier chord.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 23:38:02 +07:00
nrq6993-a11yandCursor 951d1705e3 Fix #2995: unify floating tab reorder with window.panel.move
Route floating strip drags through the same command path as the dock strip and centralize group tab index moves in one helper.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 23:38:02 +07:00
nrq6993-a11yandCursor 4cba355f71 Fix #2995: address PR review on tab reorder and dock drag begin
Reuse catalogued window.panel.move errors, keep legacy dock drags from clearing docking on Escape, reorder floating tabs locally without reconcile re-entry, and fix dock_tab_order test setup.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 23:38:02 +07:00
nrq6993-a11yandCursor ba2a5bfaed Fix #2995: route tab reorder through window.panel.move and harden dock_tab_order
Legacy and floating strip drags update order via the panel.move command; partial saved orders append missing tabs, with command-level tests and Illustrator workspace doc link.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 23:38:02 +07:00
nrq6993-a11yandCursor 2c715c9fe3 Fix #2995: reorder grouped panel tabs by dragging within the tab strip
Horizontal drags on dock and native floating tab strips now reorder tabs
instead of only tearing off; storytold/vectorcraft#2995.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 23:38:02 +07:00
bflatastic 5e24e59bd3 Brushes: New Brush and Bristle Brush Options take a bristle brush name of at most 31 characters
Squashed from #3312 onto main.
2026-10-21 23:38:01 +07:00
bflatastic 1cfeaabb2d Docs and format: one row per area after the batch, rustfmt
Rows two PRs of the batch both changed came out twice in localization-parity, target-app-parity and type-parity; the newest of each is kept. prefs_dialog.rs is formatted.
2026-10-21 23:38:01 +07:00
dotCooCoo 3884cf9704 Tabs: a stop placed or moved on the ruler lands on a whole point
A click on the Tabs panel's ruler added a stop, and a drag moved one,
at the fraction of a point under the pointer. The reference app's Tabs
page says that the tab ruler does not set stops in increments smaller
than 1, and that the X or Y field sets them as finely as 0.01 point.
The page does not name the unit of 1. The ruler here uses 1 point, the
unit the page gives for the X or Y field, in every General unit.

With Snap to Unit off and Shift not held, a stop placed or dragged on
the ruler now lands on the nearest whole point. With Snap to Unit on,
or Shift held, it still lands on the ruler's nearest tick, which on a
millimeter ruler is a fraction of a point. A position typed in the X
or Y field keeps its hundredths of a point.

Docs: docs/target-app-parity.md.
2026-10-21 23:32:26 +07:00
dotCooCoo 6807e757af PDF export: PDF and .ai files carry File Info's copyright status, notice and URL
The PDF writer's metadata has no copyright fields, so the XMP packet of
PDF exports and PDF-compatible .ai and .ait saves left out File Info's
copyright status, notice and URL. A PDF exported without its editing
data opened with the status Unknown and an empty notice and URL,
although the reader takes them from dc:rights, xmpRights:WebStatement
and xmpRights:Marked.

The export now adds those three properties to the XMP packet after
the writer has written it, as it does for the modification date.
Marked is True for Copyrighted and False for Public Domain, and is left
out for Unknown. The notice and URL are escaped for XML, and characters
XML 1.0 does not allow are left out. A document without a copyright
gets none of the properties.

Docs: docs/mcp.md (File Info), docs/target-app-parity.md.
2026-10-21 23:32:26 +07:00
Midasdf 32d012f6cc Print: Japanese paper sizes (JIS B4/B5/B6, はがき・封筒・四六判)
The Print dialog's Media list only had Letter/Legal/Tabloid and the ISO A
and B papers, so Japanese papers had to be entered as a custom size, and
"B4"/"B5" were ISO 216 (250 × 353 and 176 × 250 mm) although Japanese
printing uses the JIS sizes (257 × 364 and 182 × 257 mm, JIS X 6310).

Media gains JIS B4, B5 and B6 next to the ISO ones, and はがき
(japanese postcard, 100 × 148 mm), 往復はがき (japanese double postcard,
148 × 200 mm), 封筒 長形3号/長形4号 (japanese envelope #3/#4, 120 × 235
and 90 × 225 mm), 角形2号/角形3号 (kaku #2/#3, 240 × 332 and 216 × 277 mm),
四六判 (yonroku-ban, 127 × 188 mm) and A6, all in millimetres at 72/25.4.
b4 and b5 keep their ISO 216 dimensions so print settings and presets
saved before the Japanese papers existed keep their paper; the dialog
labels say "B4 (ISO)"/"B5 (ISO)" beside "B4 (JIS)"/"B5 (JIS)".

A paper is named by its JSON id or by its dialog label, any case and
spacing ("b5 (jis)", "B5 (JIS)" and "b5jis" all mean the JIS B5), so
agents and the control channel need not know the id spelling; an unknown
name is still refused. Media is written out instead of through the
choice! macro to carry that lookup.

The print.setup/file.print parameter docs and docs/mcp.md list the new
papers; the Print dialog picks them up from Choice::ALL with no UI code
change, and the Japanese labels are translated in ja.tsv (はがき,
往復はがき, 長形3号, 長形4号, 角形2号, 角形3号, 四六判).

Tests: japanese_paper_sizes checks every added size in points, that the
ISO B4/B5 values did not change, name resolution and id/label round
trips, and that each paper prints a PDF page with its own MediaBox size.

Validation: cargo fmt --all -- --check clean; cargo clippy
-p vectorcraft-pdf --all-targets -- -D warnings clean; cargo test
-p vectorcraft-pdf -> 330 passed, 0 failed (328 lib + 2 integration).
2026-10-21 23:32:26 +07:00
dotCooCoo 7d58ce4f9d Place: Word's low, medium and high kashida justification sets Insert Kashidas
A Word paragraph justified with w:jc lowKashida, mediumKashida or
highKashida placed as plain justified type, and its kashida length was
dropped. ECMA-376 Part 1, 17.18.44 (ST_Jc) gives these values a
slightly longer, a medium and the widest kashida length.

Such a paragraph now places justified with Insert Kashidas set to
Short, Medium or Long. A paragraph justified with both, and every other
alignment, still places with Insert Kashidas set to None. VectorCraft
writes no Word or RTF files, so this change does not affect export.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-21 23:32:26 +07:00