Commit Graph
6228 Commits
Author SHA1 Message Date
dotCooCoo 25e8836af9 Tools: Escape cancels an Anchor Point, Mesh, Shape Builder or Measure drag
Escape did not cancel a drag with the Anchor Point, Mesh, Shape Builder
and Measure tools, or a Direct Selection drag of a mesh point, a corner
widget or the brackets of type on a path: the drag went on until the
mouse was released. Escape cancels every other Direct Selection drag
and a drag with the Free Transform, Rotate, Reflect, Scale, Shear and
Gradient tools.

Escape now cancels an Anchor Point drag, a Mesh tool drag of a mesh
point or handle, and a Direct Selection drag of a mesh point or handle,
a corner widget or the brackets of type on a path. The art goes back to
how the press found it, no undo step is added, and the rest of the drag
and the release send nothing. Escape during a Shape Builder drag ends
it, so the release merges and deletes nothing; the tool takes Escape
only during the drag. Escape during a Measure tool drag ends it and
brings back the measurement shown before the press. Escape after an
Anchor Point or Direct Selection press that has not moved yet drops the
press. Otherwise, outside a drag, Escape does what it did before.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 11:07:46 +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
BFlat cd64f6d14a Merge pull request #4512 from el-j/perf/canvas-upload-buffer-4504
perf(ui-egui): eliminate zero-filling allocation on canvas texture upload in color_image (#4504)
2026-10-29 10:43:58 +07:00