Commit Graph
9311 Commits
Author SHA1 Message Date
BFlat f85cea2363 Merge pull request #5423 from Silvertree2010/fix/5363-eps-import-of-a-large-valid-file
Scale the EPS operation budget with the program's length
2026-11-09 03:15:35 +08:00
NetterSilverandClaude Opus 5.5 05a242ff77 Scale the EPS operation budget with the program's length
Fixes #5363

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 02:03:00 +07:00
BFlat c62a8d27e0 Merge pull request #6230 from dotCooCoo/fix/ai-defs-art-styles
.ai import: objects in pattern and brush art take the file's art styles
2026-11-09 02:06:49 +08:00
BFlat 5a2b81bc93 Merge pull request #6226 from dotCooCoo/fix/ai-save-vertical-roman
.ai save: the editing copy keeps Standard Vertical Roman Alignment
2026-11-09 02:06:34 +08:00
BFlat ec732076a4 Merge pull request #6222 from dotCooCoo/fix/swatch-new-gradient-link
Swatches: a new swatch holds no link or placement from the paint it is made from
2026-11-09 02:06:18 +08:00
BFlat 3355bdd100 Merge pull request #6219 from dotCooCoo/fix/ai-gradient-swatch-self-link
.ai import: a palette gradient swatch's paint is not linked to itself
2026-11-09 02:06:03 +08:00
BFlat 3d1a1ee0de Merge pull request #6218 from dotCooCoo/fix/workspace-dialog-test-gap-above
Tests: workspace and toolbar dialog test checks the gap above OK and Cancel's place
2026-11-09 02:05:46 +08:00
BFlat 5613b4d10e Merge pull request #6217 from dotCooCoo/fix/ai-ate-vertical-roman
.ai import: type keeps Standard Vertical Roman Alignment from its editing data
2026-11-09 02:05:30 +08:00
BFlat 42cc222ca2 Merge pull request #6216 from dotCooCoo/fix/symbols-reset-transformation-doc-entry
Docs: the Reset Transformation entry is listed once in the evidence list
2026-11-09 02:05:14 +08:00
BFlat 5c6d868e5a Merge pull request #6208 from dotCooCoo/fix/type-escape-doc-prior-tool
Type: docs say Escape returns to the tool that double-clicked into the type
2026-11-09 02:04:55 +08:00
BFlat 73e8a97c3c Merge pull request #6207 from dotCooCoo/fix/legacy-ai-align-to-path-lost
Legacy .ai: the type attributes warning covers kerning, margins, Align to Path and end brackets
2026-11-09 02:04:45 +08:00
BFlat fb17bf51c9 Merge pull request #6206 from dotCooCoo/fix/svg-textpath-effects
SVG export: type on a path with Skew, 3D Ribbon, Stair Step or Gravity keeps its look
2026-11-09 02:04:28 +08:00
BFlat 47aeadbdc1 Merge pull request #6203 from dotCooCoo/fix/flyout-panels-follow-up
Panels: tests pin the palette windows staying shown for torn-off strips and new toolbars
2026-11-09 02:04:13 +08:00
BFlat 0558f0fd25 Merge pull request #6202 from dotCooCoo/fix/ai-editing-copy-one-paragraph
.ai import: the editing-copy paragraph in the file-format doc appears once
2026-11-09 02:03:56 +08:00
BFlat e0155f3c28 Merge pull request #6200 from dotCooCoo/feat/svg-filters-effect
Effects: Effect › SVG Filters applies the document's SVG filters as live effects
2026-11-09 02:01:11 +08:00
BFlat 615aeb4361 Merge pull request #6199 from dotCooCoo/fix/placed-gradient-follows-transform
Effects: placed gradients move with Transform and Free Distort effects
2026-11-09 02:00:58 +08:00
BFlat b632e69e5f Merge pull request #6198 from dotCooCoo/fix/plugin-fuzz-bulk-memory
Plug-ins: the fuzz test generates bulk memory operations
2026-11-09 02:00:41 +08:00
BFlat cc2f9a3e3e Merge pull request #6195 from dotCooCoo/fix/envelope-top-object-sides
Envelopes: a top object's sides share the content by control polygon length
2026-11-09 02:00:22 +08:00
BFlat c036f56844 Merge pull request #6191 from dotCooCoo/fix/pathops-vc-merge-per-key
Path ops: Merge finds every fill's faces in a few contour passes instead of one per fill
2026-11-09 02:00:04 +08:00
BFlat 782f213e48 Merge pull request #6185 from dotCooCoo/feat/plugin-safe-mode
Plug-ins: Safe Mode starts without plug-ins, offered after a launch stops while one loads
2026-11-09 01:59:47 +08:00
BFlat 188316b092 Merge pull request #6178 from dotCooCoo/feat/js-interpreter
JavaScript: vectorcraft-js runs ES5 scripts with a garbage-collected heap and execution limits
2026-11-09 01:59:35 +08:00
BFlat c9b40ea58f Merge pull request #6169 from dotCooCoo/feat/pixel-align-property
Transform: Align to Pixel Grid keeps an object's horizontal and vertical edges on the pixel grid
2026-11-09 01:59:18 +08:00
BFlat 23c8b4c11a Merge pull request #6168 from dotCooCoo/feat/export-3d-mesh
Asset Export: 3D objects export as USDA, USDZ, glTF or OBJ meshes
2026-11-09 01:59:00 +08:00
BFlat 51c28f6e17 Merge pull request #6149 from dotCooCoo/feat/load-aia-actions-2
Actions: Load Actions… reads action sets saved as .aia files
2026-11-09 01:58:41 +08:00
BFlat f110a8d6d1 Merge pull request #6144 from dotCooCoo/perf/distinct-masks
Path ops: region building lists the shapes covering each region instead of a flag per shape
2026-11-09 01:58:25 +08:00
BFlat dbf7fb0045 Merge pull request #6136 from dotCooCoo/feat/ai-editing-data-symbols
.ai save: the editing copy keeps symbols and their instances
2026-11-09 01:58:07 +08:00
BFlat 9135c4bc57 Merge pull request #6111 from dotCooCoo/feat/artboard-edge-add
Artboard tool: buttons on the selected artboard's edges add an artboard beside it
2026-11-09 01:57:51 +08:00
BFlat 7dc2bfd378 Merge pull request #6101 from dotCooCoo/feat/app-title-bar-on-desktop-frames-r
Title bar: a Linux and BSD preference uses the app bar where the desktop draws the frame
2026-11-09 01:57:35 +08:00
BFlat 8f505ed8c2 Merge pull request #6100 from dotCooCoo/fix/catalog-bare-values
i18n: error messages in every catalog keep true, false, null and the keys they name
2026-11-09 01:57:18 +08:00
BFlat 3c200c5f23 Merge pull request #6094 from dotCooCoo/fix/graph-series-paint-follows-styles
Graphs: graphic styles and Default and Swap Fill and Stroke update a series' stored paint
2026-11-09 01:56:59 +08:00
BFlat 6a8549adec Merge pull request #6083 from dotCooCoo/feat/ai-placed-documents
.ai import: placed PDF and .ai pages open as placed documents
2026-11-09 01:56:43 +08:00
BFlat d2e34dce54 Merge pull request #5962 from dotCooCoo/feat/dynamic-symbol-direct-edit
Symbols: Direct Selection sets the solid fill and stroke of one object in a dynamic instance
2026-11-09 01:56:26 +08:00
BFlat 9214b97201 Merge pull request #5814 from dotCooCoo/fix/layers-thumbs-opened-doc-jobs
Layers: a document opened after a close keeps its thumbnail jobs
2026-11-09 01:56:13 +08:00
BFlat 9f75ae2bfc Merge pull request #5500 from dotCooCoo/feat/dxf-cnc-cam-preset
DXF: a CNC / CAM preset sets the export options for cutting software
2026-11-09 01:55:57 +08:00
BFlat f16e9d2824 Merge pull request #5320 from dotCooCoo/feat/native-pdf-compatible-default
Save: include a PDF in new native files by default
2026-11-09 01:55:45 +08:00
BFlat 0a93898802 Merge pull request #5227 from dotCooCoo/fix/ai-bas-relief-settings
.ai import: Bas Relief opens with its settings
2026-11-09 01:55:27 +08:00
dotCooCoo fb848d28ac .ai import: objects in pattern and brush art take the file's art styles
A pattern's definition (in either form) and a brush's art were read
without the file's art styles, so an object there with a style came in
as the look it draws, with a "drawn look" note, while the same object on
a layer or in a symbol came in as itself with its effects live. The
three definition readers now take the art styles as the symbol reader
does, and an object in a pattern's art with a style in the file's style
list keeps that graphic style's id.

