Commit Graph
7334 Commits
Author SHA1 Message Date
BFlat e7feddedbc Merge pull request #5087 from dotCooCoo/fix/effect-move-reply
Appearance: effect.move reports the effect's index in the object whose row it names
2026-11-02 12:29:23 +07:00
BFlat 4491eb1c72 Merge pull request #5091 from dotCooCoo/fix/simplify-backdrop-tab
Accessibility: Tab no longer stops on the Simplify and Smooth sliders' backdrop
2026-11-02 12:29:09 +07:00
BFlat 2c00ed0780 Merge pull request #5093 from dotCooCoo/fix/screens-dotless-i
Export for Screens: a folder named with dotless ı is not merged into i
2026-11-02 12:28:54 +07:00
BFlat c9d8b15a4d Merge pull request #5086 from dotCooCoo/fix/ai-os17-vertical
.ai import: vertical type keeps its orientation and Tate-chu-yoko runs
2026-11-02 12:28:37 +07:00
BFlat 59d792186e Merge pull request #5081 from dotCooCoo/feat/objects-on-path-rotate-all
Objects on Path: the Rotate All widget turns every attached object about its attachment point
2026-11-02 12:28:24 +07:00
BFlat ff0de216a7 Merge pull request #5069 from dotCooCoo/fix/ai-os17-area
.ai import: area type keeps its rows, columns, gutters and first baseline
2026-11-02 12:28:07 +07:00
BFlat d2cd4ba218 Merge pull request #5082 from dotCooCoo/fix/ai-os17-wrap
.ai import: area type flows around its text wrap objects
2026-11-02 12:27:55 +07:00
BFlat a2677d9b78 Merge pull request #5051 from dotCooCoo/fix/ai-os6
.ai import: a file whose PDF part can't be read opens from its editing data
2026-11-02 12:27:37 +07:00
BFlat 67b445d4f0 Merge pull request #5084 from dotCooCoo/fix/status-messages-plural-counts-2
i18n: open, save and recovery messages name their counts in the singular or the plural
2026-11-02 12:27:26 +07:00
BFlat b724438757 Merge pull request #5049 from dotCooCoo/feat/pattern-library-geometric
Swatch libraries: Patterns › Geometric Patterns adds a pattern with its swatch
2026-11-02 12:27:08 +07:00
BFlat b322e2d1a5 Merge pull request #5068 from dotCooCoo/feat/actions-duplicate
Actions: the panel menu's Duplicate copies the selected action or set
2026-11-02 12:26:57 +07:00
BFlat 4368d99ee5 Merge pull request #5052 from dotCooCoo/fix/live-paint-bucket-edge-highlight
Live Paint: the Live Paint Bucket highlights an edge thinner than a face
2026-11-02 12:26:41 +07:00
BFlat 9667f5d7ba Merge pull request #5073 from dotCooCoo/fix/doc-place-limits
Place: the Word .doc reader resolves each style once and refuses damaged property tables
2026-11-02 12:26:26 +07:00
BFlat 3fc6115a44 Merge pull request #5077 from dotCooCoo/fix/ai-on-path-checks-first
.ai import: Objects on Path records measure each group once
2026-11-02 12:26:11 +07:00
BFlat e514c43b7b Merge pull request #5076 from dotCooCoo/fix/ai-page-art-moves-patterns
.ai import: page art moved to its artboard takes its pattern tiles along
2026-11-02 12:26:00 +07:00
BFlat f793c98195 Merge pull request #5074 from dotCooCoo/chore/ai-unread-fallback-cases
Docs: list every case where an unread .ai object still sends the file to its page
2026-11-02 12:25:47 +07:00
BFlat 5e10f35d2e Merge pull request #5071 from dotCooCoo/fix/ai-guides-docs
Docs: .ai guides are no longer listed as lost
2026-11-02 12:25:36 +07:00
BFlat fbfe475691 Merge pull request #5142 from dotCooCoo/fix/ai-os10-shape
.ai import: Convert to Shape opens live on paths and type
2026-11-02 12:25:20 +07:00
BFlat fa2e15b740 Merge pull request #5140 from dotCooCoo/fix/ai-os10-stylize
.ai import: Stylize effects open with their saved settings
2026-11-02 12:25:05 +07:00
BFlat f32e891e20 Merge pull request #5141 from dotCooCoo/fix/vars-p10
Variables: Export Data Sets marks visibility and image columns with # and @
2026-11-02 12:24:50 +07:00
BFlat 6a8b976ae2 Merge pull request #5145 from dotCooCoo/fix/vars-noop-import-undo
Variables: an import or library load that changes nothing adds no undo step
2026-11-02 12:24:33 +07:00
BFlat ae1a850e06 Merge pull request #5126 from dotCooCoo/fix/vars-p2
Variables: Update Data Set keeps a row's values when every bound object is locked
2026-11-02 12:24:15 +07:00
BFlat 6ee880bf6a Merge pull request #5130 from dotCooCoo/fix/vars-p3
Variables: a command that changes nothing adds no undo step
2026-11-02 12:23:57 +07:00
BFlat 32760fafa2 Merge pull request #5128 from dotCooCoo/fix/vars-p12
Variables: a CSV header that names one variable twice is refused
2026-11-02 12:23:40 +07:00
BFlat f903867cc9 Merge pull request #5133 from dotCooCoo/fix/vars-p13
Variables: Import Data Sets reports why a cell was refused
2026-11-02 12:23:23 +07:00
BFlat 0dfa17aea4 Merge pull request #5124 from dotCooCoo/fix/vars-p11
Variables: Export Data Sets refuses more data sets or variables than Import Data Sets reads
2026-11-02 12:23:10 +07:00
BFlat cb0922ec21 Merge pull request #5131 from dotCooCoo/fix/vars-p4
Variables: Undo and Redo clear a highlight that names no variable
2026-11-02 12:22:58 +07:00
BFlat a1b4363386 Merge pull request #5129 from dotCooCoo/fix/ai-os22-g15
.ai import: paths keep their notes and Show Center
2026-11-02 12:22:48 +07:00
BFlat bf074ac8e9 Merge pull request #5125 from dotCooCoo/fix/ai-os22-g11
.ai import: legacy type keeps its spacing, hanging punctuation and hyphenation
2026-11-02 12:22:35 +07:00
BFlat 6be807c5d0 Merge pull request #5132 from dotCooCoo/fix/ai-os23-2422
.ai import: a clipping path keeps its stroke
2026-11-02 12:22:19 +07:00
BFlat 5f1c6cb5c3 Merge pull request #5134 from dotCooCoo/fix/ai-os23-3797
Fix #3797: documents open in Preview, and Outline is a setting of each document
2026-11-02 12:22:04 +07:00
BFlat 906f9872d0 Merge pull request #5127 from dotCooCoo/fix/vars-p8
Variables: Edit Data Set keeps an empty text value when OK changes nothing
2026-11-02 12:21:52 +07:00
dotCooCoo e4a066f12a Appearance: effect.move's reply follows an explicit toItem to the first target 2026-11-02 12:04:10 +07:00
dotCooCoo 468102e101 Appearance: test effect.move's reply when the first selected object has no effect to move 2026-11-02 12:04:10 +07:00
dotCooCoo 5c5e1f90b1 Accessibility: test that Escape closes the Simplify and Smooth sliders after tabbing 2026-11-02 12:04:09 +07:00
dotCooCoo d57d0b8e67 Appearance: effect.move reports the effect's index in the object whose row it names
With the Appearance panel's active row, the row belongs to the first
selected object, which need not paint first. effect.move reported where
the effect landed in the first target in paint order; it now reports
where it landed in the first selected object for the active row, and in
the first target for an explicit fromItem, as effect.apply does.
2026-11-02 12:04:09 +07:00
dotCooCoo 8bccbf2f35 Accessibility: Tab no longer stops on the Simplify and Smooth sliders' backdrop
The backdrop that takes a click outside the slider strip sensed clicks
with Sense::click(), which egui makes focusable, so Tab stopped on an
invisible full-screen widget. It now uses Sense::CLICK, as the modal
dialog backdrop does; a click outside the strip still keeps the result.
2026-11-02 12:04:09 +07:00
dotCooCoo 53e24b5fdc Export for Screens: a folder named with dotless ı is not merged into i
Export for Screens compared names and folders by upper-casing each
character, which turned dotless ı into I. A row with the folder ı then
wrote into the folder i, and an artboard named ı was numbered as a
second i. NTFS keeps ı apart from i and I, and so does Unicode case
folding outside Turkic languages, so fold now leaves ı as it is.
2026-11-02 12:04:08 +07:00
dotCooCoo beb89ebec4 .ai import: vertical type keeps its orientation and Tate-chu-yoko runs
Squashed from #5086 onto main.
2026-11-02 12:04:08 +07:00
dotCooCoo 8b8b0c371f Objects on Path: the Rotate All widget turns every attached object about its attachment point
With one Objects on Path group selected, the Selection and Objects on
Path tools show a round handle beyond the top of the group's first
object, joined by a line to its attachment point. Dragging it adds the
angle the pointer turns about that point to the group's Rotate, previewed
while dragging and kept as one undo step on release
(object.objectsOnPath.options). Shift turns in 15 degree steps, Escape
cancels the drag, and the pointer shows the rotate cursor over the
handle.

