Commit Graph
6229 Commits
Author SHA1 Message Date
BFlat bda4305ffe Merge pull request #4519 from mockydevs/fix/3575-native-coordinates
fix(format): remove what a native file has beyond the canvas (#3575)
2026-10-29 12:14:37 +07:00
BFlat 2b7e8ca7a0 Merge pull request #4515 from mockydevs/fix/3587-native-format-memory-budget
fix(format): read a native document within an object budget (#3587)
2026-10-29 12:14:19 +07:00
Don Omondi 92904ebcab fix(doc): forget removed objects and their layers' guides (#3575)
drop_beyond_canvas removed objects but left what names them: saved
selections, Asset Export entries and variable bindings kept their ids,
and layer guides of a removed sublayer named a layer that was gone. It now
runs tidy_saved_selections, prune_assets and prune_variable_bindings when
it removes objects, as edits do, and removes the layer guides of the
layers it removed.
2026-10-29 11:07:40 +07:00
Don Omondi 8f5b6b81b0 fix(doc): look into containers for objects beyond the canvas (#3575)
A layer's bounds leave out its hidden objects and a clipping container's
are its clipping path's, so objects beyond the canvas inside them were
kept. Layers and groups are now looked into object by object.

A clipping path beyond the canvas goes with the objects it clips, so no
other object becomes the clip; a top-level clipping layer is emptied and
stops clipping. A removed artboard's ruler origin goes and its id is
retired, as deleting it does.
2026-10-29 11:07:40 +07:00
Don Omondi 5b18da25a8 fix(format): remove what a native file has beyond the canvas (#3575)
Edits refuse to leave anything beyond MAX_COORD (doc_sane checks the
artboards, the guides, the ruler origin and the objects an edit touches),
but the native loader didn't check them. A file with one object, artboard,
guide or ruler origin out there opened without a warning, and then every
move failed with "result would exceed the canvas", in-range objects
included; saving kept it that way.

Document::drop_beyond_canvas removes objects whose geometric bounds aren't
finite or reach past MAX_COORD (a layer or non-clipping group keeps its
children within it), artboards with their artboard guides, and guides out
there, and puts the ruler origin back at the origin. load_file runs it
after the depth limit and reports what it did with the other load notes; a
file whose artboards all lie beyond the canvas is refused.
2026-10-29 11:07:40 +07:00
Don Omondi d60b6bf883 fix(doc): count the values buffered before an object's type (#3587)
NodeKind's reader buffers the fields that come before `type` as
serde_json::Values. VectorCraft writes `type` first, but a crafted file
can put a long array there: a group whose children held 50M numbers before
its type (a 96 KB gzip) peaked at 1.6 GB, and the cost grows with the
array up to MAX_JSON, before any object in it is counted.

The buffer is read through a counting visitor: each JSON value counts
against MAX_BUFFERED_VALUES (32M, 4M on wasm32) as it is read, and values
replayed from the buffer aren't counted twice. load_file reads within it;
the same file is now refused at a 1.1 GB peak.
2026-10-29 11:07:37 +07:00
Don Omondi eeae8c9136 fix(format): read a native document within an object budget (#3587)
Opening a native document now reads at most MAX_READ_NODES objects (4M,
512K on wasm32) and refuses the file past that with a message naming the
budget. Paths already read within MAX_READ_ANCHORS and the web build's JSON
cap is 256 MB, but the number of objects had no bound: a gzip'd document of
empty groups costs about 270 bytes per object once read against some 50 in
its JSON, so 10M groups in a 24 MB file took 2.7 GB to open.

NodeWire's id is read through counted_id, so each object counts once as it
is read. load_file reads through a private load_file_within so a test can
exercise the budget without a 4M-object document.
2026-10-29 11:07:37 +07:00
BFlat 2b36d641c1 Merge pull request #4426 from dotCooCoo/fix/leading-catalog-terms
i18n: each catalog names leading with one term
2026-10-29 11:02:49 +07:00
BFlat 21001e037a Merge pull request #4424 from el-j/fix/window-menu-order-4143
Fix #4143: Window menu lists panel items alphabetically by localized name
2026-10-29 11:02:32 +07:00
BFlat 718e87e54e Merge pull request #4423 from dotCooCoo/fix/shortcuts-hide-commands-needing-values
Keyboard Shortcuts: commands that need a value are not listed unless given a shortcut
2026-10-29 11:02:09 +07:00
BFlat 51357f0e9c Merge pull request #4422 from dotCooCoo/fix/hide-lock-disabled-in-isolation
Object: Lock, Hide, Unlock All and Show All are off in isolation mode
2026-10-29 11:01:56 +07:00
BFlat 1780af28f2 Merge pull request #4421 from dotCooCoo/fix/escape-cancels-distort-tool-drags
Distort tools: Escape cancels a Puppet Warp, perspective or Liquify drag
2026-10-29 11:01:42 +07:00
BFlat d43ba6d230 Merge pull request #4419 from dotCooCoo/fix/style-menu-delete-clears-highlight
Text styles: the panel menu's Duplicate highlights the copy and Delete clears the highlight
2026-10-29 11:01:22 +07:00
BFlat da9329ee7f Merge pull request #4417 from dotCooCoo/fix/closed-arc-y-base-sector
Arc tool: a closed arc with Base Along Y draws the X-axis sector mirrored
2026-10-29 11:01:07 +07:00
BFlat 4d634dae92 Merge pull request #4416 from dotCooCoo/fix/tabs-position-label-translated
Tabs: the position field's label is translated
2026-10-29 11:00:43 +07:00
BFlat 9c03111c84 Merge pull request #4414 from dotCooCoo/feat/blob-brush-fidelity-option
Blob Brush: Tool Options set its Fidelity
2026-10-29 11:00:30 +07:00
BFlat f60f707e85 Merge pull request #4413 from dotCooCoo/feat/style-drag-to-new-or-delete
Character and Paragraph Styles: a style dropped on New is copied, and one dropped on Delete is deleted
2026-10-29 11:00:16 +07:00
BFlat 7ebcd18eff Merge pull request #4410 from dotCooCoo/fix/blob-brush-merge-rule
Blob Brush: a stroke merges with the topmost matching path and its neighbors in its group or layer
2026-10-29 10:59:58 +07:00
BFlat 0ed947f162 Merge pull request #4407 from dotCooCoo/feat/layers-cmd-alt-click-new-layer-placement
Layers: Cmd/Ctrl+Alt-click places a new layer below the current one and a new sublayer at the bottom
2026-10-29 10:59:35 +07:00
BFlat 8ad8b5f2c3 Merge pull request #4405 from dotCooCoo/fix/issue-4036
Fix #4036: a .ai swatch library without layers loads its palette, not the default swatches
2026-10-29 10:59:20 +07:00
BFlat 7fa66e8c61 Merge pull request #4404 from dotCooCoo/feat/type-caret-follows-undo
Type: Undo and Redo put the caret where the undone or redone edit was
2026-10-29 10:59:06 +07:00
BFlat eead185a75 Merge pull request #4403 from dotCooCoo/fix/kerning-tracking-catalog-terms
i18n: Character panel Kerning and Tracking terms agree in each catalog
2026-10-29 10:58:55 +07:00
BFlat 47e0fa2a41 Merge pull request #4395 from dotCooCoo/fix/issue-3235
Part of #3235: PDF import keeps the spot swatch of a DeviceN color that mixes inks
2026-10-29 10:58:33 +07:00
BFlat 4072363c22 Merge pull request #4394 from dotCooCoo/feat/export-pixel-width-height
Export: document.export takes a pixel width or height for raster files
2026-10-29 10:58:15 +07:00
BFlat b5f126a464 Merge pull request #4393 from dotCooCoo/feat/screens-zip-deflates
Export for Screens: a ZIP export deflates its files
2026-10-29 10:57:59 +07:00
BFlat daffac2c2d Merge pull request #4401 from dotCooCoo/feat/layers-alt-click-selects-layer
Layers: Alt-click on a layer name selects the layer's art
2026-10-29 10:57:39 +07:00
BFlat 59ba74067b Merge pull request #4400 from dotCooCoo/feat/gradient-reset-click
Gradient: Cmd/Ctrl-click on the Gradient Fill box or the Gradient button resets to White, Black
2026-10-29 10:57:18 +07:00
BFlat a04c068ae0 Merge pull request #4399 from dotCooCoo/feat/color-bar-complement-inverse-clicks
Color panel: Cmd/Ctrl-click and Cmd/Ctrl+Shift-click on the spectrum apply Complement and Invert
2026-10-29 10:56:40 +07:00
BFlat 372809c891 Merge pull request #4398 from dotCooCoo/fix/issue-4326
Part of #4326: a drag whose mouse-up was lost ends once macOS reports no button down
2026-10-29 10:56:17 +07:00
BFlat f96144c784 Merge pull request #4388 from dotCooCoo/feat/scissors-alt-add-anchor
Scissors: Alt held switches to the Add Anchor Point tool
2026-10-29 10:55:56 +07:00
BFlat fddec26707 Merge pull request #4387 from dotCooCoo/feat/type-tool-modifier-switch
Type tools: Shift switches between horizontal and vertical, and Alt switches between area and path type
2026-10-29 10:55:35 +07:00
BFlat a101ebe44d Merge pull request #4386 from dotCooCoo/feat/units-cycle-shortcut
Document: Cmd+Alt+Shift+U switches to the next unit of measurement
2026-10-29 10:55:09 +07:00
BFlat 301caf5851 Merge pull request #4385 from dotCooCoo/feat/width-tool-escape-deselects
Width tool: Escape deselects the selected width points
2026-10-29 10:54:45 +07:00
BFlat ef815a00d3 Merge pull request #4384 from dotCooCoo/feat/arc-tool-drag-keys
Arc tool: C, F and Up/Down change the arc while it is dragged out
2026-10-29 10:54:11 +07:00
BFlat c4dda01263 Merge pull request #4380 from dotCooCoo/feat/blob-brush-alt-smooth
Blob Brush: Alt switches to the Smooth tool while it is held
2026-10-29 10:53:57 +07:00
BFlat 63aa7fc38c Merge pull request #4376 from dotCooCoo/fix/pencil-alt-smooth-radius
Pencil: Alt smooths as far from the drag as the Smooth tool does
2026-10-29 10:53:40 +07:00
BFlat 575b3027f6 Merge pull request #4375 from dotCooCoo/fix/shape-builder-merge-fewer-passes
Shape Builder: a merge walks the arrangement once per batch of faces
2026-10-29 10:53:21 +07:00
BFlat 1da191ae76 Merge pull request #4367 from Silvertree2010/fix/4262-resize-bug-locked-ratio-scaling
Fix Shift-scaling a corner handle along a single axis
2026-10-29 10:53:00 +07:00
BFlat 1fb627749a Merge pull request #4363 from dotCooCoo/fix/stroke-weight-steps-off-list
Stroke Weight: a step from a weight between the presets goes to the next preset
2026-10-29 10:52:37 +07:00
BFlat 489790826d Merge pull request #4361 from dotCooCoo/fix/curvature-delete-reshapes
Curvature: deleting a point re-curves the path through the remaining points
2026-10-29 10:52:18 +07:00
BFlat 12f29b40f1 Merge pull request #4335 from ham9zah/test/properties-reference-point
Properties: test that typed transforms turn about the reference point (#4285)
2026-10-29 10:51:49 +07:00
BFlat 5464dc644c Merge pull request #4331 from Silvertree2010/fix/4206-bug-gradient-mesh-node-level-tra
Apply Transparency opacity to the clicked gradient mesh point
2026-10-29 10:51:23 +07:00
BFlat 340b8644b7 Merge pull request #4433 from el-j/fix/dxf-circular-sliver-4151
Fix #4151: DXF export: verify closed circular subpaths complete a full turn without reversing
2026-10-29 10:50:36 +07:00
BFlat fe45b77d69 Merge pull request #4425 from dotCooCoo/fix/cursor-idle-test-timing
Tests: the idle cursor test renders every frame on the test thread
2026-10-29 10:49:15 +07:00
BFlat 9309b2f6ed Merge pull request #4408 from dotCooCoo/fix/appearance-add-keys-empty-ids
Appearance: Add New Fill and Add New Stroke with an empty ids list run nothing without a selection
2026-10-29 10:48:07 +07:00
BFlat b095504986 Merge pull request #4316 from ham9zah/fix/appearance-mixed-fill-chip
Appearance: a mixed selection's object chip shows "?" when the fills differ
2026-10-29 10:47:43 +07:00
BFlat c40e641421 Merge pull request #4325 from Hassan1305/fix-4237-add-anchor-select
Fix #4237: Add Anchor Point selects the path it adds to
2026-10-29 10:47:20 +07:00
BFlat 9824a6459e Merge pull request #4328 from Silvertree2010/fix/4306-expand-does-not-work-as-intended
Expand the stroke of stroked type into filled outlines
2026-10-29 10:46:45 +07:00
BFlat 8e93bcb1bf Merge pull request #4362 from dotCooCoo/fix/issue-3773
Fix #3773: Offset Path offsets a path whose ends meet as a closed shape
2026-10-29 10:46:22 +07:00
BFlat 9392c872f5 Merge pull request #4501 from Silvertree2010/fix/4495-bug-eraser-tool-breaks-compound
Keep compound path holes when using the Eraser and Knife
2026-10-29 10:45:59 +07:00