Commit Graph
7958 Commits
Author SHA1 Message Date
Don Omondi 4f60ee47e8 Fix #2920: an open path in a PDF-compatible .ai opens as drawn
Squashed from #4616 onto main.
2026-11-04 10:25:55 +07:00
BFlat d41fc3b9b0 Merge pull request #5489 from storytold/fix/control-junk-test-reset
Control server: the junk-closes test leaves no unread input
2026-11-04 10:14:05 +07:00
BFlat c104ed9a9d Merge pull request #5488 from dotCooCoo/fix/action-record-command
Add command to begin recording Actions
2026-11-04 10:13:49 +07:00
BFlat aecf94f8d1 Merge pull request #5486 from dotCooCoo/fix/ai-page-mismatch-keeps-layers-2
.ai import: objects that draw differently from the page come in as its art, and the layers stay
2026-11-04 10:13:34 +07:00
BFlat c48404b9cf Merge pull request #5480 from dotCooCoo/feat/taskbar-type-on-path
Contextual Task Bar: type on a path offers Type on a Path Options
2026-11-04 10:13:19 +07:00
BFlat db1afa01c8 Merge pull request #5479 from dotCooCoo/fix/font-same-skips-unreachable-type
Select: the font Same commands take their reference from type that can be selected
2026-11-04 10:13:04 +07:00
bflatastic 821757acef Control server: the junk-closes test leaves no unread input
On Windows, closing a socket with unread input resets the connection, and
the reset can discard the reply before the client reads it, so the test
failed under load. The request after junk is still covered by the
in-memory tests.
2026-11-04 09:43:38 +07:00
dotCooCoo b5c69e25fd Add command to begin recording Actions 2026-11-04 09:43:35 +07:00
dotCooCoo 5e495cf900 .ai import: objects that draw differently from the page come in as its art, and the layers stay
When the layers fail the comparison with the file's own page because some objects draw
differently (an object in another color, or one that only one side draws), the import finds
each top-level object whose bounds hold a patch of such pixels (the smallest one that holds it)
and replaces it with the page's art in its bounds, in the same way as an unread object. It then
compares the layers with the page again. When that comparison passes, the layers stay, and a
warning names the layer or sublayer of each replaced object (`<Layer>` for one without a name)
and how many were replaced on it. Like the warning for unread objects, this warning counts as
a loss, so an export or Save As to the file's own path needs `acknowledgeLoss: true`. A
replaced wrap object keeps its wrap options, and area type is wrapped again around the page's
art. Placed files at their other placement are tried too when the first placement can't be
kept.

