Commit Graph
10704 Commits
Author SHA1 Message Date
dotCooCoo cfdeda35c4 Tests: the non-sRGB Drop Shadow test fails when its child test does not run
svg_darkness_uses_rendered_shadow_in_non_srgb_working_space runs itself
again in a child process with --exact and checked only the exit status.
libtest exits 0 when --exact matches no test, so a rename of the test
would have left the parent passing without running the non-sRGB check.
The parent now also requires "1 passed" in the child's output, as
layout_cache_follows_fonts_added_later in crates/tools does.
2026-10-29 18:45:54 +07:00
Max MittelstädtandGPT-6-Luna 2b37302fe5 Preserve comment markers inside CSS strings
Found while testing crates/svg/src/import/css.rs:346

Co-Authored-By: GPT-6-Luna <noreply@openai.com>
2026-10-29 18:45:51 +07:00
dotCooCoo f5d8329cb1 Batch: do not export into a subfolder that holds source files
With `includeSubdirs` and the destination folder the same as the source
folder, the Export for Screens folder of `a.svg` was `a`, and its
`Artboard-1.svg` replaced the source `a/Artboard-1.svg` before Batch
opened it. Batch now keeps the names of subfolders of the destination
folder that hold source files, so that export folder is `a-2`.
2026-10-29 04:43:40 -07:00
dotCooCoo adbb4a4b53 Merge main into feat/native-save-precision
EPS saves, new on main, name `precision` in their warnings as SVG, PDF and .ai saves do.
2026-10-29 04:37:09 -07:00
dotCooCoo cf5ed86729 Merge main into fix/shape-builder-merge-off-ui-thread 2026-10-29 03:59:34 -07:00
dotCooCoo 9ac89ec6f6 Merge main into fix/outline-stroke-keeps-effects-on-outline 2026-10-29 03:55:50 -07:00
dotCooCoo 9a05e8ad36 Batch: do not save over another source file in the destination folder
With the destination folder the same as the source folder, `a..svg` gets
the name `a` and was saved as `a.svg`, replacing the source `a.svg`
before Batch opened it. Batch now keeps the names of the source files in
the destination folder for their own output, so `a..svg` is saved as
`a-2.svg` and `a.svg` is saved over itself.
2026-10-29 03:43:25 -07:00
dotCooCoo efd7f3e97a Blend: a pending pick starts over when the document's history changes
The Blend tool kept its first pick, its clicked anchor and the blend it
was adding to through edits made outside the tool. Picking A, recoloring
other art and clicking B made a blend of A and B; undoing A's creation
left the next click doing nothing.

