Commit Graph
10704 Commits
Author SHA1 Message Date
Ahmed Gomaa 93a039d524 UI tests: gradient and rotation controls are found in release builds
Gradient and rotate-view harnesses looked up widgets by egui Id debug
source strings (for example ".with(…)" and "rot-combo"). Those names
exist only with debug assertions, so the same tests panic in --release.
Resolve widgets from stable scope salts / AccessKit labels instead, which
work in both profiles.
2026-11-09 02:03:06 +07:00
NetterSilverandClaude Haiku 5.5 c085185296 Ignore non-digit suffixes in next_asset_name
Found while testing crates/doc/src/assets.rs:43 (Document::next_asset_name)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 02:03:06 +07:00
Ahmed Gomaa a89dcc1a5d Preferences: inputs expose their labels to accessibility tools
The Preferences labeled() helper painted the visible label and then drew
the input beside it without associating them. Call label_inputs_by so
screen readers and the test harness can find each field by its label.
2026-11-09 02:03:06 +07:00
Sven Lafebre afe8294c7d Test: anchors picked with a Cmd-lent Direct Selection over other tools are what Copy takes (#6123)
With the Rectangle and Ellipse tools, Cmd lends the selection tool chosen
last, and Copy already took the anchors Direct Selection picked. The
Curvature tool, which Cmd lends Direct Selection, copied the whole path
before this PR, as the Pen did.
2026-11-09 02:03:05 +07:00
NetterSilverandClaude Haiku 5.5 194364304b Strip CSS comments from style attributes and rule declarations
Found while testing crates/svg/src/import/css.rs:20 (parse_decls / split_decls)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 02:03:05 +07:00
Sven Lafebre 8bb99ae455 Docs: record #6123 in the Drawing tools area row and the M2 milestone row
Scores and hours unchanged.
2026-11-09 02:03:05 +07:00
Sven Lafebre 748ac5cf6e Pen: keep a lent pick across tool resets; a gesture that picks nothing keeps the Pen's anchor (#6123)
The remembered selection is now tied to the document it was made in, by its
uid, instead of being cleared on every tool reset: another view of the same
document, or closing an inactive tab, kept the anchors picked but made Copy
take the whole path.

A lent gesture that leaves the selection as it found it (a Cmd+Shift marquee
over nothing) is no longer recorded as a pick, so the Pen's last anchor stays
its own and Copy takes the whole path.

Also records #6123 in target-app-parity.md.
2026-11-09 02:03:05 +07:00
Sven Lafebre 91a0ba4231 Pen: Copy and Cut take the anchors a Cmd-lent Direct Selection picked (#6123)
With the Pen or Curvature tool, Copy and Cut ignore the anchor selection,
so that the last anchor the Pen leaves selected doesn't make Copy take just
that anchor (#2122). Anchors picked with the Direct Selection that Cmd/Ctrl
lends those tools were ignored too, and the whole path was copied.

The session now remembers the selection the lent tool leaves when it gives
the tool back. While that is still the selection, Copy and Cut take the
picked anchors and segments, as with Direct Selection chosen.
2026-11-09 02:03:05 +07:00
Sven Lafebre c2c92b7d49 Fix #5188: selected anchors that are no corner keep Shift-click adding 2026-11-09 02:03:04 +07:00
Don Omondi d8074562d1 Alt + keypad codes: docs say the Windows path is unit-tested only; fix two comments
The type parity row no longer says the NumLock-on path was tried on
Windows: neither path has been run on a Windows machine yet. The comment
on the NumLock-off egui keys says Clear comes as the top-row 5, and the
test comment names the keys 0151 and 0234 actually use.
2026-11-09 02:03:04 +07:00
Sven Lafebre e15965199f Fix #5188: the docs say how other corners are added after the first pick 2026-11-09 02:03:04 +07:00
Sven Lafebre a571e242af Fix #5188: a Shift-click on a corner widget of a whole path picks its corner
With Direct Selection, a Shift-click on a corner widget toggled its
corner. With the path selected whole every corner already is, so the
first Shift-click deselected the corner clicked and hid its widget,
leaving the others. While every corner is selected, a Shift-click now
picks that corner alone, as the first click of "click one widget, then
Shift-click the others" does; with some corners picked it still toggles.
2026-11-09 02:03:04 +07:00
NetterSilverandClaude Haiku 5.5 b73a880b3c Cut PSD Unicode layer names on a character boundary
Found while testing crates/render/src/encode/psd.rs:225

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 02:03:03 +07:00
Sven Lafebre b2acf71764 Fix #5960: find how far gradient ribs reach in one pass along the path
Each rib of a dashed stroke with a width profile looked up to 256 points
either way along the path, asking the profile at every step, and reached
as wide as the stroke gets anywhere past that. A sliding maximum over the
points' precomputed cover now gives every rib's reach in time in
proportion to the points, with no bound and no fallback to the widest
width (review on #6093).
2026-11-09 02:03:03 +07:00
Don Omondi 8b6e358f0c Alt + keypad codes: with NumLock off the keypad keys count as digits and don't move the caret
Follow-up to #5939. With NumLock off the keypad sends Insert, End, arrows,
Clear, Home and Page Up/Down; Windows still composes the code from them,
but the app also moved the caret, so the character landed elsewhere. With
Alt held, those keys without the extended-key flag now count as digits and
are taken out of the frame; the separate navigation keys keep their meaning.
2026-11-09 02:03:03 +07:00
Sven Lafebre 6d18549edc Fix #5960: evidence entry in the parity document 2026-11-09 02:03:03 +07:00
Davit MatchakhelidzeandClaude Sonnet 5.5 82596bacc7 i18n(ka): Georgian for 1 new string
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 02:03:02 +07:00
M Balazs PC 7f7c4cf9ad .ai import: test every paint mask art takes, and that it stays in the mask
The mask test now checks the whole fill and stroke (colour, overprint,
width, cap, join, miter, dash) and the fill rule against the owner's,
and that an object after the mask's dictionary paints with the owner's
paint, not the paint the mask's art set. open_mask_object gets a doc
comment.
2026-11-09 02:03:02 +07:00
Sven Lafebre 8f975aa0c5 Fix #5960: a narrow part of a variable-width stroke paints over a wide part only where they overlap
With a width profile, every slice of a stroke gradient (along or across)
reached as far as the stroke is wide anywhere. Where the stroke crosses
or runs close by itself, the later, narrower part painted a square of
its colour over the wider part beside it, clipped only to the whole
outline. Each rib now reaches as far as the stroke is wide there and on
its way to the next points (each side of a profile stays between its
widths at a span's points); for a dashed stroke, as wide as it gets
within a cap's reach, since caps and dots reach along the path.
2026-11-09 02:03:02 +07:00
M Balazs PC 500ff6ed4c .ai import: opacity mask art without its own paint takes the paint before its dictionary
A dictionary's state starts afresh, with a black fill. Mask art is written
going on from the paint before the mask's dictionary, which the writer leaves
out when it doesn't change, so a mask rectangle with no colour of its own
came in black and hid the white letters it masks. Mask art now starts from
the paint (fill, stroke, line style, fill rule, overprint) before the
dictionaries it is in; lock, visibility and transparency still start afresh.
2026-11-09 02:03:02 +07:00
Don Omondi d4f6fa0744 EPS/.ai editing data: art-style strokes aligned inside or outside keep their alignment
Squashed from #6010 onto main.
2026-11-09 02:03:01 +07:00
ruchirguitar b1f52d1369 Select Text by Font: limit it to artboards or layers (#5529)
Squashed from #5578 onto main.
2026-11-09 02:03:01 +07:00
Dylan M. Taylor 2ead0afaa0 affinity import: share one work and name budget across repeated links of shared objects 2026-11-09 02:03:00 +07:00
VladimirCeric e3817d6b50 Typographer's Quotes: a lone typed ” opens like a straight quote
Squashed from #5459 onto main.
2026-11-09 02:03:00 +07:00
NetterSilverandClaude Opus 5.5 05a242ff77 Scale the EPS operation budget with the program's length
Fixes #5363

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 02:03:00 +07:00
dotCooCoo 0f926b571f Merge main into feat/trace-keep-colors 2026-11-08 10:58:31 -08:00
dotCooCoo 64817c2e8c Merge main into feat/plugin-effect-paint 2026-11-08 10:46:47 -08:00
dotCooCoo f7a734355b Merge fix/plugin-grant-module-hash into fix/plugin-stale-grant 2026-11-08 10:43:31 -08:00
dotCooCoo 425cf48a18 Plug-ins: an imported document has no native PDF save setting 2026-11-08 10:38:29 -08:00
M Balazs PC 97ac14ca7d Merge branch 'fix/ai-type-leading-forced-breaks' into fix/ai-right-aligned-tabs
# Conflicts:
#	docs/roadmap.md
#	docs/target-app-parity.md
2026-11-08 19:34:58 +01:00
M Balazs PC 7f17207d67 Merge remote-tracking branch 'origin/main' into fix/ai-type-leading-forced-breaks
# Conflicts:
#	docs/roadmap.md
#	docs/target-app-parity.md
2026-11-08 19:33:41 +01:00
dotCooCoo 79351d7063 Merge main into feat/plugin-importers 2026-11-08 10:25:28 -08:00
dotCooCoo f2e18da4fa Merge main into fix/plugin-grant-module-hash 2026-11-08 10:25:03 -08:00
dotCooCoo 2ecd593e61 Plug-ins: a file past an importer's limit is refused from its size, without reading it
document.open by path reads the first 64 KiB of a file only an importer
reads to look for a built-in format. A larger file is read to the limit
only when its size is within the limit, so an over-limit file costs no
128 MiB read and a built-in file over the limit is not held in memory
twice.
2026-11-08 10:20:53 -08:00
dotCooCoo be000d4e7e Merge main into fix/plugin-stale-grant 2026-11-08 10:19:23 -08:00
dotCooCoo 22a6edc916 Plug-ins: a module that lists no permissions ends the grant of its id
Installing a module that lists no permissions under a granted id now
forgets the grant, in the process and in grants.json, so the formerly
approved bytes need a new approval. A refused install leaves the grant.

Attaching a plug-in store forgets the grant of an id whose stored module
lists no permissions. A plug-in folder load forgets the process's grant
for such an id and leaves grants.json alone, because the store keeps the
module its grant covers.
2026-11-08 10:17:58 -08:00
z3r0pix3l e71b4783f2 PDF import: Arabic ligatures keep their letters in order (#6072)
A PDF names a ligature's characters in logical order (lam then alef for
the lam-alef glyph), while a horizontal line of type is gathered glyph by
glyph in visual order and then put back in logical order character by
character. The ligature's characters were turned round with the line:
لا came in as ال, بلال as بالل and الله as هللا. Each glyph's
characters now go into the line in visual order, so putting the line back
restores them.
2026-11-08 21:13:54 +03:00
dotCooCoo 21db71b9a6 Plug-ins: Expand works on each painted piece and stacked painted fills keep the others
Object > Expand of gradient and pattern fills now expands the pieces a
painted live effect draws one by one, so a piece keeps its own paints.
A later painted effect on a fill replaces only the first fill of a piece
and leaves the piece's other fills in place.

Document Info passes the document when it reads an image's painted fills.
2026-11-08 10:11:18 -08:00
dotCooCoo 01ff8464c4 Merge main into fix/save-screens-unknown-options 2026-11-08 10:08:30 -08:00
BFlat c62a8d27e0 Merge pull request #6230 from dotCooCoo/fix/ai-defs-art-styles
.ai import: objects in pattern and brush art take the file's art styles
2026-11-09 02:06:49 +08:00
BFlat 5a2b81bc93 Merge pull request #6226 from dotCooCoo/fix/ai-save-vertical-roman
.ai save: the editing copy keeps Standard Vertical Roman Alignment
2026-11-09 02:06:34 +08:00
BFlat ec732076a4 Merge pull request #6222 from dotCooCoo/fix/swatch-new-gradient-link
Swatches: a new swatch holds no link or placement from the paint it is made from
2026-11-09 02:06:18 +08:00
BFlat 3355bdd100 Merge pull request #6219 from dotCooCoo/fix/ai-gradient-swatch-self-link
.ai import: a palette gradient swatch's paint is not linked to itself
2026-11-09 02:06:03 +08:00
BFlat 3d1a1ee0de Merge pull request #6218 from dotCooCoo/fix/workspace-dialog-test-gap-above
Tests: workspace and toolbar dialog test checks the gap above OK and Cancel's place
2026-11-09 02:05:46 +08:00
BFlat 5613b4d10e Merge pull request #6217 from dotCooCoo/fix/ai-ate-vertical-roman
.ai import: type keeps Standard Vertical Roman Alignment from its editing data
2026-11-09 02:05:30 +08:00
BFlat 42cc222ca2 Merge pull request #6216 from dotCooCoo/fix/symbols-reset-transformation-doc-entry
Docs: the Reset Transformation entry is listed once in the evidence list
2026-11-09 02:05:14 +08:00
BFlat 5c6d868e5a Merge pull request #6208 from dotCooCoo/fix/type-escape-doc-prior-tool
Type: docs say Escape returns to the tool that double-clicked into the type
2026-11-09 02:04:55 +08:00
BFlat 73e8a97c3c Merge pull request #6207 from dotCooCoo/fix/legacy-ai-align-to-path-lost
Legacy .ai: the type attributes warning covers kerning, margins, Align to Path and end brackets
2026-11-09 02:04:45 +08:00
BFlat fb17bf51c9 Merge pull request #6206 from dotCooCoo/fix/svg-textpath-effects
SVG export: type on a path with Skew, 3D Ribbon, Stair Step or Gravity keeps its look
2026-11-09 02:04:28 +08:00
BFlat 47aeadbdc1 Merge pull request #6203 from dotCooCoo/fix/flyout-panels-follow-up
Panels: tests pin the palette windows staying shown for torn-off strips and new toolbars
2026-11-09 02:04:13 +08:00