Commit Graph
5327 Commits
Author SHA1 Message Date
dotCooCoo 3dd6ee130f Merge main into fix/shortcut-optional-typed-params 2026-11-13 22:58:54 -08:00
dotCooCoo 1d8c38e37b Merge main into fix/nl-message-rows 2026-11-13 22:58:46 -08:00
dotCooCoo b4a7f106ac Merge main into fix/smooth-keeps-closed-start 2026-11-13 22:58:44 -08:00
dotCooCoo 780fbee2eb Merge main into feat/ai-import-kinsoku-settings 2026-11-13 22:58:23 -08:00
dotCooCoo 25ff56c0b6 Merge main into fix/live-shape-replay-negative-radius 2026-11-13 22:57:58 -08:00
ruchirguitar 71df7e0e6d #6613: apply approved Gujarati proofreading corrections 2026-11-14 12:20:13 +05:30
dotCooCoo 5f103e4bd6 Merge main into fix/plugin-unlinked-stop-plates 2026-11-13 22:47:32 -08:00
dotCooCoo 6e765f1848 Merge main into fix/dcs-placement-clip-keeps-file-clip 2026-11-13 22:47:26 -08:00
dotCooCoo ae05540f70 Merge main into feat/cjk-tsume 2026-11-13 22:46:57 -08:00
dotCooCoo cbdd3b4706 Merge main into fix/reflected-dimension-line 2026-11-13 22:46:36 -08:00
BFlat 2e9c9ab200 Merge pull request #7392 from dotCooCoo/fix/hindi-literal-values
i18n: messages keep bracketed field names and accepted values in English
2026-11-14 13:44:17 +07:00
BFlat 9ce826bc24 Merge pull request #7358 from dotCooCoo/feat/actions-button-mode
Actions: Button Mode shows actions as colored buttons that play on a click
2026-11-14 13:44:09 +07:00
BFlat 05409f76f5 Merge pull request #7394 from dotCooCoo/fix/ai-linked-image-warp
.ai save: a linked image with a Warp keeps its live Warp and its link
2026-11-14 13:44:00 +07:00
BFlat 44aebeba77 Merge pull request #7393 from dotCooCoo/fix/recovery-keeps-open-notes
Recovery: restoring documents keeps their linked-file lines and warnings
2026-11-14 13:43:52 +07:00
BFlat 6beeb9e2a4 Merge pull request #7262 from dotCooCoo/feat/smooth-cursor-without-path
Smooth: the cursor shows Not Allowed when no path is selected to smooth
2026-11-14 13:43:44 +07:00
BFlat 27f8cf90f5 Merge pull request #7351 from dotCooCoo/fix/titlebar-pref-note
Preferences: System Title Bar says when the desktop keeps the title bar either way
2026-11-14 13:43:36 +07:00
BFlat 2169e229f6 Merge pull request #7376 from dotCooCoo/fix/int-param-wrong-type
MCP: an integer given as a string or a fraction is refused as the wrong type, not reported as missing
2026-11-14 13:43:27 +07:00
BFlat ab959b95a8 Merge pull request #7369 from dotCooCoo/fix/ai-hidden-ruler-guide
.ai import: hidden ruler guides open as ruler guides with their own state
2026-11-14 13:43:11 +07:00
BFlat 18266da1e1 Merge pull request #7328 from dotCooCoo/fix/save-unused-option-notes
Save, Export for Screens: warnings name an option the file doesn't read
2026-11-14 13:42:55 +07:00
BFlat 0f88bb1fa9 Merge pull request #7372 from dotCooCoo/feat/home-learn-section
Home: a Learn section lists the tutorials and the Quick skill guide
2026-11-14 13:42:47 +07:00
BFlat 0ca2952093 Merge pull request #7363 from dotCooCoo/fix/stained-instance-export
Symbols: a stained instance keeps its stain in SVG, PDF and the other exports
2026-11-14 13:42:39 +07:00
BFlat aa5b635b32 Merge pull request #7388 from dotCooCoo/fix/snap-glyph-parametric-slice
Smart Guides: Parametric Shape and Slice tools snap as the drawing tools do
2026-11-14 13:42:31 +07:00
BFlat be93e4b3f2 Merge pull request #7377 from dotCooCoo/fix/symbol-expand-reset-bbox
Symbols: Break Link and Expand keep an instance's bounding box
2026-11-14 13:42:23 +07:00
BFlat 2a56e33953 Merge pull request #7355 from dotCooCoo/fix/cs-message-rows
i18n: Czech translates 1,813 of the status and error messages the untranslated report lists
2026-11-14 13:42:12 +07:00
dotCooCoo c69bd7cf49 Merge main into fix/de-missing-message-rows 2026-11-13 22:42:08 -08:00
dotCooCoo bb11ee6d4d Merge main into fix/art-brush-proportional-weight 2026-11-13 22:42:05 -08:00
BFlat 4b3df93745 Merge pull request #7371 from dotCooCoo/fix/batch-swatch-default-paint
Swatches: swatch steps in a batch change the paints for new art
2026-11-14 13:42:04 +07:00
BFlat 57933a8046 Merge pull request #7385 from dotCooCoo/fix/type-panels-story-wide
Type: Character and Paragraph panel changes apply to every frame of a selected story
2026-11-14 13:41:46 +07:00
BFlat 8cc8ab0781 Merge pull request #7352 from dotCooCoo/fix/zh-hant-message-rows
i18n: Traditional Chinese has a row for 1,813 of the messages the untranslated report lists
2026-11-14 13:41:36 +07:00
BFlat d8f180006a Merge pull request #7382 from ncic/pencil-alt-close-straight
Pencil: a closed stroke closes with a straight segment
2026-11-14 13:41:27 +07:00
dotCooCoo 8887806cb2 Undo: no step when Randomize Opacity or a type setting changes nothing
- addon.arrange.randomizeOpacity, type.orientation.vertical and .horizontal,
  type.opticalMarginAlignment, type.systemLayout and type.fractionalWidths
  run through edit_if_changed (the Edit Colors helper) and record an undo step
  only when an opacity, a direction or a setting changes.