An art styles section inside a symbol's, a pattern's or a brush's art
is now skipped, so it no longer replaces the file's own art styles.
2026-11-09 00:36:09 +07:00
dotCooCoo 7b06cc070b .ai save: the editing copy keeps Standard Vertical Roman Alignment
The editing-data writer wrote a run's key 35 only for Tate-chu-yoko (3).
Type with Standard Vertical Roman Alignment, on or off, was saved with no
key, so the setting was lost from the editing data. Every run now carries
key 35 in the form the reader reads it (crates/eps/src/import/ate.rs,
Texts::style, lines 669-670): 1 when the setting is on, 2 when it is off
and 3 for Tate-chu-yoko. The document's defaults and the normal character
style carry 1.

Key 35 holds one value, so a run with both Tate-chu-yoko and the setting
is written as Tate-chu-yoko, and the save reports the type attributes
warning for it.

- writer/texts.rs: baseline_direction() gives each run's value;
  normal_char() writes 1; loses() and TYPE_ATTRIBUTES name the setting.
- tests.rs: a vertical and a horizontal object with the setting on, off
  and Tate-chu-yoko come back the same through the reader, lay out as
  before, and carry the expected keys; a run with both is reported.
- docs/file-format-parity.md: the .ai save section lists the written
  values.
2026-11-09 00:35:51 +07:00
dotCooCoo 50bf521d45 Swatches: a new swatch holds no link or placement from the paint it is made from
swatch.new stored a gradient or pattern as it was given. A gradient
swatch made from a gradient swatch by name, from a fill linked to one,
or from a gradient that names one (the Gradient panel's add to
swatches) kept the link to that swatch, so copying art that uses the
new swatch brought the other swatch along too. A pattern swatch made
from a current fill picked up from art with transformed tiles kept
that transform, and art the swatch was applied to took it in place of
its own.

