Commit Graph
10704 Commits
Author SHA1 Message Date
BFlat ee922537fc Merge pull request #6232 from dotCooCoo/fix/instance-appearance-kinds
Symbols: symbol.instance.setAppearance refuses a fill or stroke an object does not draw
2026-11-09 05:41:21 +08:00
ruchirguitar 84c2e61a82 Merge origin/main into fix/5949-hover-numeric-wheel
Keep hover wheel stepping and the canvas zoom-glide regression together with current main.
2026-11-09 03:09:19 +05:30
dotCooCoo e1e7591e6c Merge main into fix/outline-stroke-keeps-effects-on-outline-r 2026-11-08 13:34:23 -08:00
dotCooCoo c25c3f5ace Merge main into fix/placed-gradient-follows-warp 2026-11-08 13:32:59 -08:00
Davit Matchakhelidze 4fbbfd4dbb i18n(ka): update the Georgian catalog 2026-11-09 01:28:23 +04:00
Davit Matchakhelidze aaa60bacdc Merge upstream into ka-update
# Conflicts:
#	crates/ui-egui/src/i18n/ka.tsv
2026-11-09 01:28:22 +04:00
dotCooCoo 75ec10cd02 Merge main into fix/issue-3748-r 2026-11-08 13:27:31 -08:00
M Balazs PC b3fb745575 Merge remote-tracking branch 'origin/main' into fix/ai-right-aligned-tabs
# Conflicts:
#	crates/text/src/layout/flow.rs
2026-11-08 22:25:23 +01:00
dotCooCoo d8ff63f5d0 Merge main into feat/character-anti-aliasing-method-r 2026-11-08 13:24:43 -08:00
dotCooCoo 1bfd916d63 Type: Strong type in a translucent brushed path keeps the path's opacity
Crisp and Strong reshape each edge pixel by the type's coverage, drawn
in black. Type in the art of a scatter brush on an undashed path drew
that coverage with the path's opacity folded in, so Strong made fully
covered pixels opaque at 50% path opacity. The coverage is now drawn
at full opacity; the pixels keep the folded opacity.

The evidence entry for the Anti-aliasing Method notes that scores and
hours are unchanged.
2026-11-08 13:21:48 -08:00
dotCooCoo 973503a2b1 Batch: Override Export's folder for Export for Screens no longer warns of one shared file
A data set batch whose Override Export gives each data set its own export folder no longer reports that every data set saves over the same file.
2026-11-08 13:20:48 -08:00
dotCooCoo 83248b9bb4 SVG Filters: export writes a filter live only when import can read it back
SVG export wrote an SVG filter as a live <filter> when its SVG 1.1 form
was at most 64 KB, without counting the region and id it writes into
it. A filter close to the limit came back over it, SVG import dropped
it, and the reopened object had no filter.

Export now leaves room for the id and the measured region, checks the
SVG 1.1 form the way import does, and counts each character past U+00FF
as the character reference Latin-1 output writes. A filter that does not
fit is exported as the other pixel effects are. The SVG 1.1 form and its
check are kept for the filters seen last, as checked filters already
are, so export does not check one filter again for each object.
2026-11-09 04:19:44 +07:00
dotCooCoo 0e7bd10033 SVG export: outlined type keeps its text as an accessible name
Type that SVG text can't draw is written as outlines: vertical type, ruby,
right-to-left text, type on a path with an effect other than Rainbow, an end
bracket, Align to Path, Spacing, hanging punctuation, bullets or inline
graphics. Only glyphs bent along a path gave the outlined group a
`role="img"` and `aria-label`; every other case left screen readers and
search with no text. Each of them now names the group with its text.
Convert to Outlines still writes the paths alone, as before.

Inline graphics' placeholder characters stay out of the name, and empty
type gets none. An object whose id is its name also gets `data-name`, so
opening the file again keeps the name instead of taking the label.
2026-11-09 04:19:41 +07:00
dotCooCoo 61f83dc439 3D export: the revolve normals test checks each wall has triangles
An empty mesh passed the unit-normal, closed and outward checks without
testing a wall. The test now asserts that each revolve makes triangles.
2026-11-09 04:19:38 +07:00
dotCooCoo 88626a9194 3D export: Revolve mesh normals are unit length and short walls face out
Revolve gave each side face a normal as long as its profile edge, and
the mesh kept that length, so the glTF, OBJ and USD files of a revolved
object carried normals of any length (100 for a wall 100 pt tall). A
face whose edge was shorter than about 0.71 pt fell back to its corners'
normal, which turns inward when the profile is drawn the other way, and
its triangles then faced into the solid.