Docs: docs/target-app-parity.md, docs/mcp.md.
2026-11-02 12:04:07 +07:00
dotCooCoo 13fef54e7f .ai import: cap area type gutters after scaling
Gutters and the first-baseline minimum were capped at 10,000 before the
art's scale was applied, so a Large Canvas file could bring in a gutter
of up to 100,000 pt, past the limit text.areaOptions sets. The cap now
also applies to the scaled value.
2026-11-02 12:04:07 +07:00
dotCooCoo f46427167c .ai import: area type keeps its rows, columns, gutters and first baseline
Area type made from the editing data's text document came in with one
row, one column, the 18 pt gutter and the Ascent first baseline,
whatever its frame kept. Each area frame now keeps its rows and columns,
the gutter between rows and the gutter between columns, and its first
baseline (Fixed, Cap Height, Leading or x Height) with its minimum,
scaled with the art's units. Each frame of a thread keeps its own, and a
key that is missing or can't be read leaves that option as it was. A
first baseline the frame keeps is no longer replaced by the fixed one
that matches the file's first line.

AreaOptions gets row_gutter (rowGutter, left out while unset), which
layout spaces rows by; text.areaOptions takes and reports rowGutter, a
gutter given alone sets both, and the Area Type Options dialog shows
Row Gutter.
2026-11-02 12:04:07 +07:00
dotCooCoo c3093fcafb .ai import: a wraparound group's graphics wrap with no offset
Every graphic in a version 7 wraparound group (`*w` … `*W`), before
or after its type, is now a wrap object with an offset of 0 instead of
the 6 pt default, and a group with no type in it marks all of its
graphics. A graphic before the type is below it, so the type flows
around it only after it is moved above. Operands on `*w` or `*W`, and
a `*w` inside a compound path, are errors.