The new swatch now drops the gradient's link and stores the pattern
untransformed. A gradient swatch keeps its aspect as before.
2026-11-09 00:35:30 +07:00
dotCooCoo cae5b356c7 .ai import: a palette gradient swatch's paint is not linked to itself
The editing-data reader set the paint of each gradient swatch in the
palette to link to the swatch's own name. The default gradient swatches
and a gradient swatch given a new gradient with swatch.edit hold their
gradient without a link, so a document saved as .ai and opened again
had swatches that differed from the ones it was saved with. The swatch
now holds the gradient alone. Art filled with the gradient is not
changed: it still links to a swatch by the gradient's name.

The fix also applies to a .ai whose layers are not read, such as a
gradient library, where only the palette comes in.

Three tests cover a hand-written palette with a gradient swatch named
by its gradient and one with a name of its own, a new document's four
gradient swatches written by the editing-data writer and read back, and
a gradient library without layers.
2026-11-09 00:35:12 +07:00
dotCooCoo cb3e8262bc Tests: workspace and toolbar dialog test checks the gap above OK and Cancel's place
dialogs::tests::workspace_and_toolbar_dialogs_end_at_their_buttons now
requires the gap between OK and the bottom of the window to be 0 to 40 pt,
so an OK drawn past the window's bottom edge fails. It requires exactly one
OK inside the window, and in New Workspace and New Toolbar exactly one
Cancel on OK's row to its left; the two Manage dialogs have no Cancel. It
also requires the gap between OK and the nearest shape drawn above it to be
under 40 pt.
2026-11-09 00:35:07 +07:00
dotCooCoo a37ad90e6c .ai import: type keeps Standard Vertical Roman Alignment from its editing data
The modern type reader read key 35 of a character style only for
Tate-chu-yoko (3). A run whose key 35 is 1 (Standard), in the run, its
character style or the document's defaults, now opens with Standard
Vertical Roman Alignment on, so its half-width characters stand upright
in vertical type. Horizontal type keeps the mark with no change to its
layout. A value of 2 (rotated), 3, any other value and no key at all
leave it off, VectorCraft's default.

