Commit Graph
5745 Commits
Author SHA1 Message Date
Taha-Mahmoodi a34055beec Artboards: the Artboards panel's Delete Empty Artboards deletes every artboard with no artwork in one undo step
Squashed from #4142 onto main.
2026-10-26 14:10:36 +07:00
BFlat 0b5affef5e Merge pull request #4166 from Taha-Mahmoodi/fix/2691-repeat-grid-handles
Repeat: a selected Grid Repeat has on-canvas handles for its rows, columns and spacing (part of #2691)
2026-10-26 13:49:33 +07:00
BFlat b36d9b7160 Merge pull request #4230 from Silvertree2010/fix/h2780-svg-import-css-declaration-parse
Respect quotes and parentheses when splitting SVG CSS declarations
2026-10-26 13:46:38 +07:00
Taha-Mahmoodi 5b91057dca Repeat: a selected Grid Repeat has on-canvas handles for its rows, columns and spacing
With the Selection tool, a single selected grid repeat shows a handle below the grid (rows), one right of it (columns), one past its bottom-right corner (both) and sliders between its first two columns and rows (horizontal and vertical spacing), as the public Set grid repeat options page describes. Each drag previews object.repeat.options and commits as one Repeat Options undo step; Escape cancels, and a drag that ends where it began leaves no step. Bounding-box handles keep priority where they overlap, and the controls hide with the edges or the bounding box. Before, a drag there scaled the source or started a marquee.

Part of #2691.
2026-10-26 13:44:06 +07:00
NetterSilverandClaude Haiku 5.5 29a98b750a Respect quotes and parentheses when splitting SVG CSS declarations
Found while testing crates/svg/src/import/css.rs:21 (parse_decls)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 13:43:20 +07:00
BFlat bb3ee0a260 Merge pull request #4210 from KaboomFox/pdf-tests-dated-alike
PDF tests: exports compared byte for byte are dated alike
2026-10-26 13:40:00 +07:00
BFlat ddc72e4886 Merge pull request #4227 from ncic/pencil-mouse-samples
Canvas: a mouse's moves between frames reach the tool too
2026-10-26 13:38:20 +07:00
Louise FoxandClaude Opus 5.5 1466317301 PDF tests: exports compared byte for byte are dated alike
dithered_perceptual_gradients_export_as_images_with_noise_on_the_fill
compares two exports byte for byte: a stroke's file with dither and
without. The export dates a file by the clock, in whole seconds
(metadata::output_time, unless SOURCE_DATE_EPOCH is set), and the
tests' `uncompressed` helper gave no date of its own. So the test
failed whenever a second ticked between the two exports: the files
then differed in /CreationDate, /ModDate, the XMP dates and the IDs
made from them, and in nothing else. CI hit it on #3807.

With the wall clock moved a second on each read (an LD_PRELOAD shim
on clock_gettime), the test failed 5 runs of 5, and it was the only
one of vectorcraft-pdf's 380 tests that did. With the helper's date
fixed it passes, as do the other 379.

The helper now dates its exports `created: Some(0)`, as the crate's
other tests that compare whole files do (tests_editing, tests_pdf13,
tests_webview).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HhvnnnD5fTFupK8WWq35un
2026-10-26 13:37:40 +07:00
ncicandClaude Opus 5.5 21a9e854e1 Tools: only the freehand tools get every move of a frame (#4227 review)
Every pointer move of a frame went to whatever tool was active, so with
a fast mouse (or a pen) a tool whose drag preview is costly (the
Selection tool moving a large selection, Free Distort, the Width tool)
redid it for each, up to 64 times a frame.

Tool::wants_samples (default false) says a tool builds a stroke from
the drag's samples: the Pencil, Paintbrush, Blob Brush, Eraser, Knife,
Smooth and Path Eraser answer true (the Paintbrush through its wrapper),
the Join tool doesn't. The canvas still reads the frame's moves every
frame, so the macOS feed's pressures stay paired, but replays them only
to such a tool; every other tool gets one drag a frame at the latest
position. A frame whose moves end where the last frame's did still
reaches the tool.

Tests: only_the_freehand_tools_get_every_move_of_a_frame (Pencil,
Paintbrush and Blob Brush get the 19 moves before the last, Selection,
Direct Selection and Width none),
a_mouse_stroke_keeps_a_frame_that_ends_where_it_started,
the_freehand_tools_want_every_sample, and
a_mouse_stroke_keeps_every_move_of_a_frame now checks every position in
order, not only the count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:31:52 +07:00
ncicandClaude Opus 5.5 954d3f3116 Canvas: a mouse's moves between frames reach the tool too (#3328)
The canvas hands a dragging tool every position the pointer passed
within a frame for pens and fingers (touch events) and for a macOS pen
(the stylus feed's moves, #852), but a mouse got the frame's last
position only: one sample per frame. A fast mouse stroke kept a
position every 10 to 20 px, too few for any Fidelity to follow the
hand, and fewer still while the app is busy and frames come slower.

frame_moves now keeps a mouse's moves as well, without a pressure (the
tool takes the host's latest, a mouse's being full; a pen's on X11
among them), with the same bound of 64 moves for a stalled frame, as
touch and pen moves already reach every tool.

Tests: a_mouse_stroke_keeps_every_move_of_a_frame (20 moves in one
frame reach the Pencil; it got 2 points before this change), and
frame_moves_keeps_touch_feed_and_mouse_samples_with_their_pressure
replaces the test that a mouse's moves were left out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:31:52 +07:00
BFlat e9eec8fdeb Merge pull request #4229 from nrq6993-a11y/stream/vc-feat3-g4-loaded-text-cursor
G4: draw loaded-text cursor for threaded overflow
2026-10-26 13:09:43 +07:00
nrq6993-a11y c640f40ce1 G4: draw loaded-text cursor for threaded overflow
Squashed from #4229 onto main.
2026-10-26 13:09:22 +07:00
BFlat ad588ef028 Merge pull request #4225 from ncic/pencil-live-preview
Pencil: Live preview option in Pencil Tool Options
2026-10-26 12:59:05 +07:00
ncicandClaude Opus 5.5 21e9c8ff31 Pencil: Live preview option, a thin line while drawing when it is off
A Pencil stroke always previewed as the path it draws, with its full
appearance: with a fill set, the fill flipped between the shape and its
inside-out as the stroke crossed itself or curved back, and hid the line
being drawn.

Pencil Tool Options get a Live preview checkbox, above Live curve
fitting, on by default and kept with the tool's other options
(`livePreview`, settings.rs). With it off, the stroke previews nothing
while it is drawn: a thin line follows the pen (the drag overlay the
Knife and Blob Brush already show), and the release, or a switch of
tool mid-stroke, draws the path with its fill and stroke, as one undo
step, as before. Escape still cancels the stroke. With it on nothing
changes. The Paintbrush has no such option and keeps previewing.

Public reference: Draw and edit paths using the Pencil tool,
https://helpx.adobe.com/illustrator/using/tool-techniques/pencil-tool.html
(lists Live preview and Live curve fitting among the Pencil's options).

The checkbox label is translated in all 24 catalogs.

Tests: pencil_with_live_preview_off_shows_a_thin_line_until_the_release
(tools), pencil_with_live_preview_off_draws_the_filled_path_on_release
(engine), and the freehand dialog test shows the checkbox for the Pencil
only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:52:32 +07:00
BFlat 9a9d6dae3e Merge pull request #4222 from dotCooCoo/fix/i18n-scan-skips-comments-reads-disabled-reason
i18n: the message scan skips comments and reads EngineError::Disabled's reason
2026-10-26 12:23:59 +07:00
BFlat 3a8181f091 Merge pull request #4213 from DCaioP/fix/decimal-comma-in-unit-fields
Fix #3837: unit fields read a decimal comma as a decimal point
2026-10-26 12:23:43 +07:00
dotCooCoo 64f29d5848 i18n: the message scan skips comments and reads EngineError::Disabled's reason
The message scan read the first argument of every error variant, so
for EngineError::Disabled it read the command id and missed the reason
the status bar shows. It also read error calls inside comments, such as
a commented-out bad(cmd, "..."), as messages that need catalog rows.
The scan now reads Disabled's second argument and removes // and
/* ... */ comments (nested ones included) before it looks for calls. A
// or /* inside a string or character literal does not start a comment.
2026-10-26 12:20:24 +07:00
Caio Pontes aaf574b845 Fix #3837: a thousands comma is refused, not read as a decimal
Review: reading `1,000` as 1 would give someone who writes decimals
with a point a value a thousand times too small, with no sign that
anything went wrong; refusing it, as before, is the safer answer.

A number that reads as thousands (one to three digits, a comma,
exactly three digits, then at most a unit: `1,000`, `12,500 mm`) now
keeps its comma, so the field refuses it. `0,125` is still a decimal
(a lone 0 never groups thousands), as are `1,25`, `1,0000` and
`1,500+2`.
2026-10-26 12:20:23 +07:00
Caio Pontes 326f7809b0 Contributors: add Caio Pontes 2026-10-26 12:20:23 +07:00
Caio Pontes 7163bf93db Fix #3837: unit fields read a decimal comma as a decimal point
Typing an offset of `0,1` in Offset Path, in a document in
millimeters, put the field back to the value it had (1 mm), so it
looked as if values under 1 mm were refused. The length parser only
takes a point as the decimal separator, and a field drops text it
can't read.

The shared numeric fields (unit_field, bounded_field and opt_field)
now read a comma as the decimal separator when the text has no point,
so `0,1 mm`, `1,5+0,25` and `12,5%` work in every dialog and panel
that uses them. Text with a point keeps its commas, so `1,000.5` is
still refused. The engine, MCP and control channel keep the strict
format.
2026-10-26 12:20:23 +07:00
BFlat e466320349 Merge pull request #4220 from ncic/pencil-redraw-compound
Pencil: Edit Selected Paths redraws a selected compound path
2026-10-26 11:52:44 +07:00
ncicandClaude Opus 5.5 20476760bc Pencil: Edit Selected Paths redraws a selected compound path's member paths
A selected compound path (a shape with a hole, such as one made with
Object › Compound Path › Make) could not be redrawn with the Pencil or
the Paintbrush: at the press, find_redraw looked only for selected
objects that are paths themselves, and a compound path's paths are its
children. The stroke then drew a new path, which Keep selected selected
in place of the compound path, so every later stroke near the shape drew
a new path too: redrawing seemed to stop working.

- find_redraw takes a selected compound path's member paths as well,
  the nearest one within Edit selected paths within of the press.
- path.freehand's redraw keeps the compound path selected (or, with Keep
  selected off, takes it out of the selection) when the redrawn path is
  one of its members, so the next stroke redraws it too.

Test: pencil_redraws_a_selected_compound_path redraws the outer path and
then the hole of a selected compound path; it fails without this change
(the first stroke draws a new path).

cargo xtask ci: every step passes except one test in `test`,
vectorcraft-pdf tests_import_fidelity::text_becomes_point_type, which
fails the same way on unmodified main on this machine; it is unrelated
to this change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:49:03 +07:00
BFlat 03b16c8914 Merge pull request #4218 from HEOJUNFO/fix/tab-overflow-scroll
Tab overflow list scrolls to every open document (#4017)
2026-10-26 11:26:00 +07:00
heojunfoandClaude Opus 5.5 452c034329 Tab overflow list scrolls to every open document (#4017)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 11:22:54 +07:00
skylar taylor-barrick 581c79dcb1 M14: distinguish qualification from publication (#4173) 2026-10-25 23:47:58 -04:00
BFlat 3ce284cda3 Merge pull request #4216 from dotCooCoo/fix/trace-rare-budget-blends
Image Trace: a cut-edge blend past the rare-color budget traces as its kept color
2026-10-26 10:43:55 +07:00
dotCooCoo 5d2a9099f1 Image Trace: a cut-edge blend past the rare-color budget traces as its kept color
The loop that keeps rare colors stopped at the first color past the
budget of six, so a cut-edge blend listed after it was not recorded as
tracing as its rare color, even when that rare color was kept, and its
pixels went to the nearest color instead. The loop now goes on past the
budget and only stops keeping new rare colors. It moves into
`kept_rare`, which a new test calls with seven rare colors and a blend
of the first.

The test of an outline over a cut edge in the color of other art also
checks that the dark paths reach the top and the bottom of the disc,
which no bar comes near: before, the bars alone met its checks.
2026-10-26 10:41:54 +07:00
BFlat 8f95e0165f Merge pull request #4215 from ashokram-si/fix/metafile-dib-budget-3600
Metafile import: a file's bitmaps share one decoded-pixel budget (#3600)
2026-10-26 10:35:43 +07:00
ashokram-si 41e8824c46 Metafile import: a file's bitmaps share one decoded-pixel budget (#3600)
Each embedded DIB was bounded on its own (2^26 pixels), but not their total, so a small EMF or WMF of many BI_PNG/BI_JPEG records could cost minutes of decoding. The importer now gives a file 2^28 pixels for all its bitmaps, charged from each bitmap's header before it is decoded; bitmaps past it are left out with a warning.
2026-10-26 10:30:54 +07:00
BFlat cfefb4402d Merge pull request #4146 from Taha-Mahmoodi/feat/transform-panel-menu
Transform panel: the menu's Transform Object Only, Pattern Only, Both and Use Registration Point for Symbol act
2026-10-26 10:17:39 +07:00
Taha-Mahmoodi 502b204d74 Transform panel: the menu's Transform Object Only, Pattern Only, Both and Use Registration Point for Symbol act
Squashed from #4146 onto main.
2026-10-26 10:04:25 +07:00
BFlat 0f5b960bf1 Merge pull request #4214 from storytold/revert-4200-4203
Revert #4200 and #4203: their explicit imports don't compile
2026-10-26 09:56:46 +07:00
bflatastic a54251a18a Revert "Merge pull request #4200 from storytold/fix/sonar-s2208-engine-tests"
This reverts commit d7a2591dc0, reversing
changes made to e63c26ff15.
2026-10-26 09:56:24 +07:00
bflatastic f5c528069f Revert "Merge pull request #4203 from storytold/fix/sonar-s2208-remaining"
This reverts commit 15e4054f7a, reversing
changes made to d7a2591dc0.
2026-10-26 09:56:24 +07:00
BFlat 15e4054f7a Merge pull request #4203 from storytold/fix/sonar-s2208-remaining
lint: explicit imports in remaining test and module files (S2208)
2026-10-26 09:53:54 +07:00
BFlat d7a2591dc0 Merge pull request #4200 from storytold/fix/sonar-s2208-engine-tests
lint(engine): explicit imports in engine modules and tests (S2208)
2026-10-26 09:53:39 +07:00
Dylan M. Taylor 96cd4b1b14 lint: explicit imports in remaining test and module files (S2208)
Replace glob imports (`use super::*`, `use crate::*`, `use sig::*`) with
the names each file uses, in scriptcheck, pdf, render, text and ui-egui.
No code changes.
2026-10-26 09:52:51 +07:00
Dylan M. Taylor 2b72794251 lint(engine): explicit imports in engine modules and tests (S2208)
Replace glob `use super::*` with the names each module uses, so the
module's imports are visible at the top of the file (Sonar rust:S2208).
No code changes.
2026-10-26 09:52:47 +07:00
BFlat e63c26ff15 Merge pull request #3975 from dotCooCoo/feat/trace-color-group
Image Trace: Document Library traces with a color group from the Swatches panel
2026-10-26 09:42:27 +07:00
BFlat a1a40c6228 Merge pull request #2532 from vangel76/feat/artboard-lock-colour-canvas
Artboards: canvas menu to lock and unlock artboards (#2531)
2026-10-26 09:42:10 +07:00
dotCooCoo df716c3118 Image Trace: Document Library traces with a color group from the Swatches panel
Squashed from #3975 onto main.
2026-10-26 09:25:42 +07:00
vangel76 b54a5e6765 Artboards: canvas menu to lock and unlock artboards (#2531)
Squashed from #2532 onto main.
2026-10-26 09:25:35 +07:00
BFlat cee45a0f8c Merge pull request #4212 from storytold/land/4074
G12: General › Corner Radius is the Rounded Rectangle tool's radius (#4074)
2026-10-26 09:23:31 +07:00
BFlat 4e70e39e90 Merge pull request #4106 from addibble/web-zoom-keys
Web: shortcuts the browser also has run only in the app
2026-10-26 09:22:50 +07:00
BFlat 076a7d72a7 Merge pull request #4099 from dotCooCoo/feat/highlight-substituted-fonts-preference
Type: Highlight Substituted Fonts moves to Preferences › Type and applies to every document
2026-10-26 09:22:35 +07:00
BFlat 817d6da31e Merge pull request #4104 from dotCooCoo/feat/web-pen-eraser-end
Pen tablets: a pen's eraser end selects the Eraser in the web build
2026-10-26 09:22:19 +07:00
BFlat df016b4f8f Merge pull request #4097 from dotCooCoo/feat/windows-pen-eraser-end
Pen tablets: a pen's eraser end selects the Eraser on Windows
2026-10-26 09:22:01 +07:00
BFlat ed012a6a75 Merge pull request #4119 from ham9zah/fix/joined-type-on-path
Type on a path: joined scripts bend along the path so their joins stay connected
2026-10-26 09:21:44 +07:00
BFlat 61f566b2c9 Merge pull request #4196 from ncic/pencil-fidelity-range
Fix #3328: Pencil Fidelity down to 0.01 pt, with a logarithmic slider and key steps that fit the range
2026-10-26 09:21:26 +07:00
BFlat 50efdcaafe Merge pull request #4095 from dotCooCoo/feat/pencil-connect-two-paths
Pencil: a stroke from an end of one selected path to an end of another connects them
2026-10-26 09:21:15 +07:00