The mesh now scales every given normal to unit length before choosing
between it and the corners' normal.
2026-11-09 04:19:38 +07:00
dotCooCoo ef65f0fed4 Preferences: the settings filter builds without a clippy warning on macOS
Squashed from #6235 onto main.
2026-11-09 04:19:35 +07:00
dotCooCoo 1e21154e4d Symbols: symbol.instance.setAppearance refuses a fill or stroke an object does not draw
Squashed from #6232 onto main.
2026-11-09 04:19:25 +07:00
dotCooCoo 35d1ea12c2 Merge main into fix/plugin-grant-module-hash 2026-11-08 13:17:53 -08:00
dotCooCoo 4e1f784115 Plug-ins: a module without a grant gets no settings or cache kept for its id
The test for a changed module under a granted id now checks that the next
start, a folder load and a refused install leave the id's settings and
cache unattached.
2026-11-08 13:17:51 -08:00
dotCooCoo 48fdfeffd8 Type: docs say Escape returns to the tool whose double-click chose the Type tool
Only a double-click on type from another tool records the tool Escape and
Cmd+Enter return to, and the Type tool keeps it until another tool is
chosen. Choosing the Type tool from the toolbar records none, so Escape
goes to the Selection tool. The type and UI checklists and the doc
comments on prev_tool, end_editing and claims_key now say so.