- A test for each command; the params text says so, and docs/mcp.md for the
  commands it describes.
2026-11-13 22:40:01 -08:00
dotCooCoo 019f604e91 Artwork Cleanup: text tools act on the locked or hidden type ids name
Remove Breaks, Break Text, Combine Point Text, Join Point Text, Set
Alignment, Keep Position and Reset Text Transform skipped locked and
hidden type even when `ids` named it, or named the group or layer
holding it, while other commands such as text.convertListToText act on
named locked or hidden objects.

- With `ids`, the type they name is taken locked or hidden too (not
  type on a locked artboard); from the selection, only type that can
  be edited, as before.
- Remove Breaks reads a named threaded story with a locked frame as one
  text.
- Objects made from locked or hidden type are not selected.

Docs: docs/mcp.md (Text tools), docs/target-app-parity.md.
2026-11-13 22:38:38 -08:00
dotCooCoo d1bd70fba9 Merge main into feat/colr-gradient-repeat 2026-11-13 22:37:59 -08:00
dotCooCoo fc14b8a78f EPS: a freeform gradient's image drawn more than once writes its samples once
A freeform gradient's image was sampled, encoded and written inline at
every fill, outside the reuse placed images have. Fields now go through
the same codes and placements: a fill whose encoded image (color setup,
image dictionary, filter, operator and samples) matches one already
kept draws from it, so its samples are written once in the setup as
VCim<i>. A field drawn once is still written where it is drawn.

A fill whose placement can't be drawn, or that arrives when the page is
already at the 256 MB limit, is no longer sampled first, and a field
image taken back with art that passed the limit is forgotten.
2026-11-13 22:34:26 -08:00
dotCooCoo 9685e1e312 Merge main into fix/mcp-docs-stack-file 2026-11-13 22:33:56 -08:00
dotCooCoo bb81d0d8b3 Merge main into feat/ai-art-brush-options 2026-11-13 22:33:50 -08:00
dotCooCoo 96d5cd78a9 Revolve: overlapping faces draw in the order of their depths where they overlap
Revolve sorted its faces by the depth of each face's middle only, so a
tilted profile with long edges, or a profile of several contours, could
draw a nearer face under a farther one where the two overlap.

- A revolved face carries its view-space plane (none when its corners lie
  off one plane or reach the eye), and Revolve (Classic)'s facets keep it.
