Commit Graph
7181 Commits
Author SHA1 Message Date
BFlat 3b5fa80be3 Merge pull request #5060 from storytold/fix/artboard-panel-reorder-4687
Fix #4687: the Artboards panel reorders artboards by dragging a row
2026-11-01 10:32:11 +07:00
bflatastic 9b9f0918f0 Fix #4687: the Artboards panel reorders artboards by dragging a row 2026-11-01 10:17:29 +07:00
BFlat 42b07e35e3 Merge pull request #5022 from mockydevs/feat/export-all-open-4920
Fix #4920: Document Tools exports every open document
2026-11-01 09:38:50 +07:00
BFlat 03d54404c2 Merge pull request #5050 from dotCooCoo/fix/ai-unread-object-keeps-layers-r
.ai import: one object the reader can't read comes in as the page's art, and the layers stay
2026-11-01 09:38:34 +07:00
BFlat b359a7a63d Merge pull request #4949 from dotCooCoo/fix/eyedropper-blend-envelope
Eyedropper: Shift-click samples a blend's steps and an envelope's distorted art
2026-11-01 09:38:18 +07:00
BFlat 50113ea99a Merge pull request #5044 from dotCooCoo/feat/knife-straight-cut-smart-guides
Knife: a straight cut's ends snap to the anchors and paths Smart Guides snap to
2026-11-01 09:38:04 +07:00
BFlat a17ba4e304 Merge pull request #5045 from dotCooCoo/fix/doc-cfb-fuzz
Tests: .doc import fuzzing also damages the compound-file container
2026-11-01 09:37:49 +07:00
bflatastic 2d95cd667b Document Tools: catalog rows for Export All Open Documents, and its failure message as one translatable message 2026-11-01 09:24:25 +07:00
Don Omondi 1e8ac2434c Fix #4920: Document Tools exports every open document
addon.document.exportAllOpen {folder, format?} writes a copy of every
open document to one folder as Save a Copy does, each named after its
document with taken names numbered so no file is replaced. Documents
keep their paths and modified state, the active one stays active, and a
document that can't be written is reported while the others are still
written. Object > Plug-ins > Document Tools gets Export All Open
Documents as PDF and as SVG, which ask for the folder.
2026-11-01 09:24:25 +07:00
dotCooCoo 18b9c6113e .ai import: one object the reader can't read comes in as the page's art, and the layers stay
Squashed from #5050 onto main.
2026-11-01 09:24:23 +07:00
dotCooCoo 8362b7532c Eyedropper: Shift-click samples a blend's steps and an envelope's distorted art
Squashed from #4949 onto main.
2026-11-01 09:24:18 +07:00
dotCooCoo b253356b4d Knife: a straight cut's ends snap to the anchors and paths Smart Guides snap to
Squashed from #5044 onto main.
2026-11-01 09:24:13 +07:00
dotCooCoo c38607a5ae Tests: .doc import fuzzing also damages the compound-file container
A new text_import_fuzz case builds a valid Word 97-2003 document (version
3 or 4 compound file, its streams in the mini stream or in FAT sectors),
checks that it places, and then damages the container itself: header
fields, the sector and mini sector shifts, FAT and mini FAT entries,
directory entry fields and stream sizes, single bytes, and truncation.