docs/type-parity.md held four copies of the point, area and path type
row, three of them with older Escape wording. They are one row again,
with the Type Orientation sentence that only one copy had.
2026-11-08 13:17:38 -08:00
BFlat d9eb644bc6 Merge pull request #4595 from onion3130/fix/4466-double-click-hermetic
Exit isolation on empty double-click with Direct Selection (#4466)
2026-11-09 05:17:28 +08:00
dotCooCoo e7c381a53f Merge main into fix/issue-3748-r
# Conflicts:
#	crates/doc/src/hit.rs
2026-11-08 13:14:33 -08:00
dotCooCoo 5aec304ef1 Merge main into fix/placed-gradient-follows-warp
# Conflicts:
#	crates/effects/src/reshape.rs
2026-11-08 13:11:12 -08:00
dotCooCoo 9d0b2b0c1c Merge main into fix/fitted-gradient-turns-with-transform 2026-11-08 13:07:04 -08:00
dotCooCoo 4b665ad13c Plug-ins: clearing every cache is tested in a binary of its own
`plugin.clearCache` without an id empties the cache of every plug-in
installed in the process. In the engine's library tests it could empty
the cache of another storage test running at the same time, and its
`bytesFreed` could count that test's cache. It now runs in
`crates/engine/tests/plugin_clear_cache.rs`, and the library test checks
that clearing one plug-in's cache leaves the other plug-in's cache.

The storage fuzz test starts each case with an empty plug-in store,
deletes the store when the case ends, and installs `fuzz.storage` with
`replace: true`, so the cases that shrink a failure install their
module.

docs/mcp.md says that files `plugin.remove` can't delete stay in the
folder renamed with `.removed` until the plug-in is removed again.
2026-11-08 13:03:31 -08:00
onion3130 eaab4fd516 Trim to hermetic font test only (Source Sans 3, not Inter) 2026-11-09 04:02:29 +07:00
dotCooCoo 6d87858e2b Merge main into feat/plugin-importers 2026-11-08 13:00:01 -08:00
dotCooCoo 36bca85879 Plug-ins: app.open passes params to the importer File › Open picks
app.open with params and no importer ran file.open with the path alone, so the desktop app ran the importer on its defaults while headless app.open passed the params to document.open. file.open now carries params to the importer that opens the file.

The importer parameters test installs its module with replace from the second pass on, as plugin.install requires. The permission table in docs/plugins.md lists doc.read for filter, effect and exporter.
2026-11-08 12:59:17 -08:00
dotCooCoo 11703bd350 Merge main into feat/plugin-effect-paint 2026-11-08 12:56:42 -08:00
dotCooCoo a717e34f02 Merge main into fix/plugin-grant-module-hash 2026-11-08 12:55:59 -08:00
BFlat f0d5a6622a Merge pull request #5037 from dotCooCoo/feat/list-levels-r
Type: Tab and Shift+Tab move a list item down and up a level
2026-11-09 04:54:52 +08:00
BFlat 13e5704dc9 Merge pull request #3952 from dotCooCoo/feat/trace-ignore-background-only
Image Trace: Ignore Color can leave out only the background
2026-11-09 04:54:36 +08:00
dotCooCoo 7b8d5ba8f5 Type: Tab and Shift+Tab move a list item down and up a level
Squashed from #5037 onto main.
2026-11-09 03:39:05 +07:00
dotCooCoo 0de0cb7cb9 Image Trace: Ignore Color can leave out only the background
Squashed from #3952 onto main.
2026-11-09 03:38:46 +07:00
dotCooCoo d5bb58aad5 Merge main into feat/plugin-importers 2026-11-08 12:38:22 -08:00
dotCooCoo a2884baa33 Merge main into fix/edit-copy-artboard-route 2026-11-08 12:35:20 -08:00
dotCooCoo 9518dc0e3a Merge main into feat/plugin-importers 2026-11-08 12:33:17 -08:00
BFlat 74310c6737 Merge pull request #6250 from dotCooCoo/fix/placed-gradient-hidden-children-and-freeform
Effects: hidden layer children and edited freeform gradients follow the Transform and Free Distort effects
2026-11-09 04:31:53 +08:00
BFlat 2cdec30659 Merge pull request #6249 from dotCooCoo/fix/ai-editing-copy-paragraph-once
.ai import: the editing-copy paragraph in the file-format doc appears once again
2026-11-09 04:31:38 +08:00
BFlat 9150f88a83 Merge pull request #6247 from dotCooCoo/feat/ai-path-align-distance
Type: Align to Path moves each character by its own font's metrics
2026-11-09 04:31:23 +08:00
BFlat ba353a22af Merge pull request #6246 from dotCooCoo/feat/plugin-filter-shortcuts
Keyboard Shortcuts: each Object › Plug-ins filter has a row of its own
2026-11-09 04:31:08 +08:00
BFlat 156ccf4b6d Merge pull request #6245 from dotCooCoo/fix/generic-cmyk-swop
Color: Generic CMYK tints gain as CGATS TR 001 gives for SWOP printing
2026-11-09 04:30:52 +08:00
BFlat 85519d5970 Merge pull request #6244 from dotCooCoo/feat/composite-fonts
Type: Composite Fonts… sets each class of character in a font of its own
2026-11-09 04:30:38 +08:00
BFlat 358df585dc Merge pull request #6241 from dotCooCoo/fix/3d-export-triangle-budget
Asset Export: the 3D mesh triangle limit bounds memory across all exported objects
2026-11-09 04:30:20 +08:00
BFlat fddbbe023d Merge pull request #6231 from dotCooCoo/fix/missing-link-relative-path
Links: a missing linked file keeps its relative folder when a moved document is saved
2026-11-09 04:30:06 +08:00
BFlat 0b8fc3c89d Merge pull request #6228 from dotCooCoo/feat/plugin-storage
Plug-ins: a plug-in keeps settings and a cache of its own
2026-11-09 04:29:51 +08:00
BFlat 0b533ae5f8 Merge pull request #6179 from dotCooCoo/fix/ids-param-strict
Commands: an ids list with an entry that is not an id is refused instead of dropping the entry
2026-11-09 04:29:39 +08:00
dotCooCoo 26804fb0c4 Plug-ins: tests hold an importer to its budget and hostile extensions in the manifest fuzz
An import's instruction and time budgets are now host limits on Limits, as a heavy filter's are, so a test can give an importer a small budget. An importer past its instruction or time limit, and a file past the input limit, return their error and leave an open document and its undo history unchanged. The manifest fuzz varies extensions (missing, dotted, mixed-case, repeated, too long and too many).
2026-11-08 12:29:27 -08:00
BFlat 6d506dc9c8 Merge pull request #5143 from dotCooCoo/fix/ai-os7
.ai import: images past 2^25 pixels in the editing data keep the layers
2026-11-09 04:29:23 +08:00
dotCooCoo 3146c7143d i18n: Hindi names the Anti-aliasing Method and its choices
Hindi became a complete catalog on main, and the merge gave it only the
antiAlias message row. It now has the Anti-aliasing Method label, the
Sharp method's antiAlias row, Crisp and Strong, so the dropdown no longer
shows English or the Contour tool's corner word for Sharp. A test checks
that every complete catalog has these rows.
2026-11-08 12:27:51 -08:00