History::step names the current step by the serial numbers of the newest
undo step and the next redo step. The session keeps the active document's
uid and step from the tool's last pointer event and calls the new
Tool::history_moved at the next pointer event, or before drawing
overlays, when they differ. The tool's own edits are recorded after its
actions; a selection tool lent by Cmd is not told. BlendTool clears its
pick and chain there, as Escape does. A selection change keeps them.
2026-10-29 03:38:35 -07:00
dotCooCoo a00647c604 Type: None, Crisp and Strong type composite precisely in exports
The offscreen pass that draws type with an anti-aliasing method other
than Sharp rendered with the default 8-bit compositing, also in exports
that composite with floating point. It now renders with the frame's
rasterizer settings, so translucent fills inside the characters draw
as Sharp type draws them.
2026-10-29 02:49:31 -07:00
dotCooCoo 547b0aa2dd i18n: Catalan row for the VECTORCRAFT_TITLEBAR note in Preferences 2026-10-29 02:48:37 -07:00
BFlat 5cb5f4514d Merge pull request #4549 from storytold/fix/vietnamese-stacked-marks
Text: keep a letter and its marks in one font when falling back (#4491)
2026-10-29 16:46:24 +07:00
BFlat 0b49023774 Merge pull request #4550 from storytold/fix/pan-fill-test-hermetic
Tests: the pan-fill canvas test runs again when another test moves the placed-document clock
2026-10-29 16:46:05 +07:00
dotCooCoo 8a7d83e00f Batch: number export folders that have the name of a file an earlier source wrote
With the Folder destination, `a.svg` is saved as `destinationFolder/a.svg`.
A later source `a.svg.svg` then got the Export for Screens folder `a.svg`,
which already existed as a file, and its export failed. Batch now numbers a
source's name when its folder or any file it writes in the destination
folder has the name of a file or folder an earlier source wrote, so that
folder is `a.svg-2`.
2026-10-29 02:42:05 -07:00
dotCooCoo e11e7a39d9 Recolor: count left-out art by the colors it shows
A recolor of everything counted a locked or hidden object as left
unchanged when the pass would only have linked it, or the tiles of a
pattern it is filled with, to a swatch of the same color. With
`group`, it also counted one as changed when the group's rewrite only
removed its link to a dropped swatch, and as unchanged when the
rewrite recolored a pattern it is filled with.

The trial pass now leaves out changes to swatch links alone, patterns'
tiles included, and the count compares the colors the object shows,
its patterns' tiles included, before the recolor and after the
rewrite.
2026-10-29 02:37:19 -07:00
bflatastic e0c92a4d90 Keep a letter and its marks in one font when falling back (#4491) 2026-10-29 16:27:18 +07:00
bflatastic ef086103cc Tests: the pan-fill canvas test runs again when another test moves the placed-document clock 2026-10-29 16:27:12 +07:00
dotCooCoo d29db00c07 Type: import the anti-aliasing types the merge with main needs
main made the render and doc crates' imports explicit, so the merged
branch named TypeAntiAlias, TypeEdgeEntry, Pixmap, AntiAlias,
single_threaded_context and MAX_RASTER_SIDE without importing them.
2026-10-29 02:21:10 -07:00
BFlat c8d91d98de Merge pull request #4494 from Silvertree2010/fix/4490-ui-text-field-rounding-behaviour
Round stepper button steps like arrow-key steps
2026-10-29 15:42:12 +07:00
BFlat 8c0c5550ce Merge pull request #4415 from dotCooCoo/feat/shaper-drag-out
Shaper: dragging a shape out of a Shaper Group's bounds takes it out of the group
2026-10-29 15:41:12 +07:00
BFlat 9d747fa241 Merge pull request #4443 from dotCooCoo/fix/direct-fill-drag-keeps-partial-paths
Direct Selection: a drag from a fill moves only the selected anchors of partly selected paths
2026-10-29 15:40:52 +07:00
BFlat 6097cc11a2 Merge pull request #4418 from dotCooCoo/feat/hide-unselected-shortcut
Object: Cmd/Ctrl+Alt+Shift+3 hides every unselected object
2026-10-29 15:40:35 +07:00
dotCooCoo 6313519008 Merge commit 'refs/check/tm-4281-main' into w3t2/4281 2026-10-29 01:37:34 -07:00
dotCooCoo 8b63892265 Linux: drop the xwayland import that the main merge left unused in titlebar.rs 2026-10-29 01:37:29 -07:00
NetterSilverandClaude Haiku 5.5 c90cea9e19 Round stepper button steps like arrow-key steps
Fixes #4490

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 15:16:20 +07:00
dotCooCoo a4ca347692 Shaper: dragging a shape out of a Shaper Group's bounds takes it out of the group
Squashed from #4415 onto main.
2026-10-29 15:16:17 +07:00
dotCooCoo b860a7b9af Direct Selection: a drag from a fill moves only the selected anchors of partly selected paths
Squashed from #4443 onto main.
2026-10-29 15:16:11 +07:00
dotCooCoo 6d66eaf3dc Object: Cmd/Ctrl+Alt+Shift+3 hides every unselected object
Squashed from #4418 onto main.
2026-10-29 15:16:05 +07:00
BFlat 20c9b363dd Merge pull request #4537 from nevarem/feat/rectangle-constrain-link
Shapes: the Rectangle and Ellipse dialogs link Width and Height
2026-10-29 15:12:34 +07:00
BFlat 1a9c746924 Merge pull request #4535 from dotCooCoo/fix/drop-shadow-additive-darkness
Drop Shadow: apply Darkness in the source color space
2026-10-29 15:12:15 +07:00
BFlat 001143f6d7 Merge pull request #4534 from dotCooCoo/fix/issue-3161
Fix #2249: macOS converts the canvas from sRGB to the display's profile
2026-10-29 15:11:58 +07:00
BFlat 76d78dda12 Merge pull request #4532 from dotCooCoo/fix/issue-3137
Part of #3137: Color Guide takes its base from colors chosen in Color, Swatches and the Color Picker
2026-10-29 15:11:46 +07:00
BFlat 92ac961719 Merge pull request #4530 from Silvertree2010/fix/h3704-hyphenation-exception-break-poin
Map hyphenation exception break points to the original word's chars
2026-10-29 15:11:35 +07:00
BFlat 64e216a7e0 Merge pull request #4525 from dotCooCoo/fix/blob-brush-keeps-shift-axis
Blob Brush: keep the first Shift axis without moving earlier points
2026-10-29 15:11:13 +07:00
BFlat 327aab50cf Merge pull request #4489 from dotCooCoo/fix/swatch-edits-reach-graph-designs
Swatches: global swatch edits also update graph designs and the art of brushes
2026-10-29 15:10:56 +07:00
BFlat 1fa7b896ab Merge pull request #4446 from dotCooCoo/feat/flare-options-alt-reset
Flare: preview options and restore defaults with Alt or Option
2026-10-29 15:10:38 +07:00
nevaremandClaude Opus 5.5 69d684ed36 Shapes: the size dialogs' link applies every change of its state
The link applied its state only when its button was clicked, so turning
it off and on again through `ui.dialog.set` kept the old proportions,
and the next dialog didn't open with the state set that way. A link
turned on at a side of zero also took new proportions on the next frame
once that side was a size again.

The dialog now keeps the link state it last applied and applies any
change from it, however it was made: turned on, the link keeps the
sizes the dialog shows then; turned off, it forgets them; either way
the next dialog opens with the new state. Nothing else recalculates the
proportions, so a link turned on at a side of zero stays unconstrained
until it is turned off and on again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EjfPR4a1jPek7r3nyFFNYv
2026-10-29 14:36:42 +07:00
nevaremandClaude Opus 5.5 7d18b4481c Shapes: the Rectangle and Ellipse dialogs link Width and Height
A click with the Rectangle, Rounded Rectangle or Ellipse tool opens a
dialog with Width and Height. It now has a Constrain Width and Height
Proportions link beside the two rows, drawn like the Transform panel's:
while it is on, typing one side sets the other at the proportions the
shape had when the link was turned on. The next of these dialogs opens
with the link as the last one left it.

Width now comes before Height in these dialogs: the fields were listed
by name, so Height came first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EjfPR4a1jPek7r3nyFFNYv
2026-10-29 14:36:42 +07:00
dotCooCoo dfa9f883c0 Fix Drop Shadow Darkness in source color space 2026-10-29 14:36:41 +07:00
dotCooCoo f55cbf313c Fix #2249: macOS converts the canvas from sRGB to the display's profile
The window's CAMetalLayer had no color space: wgpu 30.0.1 sets it to
nil for an sRGB surface each time it configures the surface, and Core
Animation does not color-match a layer without one. On a wide-gamut
display #FF0000 showed as the display's own red, (255, 0, 0) in a
capture where Preview shows the same sRGB red as (234, 51, 35).

A paint callback that draws nothing runs after egui configures the
surface and before the frame is presented. It sets sRGB on each
window's Metal layer that has no color space and leaves any other color
space as it is. wgpu's own fix (gfx-rs/wgpu#10286) is in no release yet.

Fixes #3161.
2026-10-29 14:36:37 +07:00
dotCooCoo e31e04e545 Part of #3137: Color Guide takes its base from colors chosen in Color, Swatches and the Color Picker
The Color Guide kept the base color it took when the panel first showed,
and only the base chip changed it. In a new document the current fill is
white, so every harmony and variation was white or gray until the base
chip was clicked with another current color.

A color chosen in the Color panel (spectrum, sliders, fields, chips and
Recent Colors), in the Swatches panel or a swatch library panel, or with
OK in the Color Picker for a fill or stroke now becomes the guide's base
color, and the guide shows its harmonies. A color applied from the guide
itself leaves the base as it is, and so does selecting artwork. The base
chip (Set base color to the current color) still makes the current color
the base. A new base clears the cells selected for Save Colors as
Swatches.

The base moves from egui's temporary memory to UiState::color_guide_base,
which is not saved, so the Color panel, the Swatches panels and the Color
Picker can set it.
2026-10-29 14:36:35 +07:00
NetterSilverandClaude Haiku 5.5 520f390c9c Map hyphenation exception break points to the original word's chars
Found while testing crates/text/src/hyphen.rs:74-90 (parse_exception)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 14:36:33 +07:00
dotCooCoo c1c07efc95 Blob Brush: keep the first Shift axis without moving earlier points
Squashed from #4525 onto main.
2026-10-29 14:36:32 +07:00
dotCooCoo bb869dd9df Swatches: global swatch edits also update graph designs and the art of brushes
Squashed from #4489 onto main.
2026-10-29 14:36:04 +07:00
dotCooCoo b9f9099d91 Flare: preview options and restore defaults with Alt or Option
Squashed from #4446 onto main.
2026-10-29 14:35:57 +07:00
BFlat f1ab585170 Merge pull request #4531 from dotCooCoo/fix/macos-app-modules
macOS: the app builds and passes clippy again after main.rs was split
2026-10-29 14:32:41 +07:00
dotCooCoo 59711d61f3 macOS: the app builds and passes clippy again after main.rs was split
`cargo build -p vectorcraft` on macOS stops with nine E0433 errors:
app.rs and host_services.rs use `mac_menu`, `mac_window`,
`open_documents`, `gpu`, `mac_save_format`, `mac_tablet` and
`mac_screen_color` without importing them since those items moved out
of main.rs. The two files now import them under the same cfg as the
code that uses them.

`cargo clippy -p vectorcraft --all-targets -- -D warnings` on macOS then
stops at the wildcard import in clipboard.rs's macOS module, which now
names the two items it uses.

Other platforms compile the same code as before.
2026-10-29 14:31:10 +07:00
BFlat 705bf80f10 Merge pull request #4543 from storytold/feat/path-smooth
Path: Object › Path › Smooth with a slider and Auto-Smooth (#4115)
2026-10-29 14:27:38 +07:00
bflatastic efc1501ac9 Path: Object › Path › Smooth smooths the selected paths with a slider and Auto-Smooth (#4115) 2026-10-29 13:51:51 +07:00
BFlat 5769caaa95 Merge pull request #4293 from mockydevs/fix/eps-original-format-save
Support EPS Save and Save As with editable data
2026-10-29 13:49:38 +07:00
BFlat ec354ee173 Merge pull request #4256 from dotCooCoo/fix/canvas-fills-uncovered-area
Canvas: a pan or zoom-out fills the uncovered area with low-resolution art
2026-10-29 13:49:21 +07:00