Docs: docs/file-format-parity.md.
2026-11-02 12:04:06 +07:00
dotCooCoo 79d5b5a0bf Text wrap: test a frame a wrap object covers and a 10,000-anchor wrap shape
Area type whose frame a wrap object covers sets no line and overflows.
Area type wrapped around a shape of 10,000 anchors sets its lines beside
the shape.
2026-11-02 12:04:05 +07:00
dotCooCoo d4f5004580 .ai import: area type flows around its text wrap objects
Fixes #2763. An object whose editing-data dictionary holds the text wrap
options keeps them (offset in points, 6 pt by default, clamped to
±1000 pt; Invert Wrap), and the objects after the text in a version 7
wraparound group (`*w` … `*W`) are wrap objects at the default options.
Area type below a wrap object in its layer flows around it before the
layers are compared with the page, and threaded type flows on into its
next frames. A Large Canvas file's offset is scaled with its art.

The wrap resolver moves into `vectorcraft_doc::text::resolve_wrap` for
the import and the edit-time refresh, and builds each wrap object's
outline once per layer. A file whose wrap shapes would copy more than
2,000,000 anchors is not read from its editing data.

Docs: docs/file-format-parity.md.
2026-11-02 12:04:05 +07:00
dotCooCoo 100730d4d3 .ai import: a file whose PDF part can't be read opens from its editing data
Squashed from #5051 onto main.
2026-11-02 12:04:04 +07:00
dotCooCoo 54436b0aa2 i18n: open, save and recovery messages name their counts in the singular or the plural
The status bar said "Opened with 1 note(s)", "Saved <path> with 1 note(s)",
"Discarded 1 recovered document(s)" and "Restored 1 recovered document(s)",
and the Global Edit options showed "Result(s): 1". They now use the singular
for 1 and the plural otherwise, in English through i18n::msg_n and in every
catalog through @msgplural rows (the Results line through an @plural row).

The engine's warnings for linked images and placed documents output as their
previews, and its errors for a page past a placed file's last page or
artboard, also name their counts in the singular or the plural.

The catalogs drop the rows no message reads any more: the plain "(s)" rows
of the changed messages and the @msg row for "Packaged {n} file(s){note}".

Follows #5002.
2026-11-02 12:04:04 +07:00
dotCooCoo 5e3a0090a2 Swatch libraries: test that a pattern library adds only the picked pattern
Reading a pattern library adds no pattern or swatch to the document. A
pattern added from it undoes and redoes with its swatch, and both are
kept after a save and reopen.
2026-11-02 12:04:03 +07:00
dotCooCoo 284b5b45b6 Swatch libraries: only a built-in pattern library's own swatches draw its pattern tiles 2026-11-02 12:04:03 +07:00
dotCooCoo 6b7513c0a0 Swatch libraries: a pattern swatch is found without copying the document
swatch.library.add looks for the library's pattern among the document's
patterns of that name or a numbered copy of it, instead of importing it
into a copy of the document. Only a swatch that paints with the pattern
unmoved counts as the pattern's swatch, so a swatch whose pattern was
moved in its space is not reused and applied in its place.
2026-11-02 12:04:02 +07:00