Commit Graph
4850 Commits
Author SHA1 Message Date
Taha-Mahmoodi 6ee972c4da Fix #2452: panning or zooming over detailed art no longer hit-tests it every frame
With the pointer resting over art while the view moves (trackpad or wheel
scrolling, pinch zoom, a Hand/space pan), the document point under the
pointer changes every frame, and the canvas hit-tested the art there on
each one, up to three times: Object Highlighting (canvas.rs
hover_highlight -> selection_hit_at) and the Selection tool's cursor
(select.rs cursor: hit_test, and with Snap to Point the nearest-anchor
search). Over a detailed engraving in a clip group (the reporter's
PhotoCraft icon: one path of tens of thousands of segments) each of those
costs roughly 3-6 ms, so every frame of the move took 12-15 ms of UI time;
off the art they return at once.

- canvas.rs: the canvas notes when its view (rect, zoom, centre,
  rotation) last changed. Until it has been still for HOVER_STILL_SECS
  (0.15 s) it draws no hover highlight and keeps the cursor the tool last
  gave for the same tool and modifier keys instead of asking again; it
  asks for a repaint then, so both come back without the pointer moving.
  Pointer moves still reach the tool as before.
- test: a_moving_view_leaves_the_art_under_the_pointer_unhighlighted_until_it_stops
  (wheel frames draw no hover outline and keep the cursor; once still,
  the outline returns and the cursor follows the art). It fails on main
  at the first wheel frame.

Measured on an Apple M4 (release build, 1440x900 window, the PhotoCraft
app icon SVG fitted at 138%, Selection tool, Smart Guides and Snap to
Point on), median UI frame time over 60 wheel-pan frames with the pointer
resting:
  before: over the art 12.3-15.0 ms, off the art 1.0 ms
  after:  over the art 0.4-1.0 ms,  off the art 0.6 ms
The render readout is the art's own raster time on the render worker,
which this change doesn't touch.
2026-10-22 16:06:55 +07:00
Taha-Mahmoodi a8bdf5043f Fix #3093: panel scroll bars take a column of their own instead of covering controls
The panels' scroll areas used egui's default floating scroll bar, which
is drawn over the right edge of the content: in a window too short for
the Properties panel it covered the Image Trace button's dropdown arrow
and the W/H constrain link, and in a dock column too tall for the window
it covered the panels' menu buttons and right-hand controls. Menus
(#2086, list_scroll_style) and the toolbar and dock icon column (#808,
strip_scroll) had already been given bars that keep clear of their
items; the panel bodies hadn't.

- widgets: panel_scroll shows a panel's scroll area with the menus' slim
  solid bar (list_scroll_style), in a column of its own at the right
  edge; scroll areas inside the body keep their own style.
- dock.rs: the docked Properties panel and Properties in a flyout,
  floating group or shared dock group use it.
- floating.rs: a dock column too tall for the window uses it.
- panel_docking.rs: a panel's body in the shared dock uses it, laid out
  as wide as the scroll area leaves beside the bar; the shared dock's
  icon column scrolls with strip_scroll, as the dock's icon column does.
- test: the_properties_scroll_bar_covers_no_control (a 1440x600 frame of
  the dock with an image selected: no control's rect meets the
  Properties scroll bar). It fails on main with "Tracing Presets" (the
  Image Trace arrow) and "Constrain Width and Height Proportions" under
  the bar.

Verified live at 1440x600 with an image selected: before, the hovered
bar sat over the Image Trace arrow and the right ends of the Quick
Action buttons, and a dock column's bar over the Swatches panel menu;
after, both bars sit in their own 8 pt column and nothing is covered.
2026-10-22 16:06:54 +07:00
Taha-Mahmoodi b0d5ab3f68 Fix #2103: arrow keys with the Artboard tool move the selected artboards and their art
With the Artboard tool the arrow keys did nothing to the artboards: the
tool claimed only Escape, Delete and Backspace (tools/src/xform/artboard.rs
claims_key), so the arrows fell through to object.nudge in
ui-egui/src/shortcuts.rs, which moved the selected art on its own (or
nothing, with no art selected) and left the artboard where it was.