- Revolve and Revolve (Classic) put each surface's faces through the local
  depth order Extrude & Bevel uses for its fill and strokes: when two
  overlapping faces are drawn the wrong way round, every pair of
  overlapping faces goes in the order of their depths at the middle of the
  overlap, within the same 4,000,000-comparison limit. A surface already
  in the right order keeps it.
- A group's members, sorted together by depth, go through the same order
  across members.

Docs: docs/revolve.md, docs/effects-parity.md, docs/target-app-parity.md.
2026-11-13 22:32:34 -08:00
dotCooCoo 5a4020a6c0 Graphs: graphic styles leave a design's art in a series unlinked
graphicStyle.new linked the object it was made from, the art of a column
or marker design in a graph series included, and graphicStyle.redefine
gave the new look to every object still linked to the style. Redefining
the style from another object then restyled that art, which the graph
draws again from the design.

- graphicStyle.new makes a style from the art without linking it.
- graphicStyle.redefine leaves the art's look as it was and unlinks it,
  as an edited object is, whether the art is a linked object (as in a
  document saved before this change) or the source.

Docs: docs/mcp.md, the params text of graphicStyle.new and
graphicStyle.redefine.
2026-11-13 22:27:58 -08:00
dotCooCoo 58bc03a3e7 Gradient tool: a vector drawn on the art snaps as other drawn points do
A gradient vector drawn on the art, a click that applies one, and the
dragged start and end handles snapped through snap_draw, which gathers
the bounds and anchors of the art only. Path segments, View › Snap to
Glyph's guides and the construction guides through the vector's start
did not pull them, and a click applied the gradient from the pointer
rather than from the snapped point. They now snap through DrawSnap, as
the Pen and Line Segment tools do:

- The press gathers the targets, for a vector drawn on the art and the
  start and end handles only, and the drag keeps them. A click applies
  the gradient from the snapped press.
- A dragged end or handle leaves its start as a Line Segment's end does:
  it lands on the construction guides through the start, and with Shift
  it keeps to 45° steps from the Constrain Angle and snaps along them.
- The pointer hovering where a press would draw a vector (anywhere with
  art selected, over art with nothing selected), and not over the
  annotator, shows the guides of the point the vector would start on.

A press that snaps onto a nearby target no longer starts the drag
early: the 3 px drag threshold counts from where the pointer was
pressed, not from the snapped start.
2026-11-13 22:25:34 -08:00
dotCooCoo 380b67f1bc Command Palette: Delete Selection asks first, as the Layers panel does
The palette listed the Layers panel's Delete Selection twice: as
Window › Layers › Delete Selection, which ran layer.delete and deleted a
layer holding art without asking, and as a bare Delete Selection, which
ran ui.layerDelete and asked first.

- The palette now lists one Window › Layers › Delete Selection result,
  which runs ui.layerDelete, so a pick asks before deleting a layer or
  sublayer that holds art. Scripts and the control channel still run
  layer.delete at once.
- New Brush…, Brush Options…, Symbol Options…, Import SVG Filter… and
  Convert to Text were also listed twice under the same name, once as
  the engine command, which the palette ran with no params. Each is now
  listed once, as the UI command that opens its dialog or file chooser
  or acts on the edited paragraphs.
- A search for a wrapped engine command's id or menu path still finds
  the one result.