Session::execute turns a panic into EngineError::Internal, so the cases
in this file did not fail when an import panicked. They now go through
no_panic, as import_fuzz.rs does.
2026-11-01 09:24:09 +07:00
BFlat 58e98510d1 Merge pull request #5048 from storytold/feat/expand-dashes-4922
Fix #4922: Expand Dashes into Paths
2026-11-01 09:23:32 +07:00
BFlat 50228cd6fd Merge pull request #5047 from storytold/feat/glyphs-highlight-4908
Fix #4908: Glyphs panel highlights the selected character
2026-11-01 09:23:16 +07:00
bflatastic 84336967aa Fix #4922: Expand Dashes into Paths 2026-11-01 09:08:07 +07:00
bflatastic 317423c514 Fix #4908: Glyphs panel highlights the selected character 2026-11-01 09:08:04 +07:00
BFlat 209e66d01a Merge pull request #5019 from dotCooCoo/feat/grid-drag-divider-skews
Grid tools: F, V, X and C change the divider skews by 10 while a grid is dragged out
2026-11-01 08:49:00 +07:00
BFlat b07e13876d Merge pull request #5021 from dotCooCoo/feat/live-paint-bucket-options
Live Paint: Live Paint Bucket Options set what a click paints and the highlight
2026-11-01 08:48:45 +07:00
BFlat 7ee6fb9ebc Merge pull request #5020 from dotCooCoo/feat/standard-vertical-roman-alignment
Type: Standard Vertical Roman Alignment stands half-width characters upright in vertical type
2026-11-01 08:48:33 +07:00
BFlat 0bf3ac5f2f Merge pull request #5018 from dotCooCoo/fix/pdf-perceptual-gradient-spot-ink
PDF export: a Perceptual gradient of one spot ink's tints keeps its ink
2026-11-01 08:48:19 +07:00
BFlat 028a602665 Merge pull request #5010 from dotCooCoo/fix/opacity-mask-layer-on-top
Transparency: a layer on top gives its topmost object as the opacity mask
2026-11-01 08:48:04 +07:00
217c01836b ci(xtask): print the i18n report without recompiling the workspace (#5001)
* ci: i18n report without a rebuild; PR print runs stop saving caches

- xtask ci: the i18n report selects the whole workspace as the test stage did. With
  `-p vectorcraft-ui-egui` alone cargo resolved features differently and recompiled for about
  3.5 minutes. `cargo xtask i18n-report` on its own still builds only that crate.
- print.yml: only main saves the desktop-print cache. Each PR saved its own 1.3 GB cache that
  only that PR can read (6.3 GB across five PRs), pushing the repository past its 10 GB limit
  and evicting caches main's gate restores.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci(xtask): i18n report selects the test run's targets too

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

The test run builds --lib --bins --tests; a binary target's dependencies (the desktop app's
eframe features) could still resolve differently under --lib alone. Match the selection
exactly, and drop --quiet so a rebuild would show in the log.

* ci: leave print.yml unchanged

print.yml still runs its own jobs, and CLAUDE.md (CI workflows) keeps additions out of such files.
The cache churn it causes goes to craft-common-actions instead. This PR is now the xtask change only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: FredApps <FredApps@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 02:47:50 +01:00
BFlat 575545378c Merge pull request #5014 from dotCooCoo/fix/shortcut-backtick-macos
Tests: the backtick menu test passes on macOS
2026-11-01 08:47:37 +07:00
dotCooCoo d72022daf5 Grid tools: F, V, X and C change the divider skews by 10 while a grid is dragged out
Squashed from #5019 onto main.
2026-11-01 08:33:02 +07:00
dotCooCoo f07b9ab765 Live Paint: Live Paint Bucket Options set what a click paints and the highlight
Double-clicking the Live Paint Bucket did nothing, and the tool always
filled on a click, stroked on Shift-click and highlighted in red at
4 px. It now opens Live Paint Bucket Options with Paint Fills, Paint
Strokes, Highlight, Color and Width.

- Paint Fills (on) and Paint Strokes (off) set what a click paints.
  With Paint Strokes alone, a click strokes the edge within 4 px of the
  pointer. With both on, a click strokes an edge within 4 px and
  otherwise fills the face. With both off, a click paints nothing.
- Shift switches Paint Fills alone to Paint Strokes alone and back, and
  switches both to Paint Fills alone. With the defaults, Shift-click
  strokes the edge as before.
- Highlight turns the outline of the face or edge under the pointer on
  or off; Color (a layer color or a custom color) and Width (1 to 20 px)
  set it. With Paint Strokes alone, a selection of ordinary paths no
  longer highlights a region, since a click there paints nothing.
- The options are tool options (tool.setOption {tool:
  "livePaintBucket"}): they last across tool switches and are saved
  with the preferences.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-01 08:32:57 +07:00
dotCooCoo ece78f052f Type: Standard Vertical Roman Alignment stands half-width characters upright in vertical type
Character panel menu > Standard Vertical Roman Alignment, with Show East
Asian Options, is now a check item. It sets a new character attribute,
`standardVerticalRoman` (text.setFormat, text.setRangeStyle), off by
default and saved only when on. In vertical type the marked Latin
letters, digits and other characters that would lie on their side stand
upright one below the other, each in its upright cell. Spaces keep their
width and tate-chu-yoko blocks stay across the column. Horizontal type
keeps the mark and does not change. A combining mark shaped as its own
glyph turns with its letter, in Latin and CJK upright type alike.