- artboard.rs: the tool claims the arrow keys and turns each press into
  one artboard.move of the selected artboards that aren't locked, by the
  keyboard increment (Preferences > General > Keyboard Increment, read
  from the tool context as Touch Type does), Shift ten times as far as
  object.nudge does, with moveArt from the tool's Move/Copy Artwork with
  Artboard option, as a drag sends it. One undo step per press; nothing
  during a drag or with only locked artboards selected.
- tests: arrow_keys_nudge_the_selected_artboards (tools: claims, step,
  Shift, moveArt, several boards, locked, mid-drag) and
  artboard_tool_arrow_keys_move_the_selected_artboards_with_their_art
  (engine: the artboards and the art on them move, one step per press).

Verified live over --control: a 400x300 artboard with a selected 40 pt
square, Artboard tool, ArrowRight: before, the artboard stayed at x 0 and
the square moved to x 51 ("Move"); after, the artboard goes to x 1 and the
square with it ("Move Artboard"); Shift+Down moves both 10 pt; with
Move Artwork off only the artboard moves; increment 5 moves 5 pt.

The drag case in the report: a drag already moves the art, but only the
art that lies wholly inside the artboard and is unlocked and visible
(doc/src/lib.rs art_on_artboard; locked and hidden art only with
Move Locked and Hidden Artwork with Artboard). Art overlapping the
artboard's edge stays behind by design, which may be what the reporter
saw when dragging.
2026-10-22 16:06:54 +07:00
BFlat c49a1faa4b Merge pull request #3542 from nrq6993-a11y/stream/vc-feat3-g4-mixed-justification-dialog
G4: Mixed Justification dialog fields
2026-10-22 15:48:04 +07:00
bflatastic 5498b62a3d G4: Mixed Justification dialog fields
Squashed from #3542 onto main.
2026-10-22 15:35:44 +07:00
BFlat a65d3f2313 Merge pull request #3541 from lehni/fix/stretched-text-redraw 2026-10-22 15:34:38 +07:00
Jürg Lehni 81dca05eb1 Render: moved stretched type redraws where its strokes reach
Follows #3484: characters' strokes stretch with the type, past what its scale factor covers.
2026-10-22 15:29:37 +07:00
Jürg Lehni a2e7a2a562 Render: moved stretched type redraws where its strokes reach
Follows #3484: characters' strokes stretch with the type, past what its scale factor covers.
2026-10-22 10:26:50 +02:00
BFlat 3b8e1aef43 Merge pull request #3539 from nrq6993-a11y/stream/vc-featD-g4-mixed-paragraph-kinsoku-mojikumi
G4: Mixed paragraph kinsoku and mojikumi dropdowns
2026-10-22 15:17:07 +07:00
BFlat 8862058388 Merge pull request #3537 from nrq6993-a11y/stream/vc-featD-g4-mixed-paragraph-hyphenate
G4: Mixed paragraph Hyphenate checkbox
2026-10-22 15:16:56 +07:00
bflatastic b833187ff8 G4: Mixed paragraph kinsoku and mojikumi dropdowns
Squashed from #3539 onto main.
2026-10-22 15:08:51 +07:00
Cursor Agentandnrq6993-a11y 2bf0595f09 G4: mixed paragraph Hyphenate checkbox
## Summary
When the Paragraph and Properties panels act on multiple paragraphs with different hyphenation settings, the Hyphenate checkbox is off, matching Illustrator mixed-value behaviour alongside mixed indents, alignment and composer. Toggling still applies through `text.setFormat` to every paragraph in scope.

## Tests
- `paragraph_mixed_hyphenate_checks_off` in `vectorcraft-ui-egui` paragraph panel tests.