The file still comes in as its PDF part, with the same reason, when only edges or type differ,
when a difference lies outside every top-level object, when more than half of the top-level
objects (or more than 64) hold one, when such an object is or holds type or holds a wrap object
inside a group, when the page's type of a text object that stays would be copied into a
replacement, when the page's art can't replace an object for the reasons it can't replace an
unread one, when matching the differences to the objects would take too much work, or when the
second comparison still fails. Trusting the editing data keeps the objects as read.
2026-11-04 09:43:28 +07:00
dotCooCoo 8cf4b90a65 Contextual Task Bar: type on a path offers Type on a Path Options
The task bar offered no Type on a Path item for a selected type on a
path: of the type actions, it showed only Create Outlines. It now also
offers Type on a Path Options, which opens the same dialog as Type ›
Type on a Path › Type on a Path Options, with the selected type's
effect, alignment and spacing filled in. Point and area type keep
their Convert To Area Type and Convert To Point Type buttons.
2026-11-04 09:43:25 +07:00
dotCooCoo 7fe42986c2 Select: the font Same commands take their reference from type that can be selected
Select > Same > Font Family, Font Family & Style, Font Family, Style & Size,
Font Size and the text fill and stroke color commands took the type to match
from the first type found among the selected objects. Type that is hidden or
locked inside a selected group, type on a template layer and type outside the
isolated group could set the reference. They now take it from the type that
Link Block Series starts from, in the same selection order. A selection whose
only type cannot be selected returns "select a text object".
2026-11-04 09:43:21 +07:00
BFlat b0f39b7579 Merge pull request #5461 from dotCooCoo/feat/arrange-e
Window: New Window opens a second view of the current document
2026-11-04 09:21:39 +07:00
BFlat 2ac2ac0926 Merge pull request #5449 from storytold/about-credits-columns
About: credits tables fit without side-scrolling and their columns resize
2026-11-04 09:21:24 +07:00
BFlat 2ac542d6b5 Merge pull request #5453 from FrancoJacquet/fix/stroke-set-unknown-keys
Check stroke.set params: a misnamed key is refused (#1442)
2026-11-04 09:20:54 +07:00
BFlat 15690df5a1 Merge pull request #5470 from vangel76/perf/trace-parallel-component-fit
Image Trace: fit the components of a layer in parallel, in chunks (#5464)
2026-11-04 09:20:34 +07:00
BFlat 1af19f722c Merge pull request #5469 from vangel76/perf/trace-all-within-hasher
Image Trace: all_within hashes its grid cells with a small hasher (#5463)
2026-11-04 09:20:19 +07:00
BFlat 52fc5424a7 Merge pull request #5467 from vangel76/perf/trace-denoise-union-find
Image Trace: noise removal keeps its regions in u32 arrays (#5462)
2026-11-04 09:20:05 +07:00
BFlat ae5f581615 Merge pull request #5458 from vangel76/perf/5454-trace-smooth-weight-table
Trace: look up the smoothing weights instead of computing them per pixel (#5454)
2026-11-04 09:19:50 +07:00
BFlat 9705a6056c Merge pull request #5441 from storytold/fix/sec-linear-scans-r7
Linear-time scans: Add Anchor Points, swatch library adds, export placements, width profiles, symbolism previews
2026-11-04 09:19:35 +07:00
BFlat c93fe25666 Merge pull request #5460 from vangel76/perf/5455-offset-spurious-check
Offset Path: skip far segments and stop early in the spurious-contour check (#5455)
2026-11-04 09:19:21 +07:00
BFlat 25fd04c0d8 Merge pull request #5474 from vangel76/fix/pathops-input-hardening
Path booleans: refuse out-of-range input, guard the contour pass, cuts report refusals (#5465)
2026-11-04 09:19:06 +07:00
BFlat 599baf89fe Merge pull request #5443 from storytold/fix/sec-bounded-flatten-print
Bound work: flattening of huge curves, print layout past the page limit, script-check file names
2026-11-04 09:18:50 +07:00
BFlat 36315a2f0e Merge pull request #5437 from ruchirguitar/fix/5369-activation-follow-ups
Opening an already-open file: close Home, check read roots, wait for dialogs (#5369 follow-ups)
2026-11-04 09:18:39 +07:00
BFlat f3fed07f4a Merge pull request #5471 from dotCooCoo/fix/ai-save-option-errors
.ai save: errors and notes name the legacy or non-PDF-compatible .ai
2026-11-04 09:18:23 +07:00
BFlat ba9038cbfa Merge pull request #5466 from dotCooCoo/feat/dxf-lines-and-arcs-as-bulged-polylines
DXF: paths of lines and circular arcs export as polylines with bulges
2026-11-04 09:18:07 +07:00
BFlat 43f01fe230 Merge pull request #5472 from dotCooCoo/fix/projective-conjugated-scale-invariant
Geometry: inverses and conjugates by small affines are no longer refused
2026-11-04 09:17:53 +07:00
BFlat 88ff58b081 Merge pull request #5428 from dotCooCoo/fix/effect-dialog-compound-target
Read compound effects when opening effect dialogs
2026-11-04 09:17:39 +07:00
BFlat f563cb8b5d Merge pull request #5440 from dotCooCoo/fix/photocraft-app-paths-unicode
Edit Original: read PhotoCraft's App Paths entry as UTF-16 on Windows
2026-11-04 09:17:24 +07:00
BFlat 75ab8ecd7e Merge pull request #5438 from dotCooCoo/fix/measure-shift-keeps-step
Measure tool: Shift keeps the end on the pointer's step after the grid rounds it
2026-11-04 09:17:09 +07:00
BFlat 56ca3a7375 Merge pull request #5432 from dotCooCoo/fix/dimension-drop-placement
Keep dropped placement presses from creating dimensions
2026-11-04 09:16:53 +07:00
BFlat 5cb5ed1dd1 Merge pull request #5434 from dotCooCoo/fix/blend-drop-pick
Keep Blend reset after a dropped press
2026-11-04 09:16:39 +07:00
BFlat 3d5755da94 Merge pull request #5435 from dotCooCoo/fix/mcp-docs-own-wording
Docs: replace quoted help-page sentences with plain statements
2026-11-04 09:16:23 +07:00
BFlat 32a5b20b71 Merge pull request #5433 from dotCooCoo/fix/actions-doc-wording
Use original wording for Action Options documentation
2026-11-04 09:16:13 +07:00
BFlat 84303c7ad2 Merge pull request #5452 from dotCooCoo/fix/gdef-caret-formats
Resolve GDEF contour-point ligature carets
2026-11-04 09:15:58 +07:00
BFlat 399204566a Merge pull request #5468 from dotCooCoo/fix/vertical-path-upright-hit
Type: the stop inside an upright ligature on a vertical path follows its drawn cell
2026-11-04 09:15:43 +07:00
BFlat f3f25150e3 Merge pull request #5425 from dotCooCoo/fix/find-font-skip-status
Clear stale Find Font warning after successful replacement
2026-11-04 09:15:29 +07:00
BFlat a220bbbf51 Merge pull request #5473 from dotCooCoo/fix/ot-tag-double-sign
Reject doubly signed OpenType feature tags
2026-11-04 09:15:13 +07:00
BFlat ea587a1c0b Merge pull request #5430 from dotCooCoo/fix/render-native-thread-helper
Render: keep the native thread helper out of Wasm libraries
2026-11-04 09:14:59 +07:00
dotCooCoo e3a6ec68fa Docs: describe the New Window source in our own words
The New Window line in docs/target-app-parity.md quoted the help page word for word. It now describes what the page says and keeps the link.
2026-11-04 08:13:58 +07:00
dotCooCoo e03665a215 Window: New Window opens a second view of the current document
Window > New Window was grayed out. It now opens another view of the
current document, with its own zoom, center, rotation, artboard and
Outline or Preview, as a tab of its own. While a document has more than
one view, each tab shows the view's number after the name
("Untitled-1:2"). An edit in one view shows in every view of the
document.

Tile, Cascade, Float in Window, Float All in Windows and Consolidate All
Windows arrange each view as they arrange a document, and Tile and
Cascade are enabled with two views of one document. A new view of a view
in a floating window opens in a floating window too. File > Close and a
tab's close button close the view; the document's last view closes the
document, asking to save it first. Next Document and Previous Document
step through the views in tab order.

Each Tile pane and floating window draws its view in its own Outline or
Preview, and switching views with the Artboard tool targets the artboard
the view shows. A switch to another view of the current document resets
the tool, as a switch to another document does (Session::reset_tool).
Artwork held over another view's tab during a drag switches to that
view, and a drop there moves it.

Fixes #4116
2026-11-04 08:13:58 +07:00
FredAppsandClaude Opus 5.5 b91f527c91 About: credits tables fit without side-scrolling and their columns resize
The Contributors table and the Models table were egui Grids inside a
two-way scroll area: they opened wider than the dialog, so they scrolled
sideways, and Company and Model sat almost touching. Both are now
egui_extras tables. Each column opens at the width of its header and widest
cell, the spare width goes to the text columns (Name; Company and Model),
and every column edge can be dragged. Widening a column grows the table
like a spreadsheet, and only then does it scroll sideways; the header stays
put while the rows scroll. Counts and dates are right-aligned and every
cell is vertically centred.

The sorted column stays highlighted and its direction shows on the
toolbar's sort-order button, so headers no longer reserve room for an
arrow. The opening widths come from fit_widths, a pure function with unit
tests that a fitted table fills its room exactly and that only the text
columns give way when room is short.

The About dialog opens 820 points wide, so every column fits at its natural width.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 08:13:55 +07:00
Franco Jacquet c16c833c58 Check stroke.set params: a misnamed key is refused (#1442)
Squashed from #5453 onto main.
2026-11-04 08:13:52 +07:00
vangel76andClaude Sonnet 5.5 f258124086 Component fit chunking: review fixes (#5464)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 08:13:32 +07:00
vangel76andClaude Sonnet 5.5 007e15ad8b Image Trace: fit the components of a layer in parallel, in chunks (#5464)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 08:13:32 +07:00
vangel76andClaude Sonnet 5.5 6ede10de4d all_within hasher: mix the high bits into the low ones (#5463)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 08:13:28 +07:00
vangel76andClaude Sonnet 5.5 f4ba106e39 Image Trace: all_within hashes its grid cells with a small hasher (#5463)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 08:13:28 +07:00
vangel76andClaude Sonnet 5.5 c0465969c8 Denoise: comment fixes from review (#5462)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 08:13:25 +07:00
vangel76andClaude Sonnet 5.5 63b8c88168 Image Trace: noise removal keeps its regions in u32 arrays (#5462)
Regions are a linked list of pixels with a union-find over region ids instead of a Vec<usize> per region and BTreeMaps per merge. Same merge order and output; about 2.7x less peak memory and up to 1.9x faster on 25 MP noisy labels.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 08:13:25 +07:00
vangel76andClaude Sonnet 5.5 f75616af54 contributors: set display name for vangel76
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 08:13:22 +07:00
vangel76andClaude Sonnet 5.5 a84ab2f14a contributors: credit vangel76 as Valentin Klein
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 08:13:22 +07:00