- ate.rs: Style reads the flag and passes it to CharStyle, with a unit
  test over defaults, character styles, run overrides and bad values.
- tests_native.rs: a vertical and a horizontal story with Standard,
  rotated and unset runs; the test of values the reader ignores also
  checks the flag.
- import_fuzz.rs: the vertical fixture also checks the flag.
- docs/file-format-parity.md: one line on the mapping.
2026-11-09 00:35:02 +07:00
dotCooCoo 5bf68c9659 Docs: list the Reset Transformation entry once in the evidence list
Three copies of the Symbols Reset Transformation entry were in
docs/target-app-parity.md. The complete one, which lists all five
tests, stays; the two older copies are removed.
2026-11-09 00:34:57 +07:00
dotCooCoo 41d3ac15e0 Type: docs say Escape returns to the tool active before type editing began 2026-11-09 00:34:51 +07:00
dotCooCoo bf4a9d00ab Type: docs say Escape returns to the tool that double-clicked into the type
Escape and Cmd+Enter (Ctrl+Enter on Windows and Linux) end text editing
and switch back to the tool that double-clicked into the type, or to the
Selection tool when there was none (`TypeTool::end_editing`). The
evidence lines in docs/type-parity.md, docs/ui-parity.md and
docs/target-app-parity.md, and the doc comments on `prev_tool` and
`claims_key`, said they always switch to the Selection tool.
2026-11-09 00:34:50 +07:00
dotCooCoo 867c836fe1 Legacy .ai: the type attributes warning covers kerning, margins, Align to Path and end brackets
The legacy .ai writer gives the type attributes warning when a text
object loses something it cannot hold. It did not give it for several
attributes that it does not write:

- Align to Path set to Ascender, Descender or Center.
- An end bracket before the end of an open path, or short of once
  around a closed path. A legacy text path holds the path and the start
  point only (AI7 File Format Specification, section 15).
- Manual kerning other than 0, which is written as kerning off, and
  optical kerning.
- Optical Margin Alignment, System Layout and fractional widths off.
- A second subpath in an area type frame or a type path. The writer
  writes the first subpath only.

The warning now names each of these.
2026-11-09 00:34:44 +07:00
dotCooCoo fd91b29e20 SVG export: type on a path with Skew, 3D Ribbon, Stair Step or Gravity keeps its look
SVG viewers center each <textPath> glyph on its midpoint on the path and
turn it to follow the path, which is how the Rainbow effect draws. Type on
a path with any other effect and no spacing was written as a plain
<textPath>, so a viewer drew it as Rainbow. It is now written as outlines
with a warning, as type with an end bracket, Align to Path or Spacing
already is.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-09 00:34:39 +07:00
dotCooCoo eb30d6ef78 Tests: the torn-off strip test checks the palette windows were shown first
The drawer opens and closes before the strip and the toolbar, so the
test fails when the palette windows were already hidden, and opens again
at the end. The test checks the floating strip is the Pen group's and
the custom toolbar is Mine, shown.
2026-11-09 00:34:34 +07:00
dotCooCoo 5f0d3addf7 Tests: a torn-off strip or a new toolbar leaves the palette windows shown
The hidden-toolbar test now expects exactly one show command when the
flyout stops drawing, and the comment at palette_window_levels names
the All Tools drawer.
2026-11-09 00:34:34 +07:00
dotCooCoo f8977285cc .ai import: the editing-copy paragraph appears once
docs/file-format-parity.md held 17 copies of the paragraph under
"Illustrator's private editing data", and they disagreed about what
import reads. The section now holds one copy with every clause from
the others: a filled clipping path keeps its fill, with the exceptions
for multi-layer masks and compound clipping paths whose subpaths paint
differently; paths with an Art brush; the spot colors in brush art and
their limits; symbols defined before the art styles section; and the
Type on a Path options of type on a path. Each clause was checked
against crates/eps/src/import.
2026-11-09 00:34:29 +07:00