Docs: docs/target-app-parity.md (Layers panel deletion).
2026-11-13 22:23:25 -08:00
dotCooCoo 70da63f5b0 Merge main into fix/polygon-sides-refused 2026-11-13 22:23:24 -08:00
dotCooCoo a008a0d68e SVG import: a nested tspan keeps its direction and unicode-bidi
A <tspan>, <textPath> or <a> inside a <text> whose unicode-bidi is embed
now gives its characters its direction as their Character Direction. An
element with normal stays in its parent's embedding, unicode-bidi is not
inherited (inherit takes the parent's value), and the <text> keeps its
own paragraph direction. A run that SVG export writes with direction and
unicode-bidi="embed" now opens with its Character Direction again.

Character Direction holds one level of embedding and no override or
isolation, so bidi-override, isolate and isolate-override are imported
as embeddings in their direction, plaintext as an embedding in the
direction of its first strong character, and an embedding inside
another as an embedding of its own, each with an import warning.
unicode-bidi: plaintext on the <text> runs and anchors each paragraph
in the direction of its first strong character.

https://www.w3.org/TR/SVG11/text.html#RelationshipWithBi-directionality
https://www.w3.org/TR/css-writing-modes-3/#unicode-bidi
2026-11-13 22:21:42 -08:00
dotCooCoo a5a67f8c4d EPS: a test covers type taken back with its color bitmap glyph images
Type whose color bitmap glyphs fit under the page limit, but whose run
fill passes it, is left out together with the image placements of its
glyphs. The new test builds the color font in memory and checks that
the page then equals the page without that type: no reference or shared
resource is left for the glyph image, a glyph drawn once elsewhere is
written inline again, and an image drawn twice keeps its shared samples.
2026-11-13 22:18:45 -08:00
dotCooCoo 2a4185d6ca Merge main into fix/graph-series-gradient-per-mark 2026-11-13 22:15:43 -08:00
dotCooCoo bc6c48367e Merge main into fix/knockout-groups-flat-masks 2026-11-13 22:15:33 -08:00
dotCooCoo 387b3a52eb Merge main into fix/i18n-literal-brace-messages 2026-11-13 22:11:11 -08:00
dotCooCoo 3341061ca3 i18n: Simplified Chinese translates 114 status and error messages that no catalog had
untranslated_report lists 167 status and error messages that no
complete-message catalog translates. zh-hans.tsv gains 114 @msg rows for
the ones no open pull request covers: 3D and Revolve limits, image export
and encoding errors, color profiles, color books and swatch exchange
files, binary DXF and DWG import, path operations, swatch, graphic style
and action set libraries, and zip, script and regular expression errors.
Placeholders, backticked names, command ids and listed values stay as the
English writes them.

The other 53 (composite fonts, SVG filters, read roots and graph design)
are left to #7211, #7378 and #7405. docs/localization-parity.md and
docs/target-app-parity.md give the new counts: 3,554 @msg rows, and 55
messages the report lists for zh-hans, all of them translated by open
pull requests.
2026-11-13 22:11:05 -08:00
dotCooCoo 5d89b37040 Paste: graphs bring and follow the styles and swatches their labels keep
A graph keeps paints for its series and labels, and character and
paragraph style names for its labels, which each redraw gives the
marks and labels. Copy did not follow them, so a graph pasted into
another document left those swatches and styles behind, and a paste
that renamed them left the graph pointing at the old names.

Copy now collects them and paste relinks them, as it does for type.
Paste without Formatting drops the labels' style names, so it still
leaves text styles behind.
2026-11-13 22:10:18 -08:00
dotCooCoo 82842e4fe0 Clipboard: a Wayland read or send ends when the other app moves no data for 2 s
On the core Wayland clipboard, a read waited for the app that copied to
close its pipe, and a send wrote until the app that pastes took all of
the data. An app that left its pipe open and stopped held the one read
worker, so later pastes failed at once, or held one of the eight send
threads until it closed its end.

Reads and sends now use the pipe nonblocking and wait for it with poll.
When no byte moves for 2 s (VectorCraft's own limit, the existing text
wait) the read fails without pasting partial data and the send stops;
both close their pipe. The wait starts again after each byte that moves,
so a large transfer that keeps going is not cut short.
2026-11-13 22:09:17 -08:00
dotCooCoo 6c26233a63 Clipboard: quitting on Linux takes every window off screen before the clipboard wait
Quitting can wait up to 27 s for the clipboard handles to let go before
eframe closes the windows. winit cannot hide a native Wayland window, so
the main window stayed on screen for that wait, and the X11 windows of
floating panels and documents were not hidden at all.

- A native Wayland main window is unmapped by attaching no buffer to its
  surface. The window and its connection stay open for the Wayland
  clipboard. An X11 main window, XWayland included, is hidden as before.
- On Linux the X11 windows of floating panels and documents are recorded
  as eframe creates and drops them (viewport hooks), and quitting unmaps
  them through a second X11 connection before the wait.
- The new module apps/vectorcraft/src/quit_windows.rs replaces
  app::hide_before_teardown, with tests of which windows are hidden or
  unmapped. portal_save's Wayland surface helper is shared with it.
2026-11-13 22:02:56 -08:00