Character Style Options labels the Character Alignment row "Character
Alignment" and gives Standard Vertical Roman Alignment its own checkbox.
Reset Panel turns the attribute off. PDF and SVG export place the glyphs
from the layout and need no change.
2026-11-01 08:32:55 +07:00
dotCooCoo ac896cfe3d PDF export: a Perceptual gradient of one spot ink's tints keeps its ink
A Perceptual linear or radial gradient was always written as an image,
so a gradient of spot ink tints lost its plate, and no warning named the
spot ink.

PDF export now writes a Perceptual gradient whose stops are tints of one
spot color (and paper white) as a Separation shading in that ink. Its
tints follow the gradient's curve: at each stop the renderer places on
the curve, the tint with the OKLab lightness of the color there.

Dithered fills, freeform gradients and Perceptual gradients that mix a
spot color with other colors are still images, and the export now warns
when such a gradient has stops linked to a spot swatch that its spot
colors are written in process colors.
2026-11-01 08:32:54 +07:00
dotCooCoo 482c011233 Transparency: a layer's art on a locked artboard or in a hidden or locked parent is not taken for an opacity mask
Make Opacity Mask expands a layer among its targets to the art that can
be edited: an object in a sublayer of a hidden or locked layer, or on a
locked artboard, is neither the mask nor masked, so it stays where it is.
2026-11-01 08:32:54 +07:00
dotCooCoo d0834e6834 Transparency: a layer on top gives its topmost object as the opacity mask
Make Opacity Mask took the topmost target as the mask. When that target was
a layer (a targeted layer above the art, or `ids` ending in a layer id), the
whole layer was removed from the layer tree and became the mask art. A layer
on top now stands for its visible, unlocked art, as a layer below the mask
already does: its topmost object is the mask and the rest of its art is
masked with the art below. A top layer with no such art is refused and the
document is left unchanged.
2026-11-01 08:32:54 +07:00
FredAppsandClaude Opus 5.5 b0294122e8 ci: leave print.yml unchanged
print.yml still runs its own jobs, and CLAUDE.md (CI workflows) keeps additions out of such files.
The cache churn it causes goes to craft-common-actions instead. This PR is now the xtask change only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 08:32:53 +07:00
FredApps 123e770e41 ci(xtask): i18n report selects the test run's targets too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

The test run builds --lib --bins --tests; a binary target's dependencies (the desktop app's
eframe features) could still resolve differently under --lib alone. Match the selection
exactly, and drop --quiet so a rebuild would show in the log.
2026-11-01 08:32:53 +07:00
FredAppsandClaude Opus 5.5 2f26d4012b ci: i18n report without a rebuild; PR print runs stop saving caches
- xtask ci: the i18n report selects the whole workspace as the test stage did. With
  `-p vectorcraft-ui-egui` alone cargo resolved features differently and recompiled for about
  3.5 minutes. `cargo xtask i18n-report` on its own still builds only that crate.
- print.yml: only main saves the desktop-print cache. Each PR saved its own 1.3 GB cache that
  only that PR can read (6.3 GB across five PRs), pushing the repository past its 10 GB limit
  and evicting caches main's gate restores.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 08:32:53 +07:00