Part of gap G4

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 15:08:31 +07:00
BFlat 388c653cd1 Merge pull request #3534 from nrq6993-a11y/stream/vc-feat1-3505-type-on-path-fill-hit
Type on a Path hits filled paths without a stroke (#3505)
2026-10-22 15:02:46 +07:00
Cursor Agentandnrq6993-a11y 8735170a34 Type tools: hit path outline only for area and path type
## Summary
Adobe help documents Area Type and Type on a Path as starting from a click on the path or shape border, not inside a filled interior. Restore outline-only hit testing for those tools (no fill-interior hits that would steal point-type clicks). Strokeless filled paths still accept clicks on the outline.

## Tests
- area_and_path_tools_hit_path_outline_not_fill_interior

Part of storytold/vectorcraft#3505 (review feedback on PR #3534)

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 15:01:36 +07:00
Cursor Agentandnrq6993-a11y 6883235bad G11: Type on a Path hits filled paths without a stroke (#3505)
## Summary
Area Type and Type on a Path locate the path under the click with the same hit rules as the other tools, so a filled shape with no stroke can be clicked in its interior. Illustrator accepts those clicks for area type and for type on a path (the start follows the click on the path). VectorCraft had forced outline-only hit testing here, so interior clicks missed and the tools fell back to ordinary point or area text with placeholder copy.

## Tests
- type_on_path_and_area_type_hit_filled_paths_without_a_stroke in vectorcraft-tools

Closes storytold/vectorcraft#3505

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 15:01:36 +07:00
BFlat 0414a13ace Merge pull request #3535 from MorningFrog/feat/3515-recent-fonts
Type: show recently used fonts in font pickers (#3515)
2026-10-22 14:43:08 +07:00
BFlat f1dc5e50a3 Merge pull request #3533 from nrq6993-a11y/stream/vc-feat1-3440-color-proxy-drag
G11: Color Picker and popover Fill/Stroke proxy drags (#3440)
2026-10-22 14:42:54 +07:00
MorningFrog 4ae1b3d51a #3515: show recent fonts in font pickers 2026-10-22 14:35:57 +07:00
Cursor Agentandnrq6993-a11y 36eed1ac77 Keep fill/stroke chip popover open during proxy drags
## Summary
The fill/stroke chip popover no longer closes while the pointer is down, a panel paint drag is active, or the opening click is still on the chip anchor, so dragging fill onto stroke (or the reverse) inside the popover can finish. Color Picker proxies are not added; the reference app edits only the colour the picker was opened for.

## Tests
- panels::tests::dropping_a_proxy_paint_on_the_other_proxy_applies_it (unchanged)

Closes storytold/vectorcraft#3440

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 14:35:56 +07:00
Cursor Agentandnrq6993-a11y 5a7689c3b4 G11: Color Picker and popover Fill/Stroke proxy drags (#3440)
## Summary
Illustrator lets you drag the fill colour onto the stroke (or the other way) in the Color Picker and in the fill/stroke chip popover. VectorCraft now shows the Fill/Stroke proxy pair in the Color Picker (except for artboard background edits) and applies paint.setFill or paint.setStroke when a proxy paint is dropped on either square; clicking a square switches which side the picker edits. The fill/stroke chip popover stays open while the pointer is down, while a panel paint drag is active, or when the opening click is on the chip anchor, so drags between the proxies can finish.

## Tests
- color_picker_proxy_drag_applies_fill_to_stroke (headless egui)
- existing dropping_a_proxy_paint_on_the_other_proxy_applies_it unchanged

Closes storytold/vectorcraft#3440

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 14:35:56 +07:00
BFlat af520a7cf3 Merge pull request #3469 from dennisklappe/fix/3410-preferences-storage-label
Rename the Preferences "Performance & Storage" category to "Storage" (#3410)
2026-10-22 14:03:07 +07:00
Dennis Klappe b11b41d5f3 Name the Preferences category Plug-ins & Scratch Disks
Fixes #3410
2026-10-22 14:01:18 +07:00
Dennis Klappe 6ee357a6d4 Rename Preferences category Performance & Storage to Storage
Fixes #3410
2026-10-22 13:54:04 +07:00
BFlat bb4767fca5 Merge pull request #3507 from nrq6993-a11y/stream/vc-feat-g11-arc-tool-dialog
G11: Open Arc tool options on canvas click
2026-10-22 13:50:46 +07:00
Cursor Agent b1befcfa02 G11: translate Arc Segment Tool Options dialog in all catalogs
Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>

# Conflicts:
#	crates/ui-egui/src/i18n/bg.tsv
#	crates/ui-egui/src/i18n/cs.tsv
#	crates/ui-egui/src/i18n/da.tsv
#	crates/ui-egui/src/i18n/de.tsv
#	crates/ui-egui/src/i18n/el.tsv
#	crates/ui-egui/src/i18n/es.tsv
#	crates/ui-egui/src/i18n/fi.tsv
#	crates/ui-egui/src/i18n/fr.tsv
#	crates/ui-egui/src/i18n/hu.tsv
#	crates/ui-egui/src/i18n/id.tsv
#	crates/ui-egui/src/i18n/it.tsv
#	crates/ui-egui/src/i18n/ja.tsv
#	crates/ui-egui/src/i18n/ka.tsv
#	crates/ui-egui/src/i18n/ko.tsv
#	crates/ui-egui/src/i18n/nl.tsv
#	crates/ui-egui/src/i18n/pl.tsv
#	crates/ui-egui/src/i18n/pt-br.tsv
#	crates/ui-egui/src/i18n/ru.tsv
#	crates/ui-egui/src/i18n/sv.tsv
#	crates/ui-egui/src/i18n/tr.tsv
#	crates/ui-egui/src/i18n/uk.tsv
#	crates/ui-egui/src/i18n/vi.tsv
#	crates/ui-egui/src/i18n/zh-hans.tsv
#	crates/ui-egui/src/i18n/zh-hant.tsv
2026-10-22 13:38:09 +07:00
Cursor Agentandnrq6993-a11y 71b5c9c45c G11: Arc tool keeps segment options and uses them on drag
Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 13:38:04 +07:00
Cursor Agentandnrq6993-a11y 5359c92a19 G11: Arc segment dialog options wired to shape.arc
Replace length/angle with Length X/Y, reference point, Type, Base Along, Slope and Fill Arc; extend geom and shape.arc params.

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 13:38:04 +07:00
Cursor Agentandnrq6993-a11y d6e64cb080 G11: open Arc tool options on canvas click
## Summary
A click on the artboard with the Arc tool (no drag) opens an Arc options
dialog at the pointer, matching Illustrator. Length, angle, and Closed
follow the same form as Line Segment; OK runs shape.arc and remembers
Closed via tool.setOption.

## Tests
- dialogs::tests::arc_click_opens_options_and_ok_draws
- Existing draw2::family::tests::click_opens_dialog_and_arc_shift (tools)

Part of gap G11

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 13:38:04 +07:00
Cursor Agentandnrq6993-a11y fa3d6d9298 G11: open Arc tool options on canvas click (WIP)
Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 13:38:04 +07:00
BFlat 5013189fd3 Merge pull request #3524 from odgrim/fix/2160-x1a-flatten-keeps-cmyk-inks
PDF/X-1a and X-3: flattening keeps a CMYK document's inks where it rasterizes (#2160)
2026-10-22 12:44:27 +07:00
Brian TorresandClaude Opus 5.5 945fa338d0 PDF/X-1a and X-3: flattening keeps a CMYK document's inks where it rasterizes (#2160)
Exporting a CMYK document to PDF/X-1a or PDF/X-3 flattens transparency
first. Where the flattener has no single colour (an image with see-through
pixels over a flat fill, gradients, masks, raster effects) it renders the
area into an image, and that image was always an RGB PNG. The PDF writer
then separated it back to CMYK, so CMYK art behind the image came back with
other inks: a C100 M6 Y41 K3 panel printed C75 M14 Y35 K5 under a
transparent logo, with a hard edge against the rest of the panel, and K
moved into C, M and Y.

For files without transparency the flattener's images are opaque and
clipped to their regions anyway, so in a CMYK document it now draws them
as ink amounts over the paper (Renderer::render_region_inks) and stores a
CMYK TIFF, which the PDF writer keeps as DeviceCMYK samples. An area too
large for a CMYK image falls back to the PNG it made before. In-app
Flatten Transparency and other flattening, whose images keep alpha, are
unchanged.

Test: tests_pdfx::pdfx_1a_flattening_keeps_the_inks_behind_an_image_in_a_cmyk_document
exports a CMYK panel under a half see-through PNG to PDF/X-1a, opens the
file again and checks the inks behind the see-through half.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 12:32:05 +07:00
BFlat 5a258e4c73 Merge pull request #3523 from nrq6993-a11y/stream/vc-featD-g4-mixed-paragraph-composer
G4: Mixed paragraph composer menu checks
2026-10-22 12:22:48 +07:00
Cursor Agentandnrq6993-a11y 7fa5173962 G4: mixed paragraph composer menu checks
## Summary
When the Paragraph panel menu acts on multiple paragraphs with different composers (single-line vs every-line), neither composer item is checked, matching Illustrator mixed-value behaviour and the panel's other mixed fields (indents, alignment).

## Tests
- `paragraph_mixed_composer_checks_neither_menu_item` in `vectorcraft-ui-egui` paragraph panel tests.

Part of gap G4

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 12:11:07 +07:00
BFlat 379b033728 Merge pull request #3520 from dotCooCoo/fix/locate-library-checks-the-library-not-persistence
Library panels: Locate Library… reads a missing library whose panel isn't persistent
2026-10-22 11:41:31 +07:00
dotCooCoo de1182fbe3 Library panels: Locate Library… reads a missing library whose panel isn't persistent
ui.libraryPanel.locate decided whether a panel's library was missing
through missing_file, which answers only for a persistent panel. A
command that turns Persistent off leaves the panel open on its missing
library until the next drawn frame closes it, and while the window is
hidden the app draws no frame between control requests. Locate
Library… on that panel answered "isn't missing its library" and read
no file.

The check now asks whether the panel's library can be found, the
lookup the tab label and the per-frame tidy use. A panel whose library
is there is still refused, persistent or not.

window.swatchLibrary and window.graphicStyleLibrary had the same
check: given the library id of such a panel, they answered "no
library". They now bring the open panel forward and answer its file's
name with count 0; the panel still closes at the next tidy.

Docs: docs/mcp.md (ui.libraryPanel.locate, window.swatchLibrary).
2026-10-22 11:34:47 +07:00
BFlat 0834be2989 Merge pull request #3506 from nrq6993-a11y/stream/vc-feat1-3494-package-status-i18n
Fix #3494: translatable package status message
2026-10-22 11:34:23 +07:00
Cursor Agentandnrq6993-a11y fd8459592d Fix #3494: package status spacing without notes
## Summary
Package status notes are parenthetical fragments joined with spaces; templates without {note} are used when there are no missing links or skipped fonts, so folder paths are not followed by stray spaces or double gaps.

## Tests
- package_status_without_notes_has_no_extra_spaces
- package_status_message_templates_parse extended

Closes storytold/vectorcraft#3494

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:32:58 +07:00
BFlat ae13bd7dee Merge pull request #3518 from nrq6993-a11y/stream/vc-feat1-3395-acb-tab-filename
Fix #3395: color book library tabs use file name
2026-10-22 11:27:01 +07:00
Cursor Agentandnrq6993-a11y b14fa518fb Fix #3494: translatable package status message
## Summary
Package completion status and the show-folder prompt use i18n templates with
literal text between {folder} and {note}, so @msg rows parse and translate in
every locale (Illustrator-style localized status feedback).

## Tests
package_status_message_templates_parse; dialogs::tests_package; complete_languages_translate_every_message.

Closes storytold/vectorcraft#3494

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:22:56 +07:00
Cursor Agentandnrq6993-a11y 3d4d34fc15 Fix #3395: color book library tabs use file name
## Summary
Swatch library panels title imported and User Defined .acb color books from the file name (without the extension), matching Illustrator. Host temporary import paths still fall back to the book title when copying into the user library folder (#2996).

## Tests
- `color_book_tab_titles_use_the_file_name` covers user-folder scan, load by path, and copyToUser keeping the source file name.
- Existing `copying_a_color_book_from_a_temporary_path_uses_its_title` unchanged.

Closes storytold/vectorcraft#3395

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:17:31 +07:00
BFlat 15b041be81 Merge pull request #3502 from nrq6993-a11y/stream/vc-feat1-3455-home-reopen-focus
Fix #3455: Home recent reopen focuses existing document
2026-10-22 11:08:42 +07:00
Cursor Agentandnrq6993-a11y e4db022f49 Fix #3455: focus open tab from Home/Open Recent only
## Summary
Home › Recent Files and File › Open Recent switch to an already-open document tab instead of calling document.open again. document.open is unchanged for File › Open, MCP, and save-and-reopen tests.

## Tests
- home_recent_reopen_focuses_an_already_open_document (ui-egui)
- Removed engine open_same_path_activates_existing_document

Closes storytold/vectorcraft#3455

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:01:58 +07:00
Cursor Agentandnrq6993-a11y 11eb27b127 Fix #3455: Home recent reopen focuses existing document
## Summary
document.open with a path that is already open in another tab now activates
that document instead of reading the file again and opening a second window,
matching Illustrator Home › Recent Files when the file is already open.

The result includes activated: true; unsaved edits and the active tab are kept.

## Tests
open_same_path_activates_existing_document in cmd::fileio::tests.

Closes storytold/vectorcraft#3455

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:01:57 +07:00
BFlat e5b732baf5 Merge pull request #3512 from addibble/feat/ui-egui-ui-fonts-feature
UI: an embedder of the egui panels binds their font families without shipping their faces
2026-10-22 10:54:45 +07:00
BFlat 4137d6d286 Merge pull request #3277 from FractalEncrypt/fix/artboard-options-fit-presets
Add shared presets and artwork fitting to Artboard Options
2026-10-22 10:47:09 +07:00
Drew DibbleandClaude Opus 5.5 317ca00ccc UI: an embedder of the egui panels binds their font families without shipping their faces
The panels and dialogs draw in their own egui families (`ui`,
`ui-semibold`, `mono`), and egui panics drawing text in a family no
font is bound to. Only `theme::install_fonts` binds them, and only
`VectorcraftApp::logic` calls it, on its first frame. An embedder that
draws the panels or dialogs itself (`dialogs::show`, a panel's `ui`)
on its own context, without `logic`, panics on the first semibold
title it draws, an effect dialog's for one. Calling `install_fonts`
avoids that, but it embeds the interface's five faces (about 2 MB)
whatever the embedder wants: today such an embedder keeps them out of
its binary only by never calling it, so that the linker drops them.

vectorcraft-ui-egui gets an `interface-fonts` feature, on by default,
that embeds those faces. Without it `install_fonts` binds the same
three families to egui's built-in fonts, so an embedder can always
call it. Those lack some symbols the panels show (→ ▾ ● ✓), which the
docs say. With the feature, `install_fonts` installs exactly what it
did before: the same font data and the same family stacks.

`tests/install_fonts.rs` draws an effect dialog on a context only
`install_fonts` prepared, and checks the face at the head of each
family in both configurations. `cargo xtask ci`'s `no-bundled-fonts`
step runs it without default features and lints the crate that way.
Without the `install_fonts` call, or without the semibold binding,
both tests fail with egui's "FontFamily::Name(\"ui-semibold\") is not
bound to any fonts". The two lib tests about the interface faces are
adjusted: the graphics-loss test checks a family install_fonts binds,
and the catalogs' glyph coverage test needs `interface-fonts`.
docs/development.md says when an embedder calls `install_fonts`, and
that it replaces the context's font definitions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:46:06 +07:00
bflatastic 438c6194a6 Add shared presets and artwork fitting to Artboard Options
Squashed from #3277 onto main.
2026-10-22 10:40:37 +07:00
BFlat 56b7dc300d Merge pull request #3498 from nrq6993-a11y/stream/vc-feat1-3480-pattern-overlap-preview
Fix #3480: pattern edit preview honors Overlap stacking
2026-10-22 09:33:16 +07:00
Cursor Agentandnrq6993-a11y d792e7b2be Pattern edit preview: two dimmed copy groups around centre tile
Review feedback on #3498: dimmed neighbours share one opacity composite
before the centre tile and one after, preserving overlap paint order
without per-copy compositing.

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 09:23:27 +07:00
Cursor Agentandnrq6993-a11y e87534342b Fix #3480: pattern edit preview honors Overlap stacking
## Summary
In pattern editing mode, preview copies were drawn in row-major order and the
centre tile was always composited on top, so Pattern Options Overlap had no
visible effect when negative spacing made tiles overlap (as in Illustrator).
Preview copies now paint in the same order as tiled pattern fills.

## Tests
- vectorcraft-doc: preview_paint_order_respects_overlap

Closes storytold/vectorcraft#3480

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 09:23:27 +07:00