dotCooCoo 6b4ced2b96 Tests: the backtick menu test passes on macOS
menus_and_tooltips_show_the_backtick_key_as_it_types put Edit › Clear on Cmd+~.
craft-keymap reserves Cmd+` on macOS, so the override is refused there and
the menu kept Delete. The test now uses Alt+~, which no platform reserves.
2026-11-01 08:32:52 +07:00
BFlat 6d3d5ad1a2 Merge pull request #5017 from storytold/feat/sort-objects-4917
Fix #4917: Sort Objects sorts the selection by one attribute and applies that order to another
2026-11-01 08:25:50 +07:00
BFlat 9a8a885498 Merge pull request #5016 from storytold/feat/randomize-opacity-4925
Fix #4925: Randomize Opacity gives each selected object a random opacity in a range
2026-11-01 08:25:34 +07:00
bflatastic cd277d5d84 Fix #4917: Sort Objects sorts the selection by one attribute and applies that order to another
Squashed from #5017 onto main.
2026-11-01 08:11:17 +07:00
bflatastic ef80709e16 Fix #4925: Randomize Opacity gives each selected object a random opacity in a range 2026-11-01 08:07:33 +07:00
BFlat 5a9a14fdbd Merge pull request #4975 from VladimirCeric/serbian-croatian
Languages: Serbian (Cyrillic, Latin) and Croatian, with their quote marks
2026-11-01 07:57:43 +07:00
BFlat 6ca5656c31 Merge pull request #5007 from mockydevs/feat/symbols-select-unused-4918
Fix #4918: Symbols panel Select All Unused
2026-11-01 07:57:26 +07:00
bflatastic 7d0c0b589e docs: type-parity keeps one status line and one revision row for the Serbian and Croatian languages after the rebase 2026-11-01 07:38:03 +07:00
VladimirCericandClaude Opus 5.5 13dd4f9086 Languages: keep other apps' names out of the comments and docs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wCJ9DkszhZKxYL3LgcSfZ
2026-11-01 07:38:03 +07:00
VladimirCericandClaude Opus 5.5 d440b6d32b Languages: cite the quote sources (Pravopis ISBN, CLDR links)
From the CodeRabbit review: the Serbian and Croatian quote marks name
their sources with the Pravopis's ISBN and links to CLDR's sr and hr
data, in the code and in docs/type-parity.md; the quotes test says what
it checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wCJ9DkszhZKxYL3LgcSfZ
2026-11-01 07:38:03 +07:00
VladimirCericandClaude Opus 5.5 c492d524c5 Languages: Serbian (Cyrillic, Latin) and Croatian, with their quote marks
Document Setup and Character › Language list Serbian: Cyrillic (sr-Cyrl),
Serbian: Latin (sr-Latn) and Croatian (hr). Text tagged Serbian is shaped
in it (#4940, #4959), so fonts draw their Serbian forms, the italic б,
г, д, п, т. Serbian quotes follow the Pravopis (Matica srpska 2010,
т. 168) and CLDR: „…” and ’…’; Croatian per CLDR: „…“ and ‚…‘.
Illustrator lists Croatian but not Serbian.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wCJ9DkszhZKxYL3LgcSfZ
2026-11-01 07:38:03 +07:00
bflatastic 3d8677a71a Symbols: catalog rows for deleting several symbols and for no unused symbols 2026-11-01 07:38:02 +07:00
Don Omondi 961694cba6 Fix #4918: delete nested picks safely, keep picks per document
symbol.delete {names} expands every instance of the named symbols,
round by round, before it removes any definition, so a symbol and the
one placed inside it delete alike in either order. The Symbols panel's
picks belong to the document they were made in, and a single picked
symbol is deleted only while symbol.unused still lists it.
2026-11-01 07:38:01 +07:00
Don Omondi 5b639169cd Fix #4918: Symbols panel Select All Unused
symbol.unused lists the symbols nothing places: instances in the art
(opacity masks included), graph designs, pattern tiles and brush art
count, and so do instances in a used symbol's art. The Symbols panel
menu's Select All Unused shows them selected, and Delete Symbol asks
once and deletes those still unused in one undo step
(symbol.delete {names}).
2026-11-01 07:38:01 +07:00
BFlat 1c0ca5a26b Merge pull request #5002 from dotCooCoo/fix/status-messages-plural-counts
i18n: link, font and export status messages use real plural forms instead of "(s)"
2026-11-01 07:37:27 +07:00
BFlat 0335900ea7 Merge pull request #5006 from dotCooCoo/feat/opentype-panel-alternates
OpenType: the panel turns Stylistic and Titling Alternates on and off, and offers Proportional Lining figures
2026-11-01 07:37:10 +07:00
BFlat c460be8505 Merge pull request #5008 from dotCooCoo/feat/place-word-doc
Place: Word 97-2003 .doc files place as area type with their formatting
2026-11-01 07:36:58 +07:00