Commit Graph
5327 Commits
Author SHA1 Message Date
BFlat ca0050be1b Merge pull request #7578 from dotCooCoo/fix/gradient-spot-colorants-drawn-stops
PDF and EPS export: gradients name only the spot inks of stops that color something
2026-11-14 20:37:42 +07:00
BFlat e5153bd625 Merge pull request #7574 from dotCooCoo/fix/issue-7411
Fix #7411: a selection grabbed by an anchor snaps it onto other paths
2026-11-14 20:37:33 +07:00
BFlat 9800d48e58 Merge pull request #7571 from dotCooCoo/fix/cmyk-tiff-alpha-16-bit
TIFF: a 16-bit CMYK or gray TIFF with alpha converts at 16 bits
2026-11-14 20:37:26 +07:00
BFlat a967f28548 Merge pull request #7421 from dotCooCoo/fix/art-brush-proportional-weight
Brushes: Scale Proportionately art grows with the stroke weight
2026-11-14 20:37:17 +07:00
BFlat c8230b469a Merge pull request #7422 from dotCooCoo/fix/dcs-placement-clip-keeps-file-clip
Place: Placement Options clip a DCS image inside its file's clipping path
2026-11-14 20:37:10 +07:00
BFlat 50ac301797 Merge pull request #7416 from dotCooCoo/fix/plugin-unlinked-stop-plates
Plug-ins: unlinking a gradient stop's spot swatch also clears its plates
2026-11-14 20:37:02 +07:00
BFlat a1d320917e Merge pull request #7438 from dotCooCoo/feat/ai-import-kinsoku-settings
.ai import: reads Kinsoku, Kinsoku Shori Type, Burasagari and Bunri-Kinshi
2026-11-14 20:36:54 +07:00
BFlat f793044f83 Merge pull request #7587 from dotCooCoo/fix/open-dimension-labels-own-fonts
Dimensions: an opened file redraws its labels in its own composite fonts
2026-11-14 20:36:46 +07:00
BFlat f8faab6597 Merge pull request #7429 from dotCooCoo/fix/live-shape-replay-negative-radius
Live Shapes: saved object.setLiveShape steps with a negative radius or out-of-range sides replay again
2026-11-14 20:36:38 +07:00
BFlat 48b947692b Merge pull request #7576 from dotCooCoo/fix/svg-path-type-before-start
SVG import: type on a closed path wraps around past the path's start
2026-11-14 20:35:12 +07:00
BFlat 9aa328047a Merge pull request #7420 from dotCooCoo/fix/dxf-ellipse-doc-line
Docs: DXF export of a non-circular ellipse is listed as a native ELLIPSE
2026-11-14 20:35:00 +07:00
BFlat d2b4b5f956 Merge pull request #7410 from dotCooCoo/fix/de-missing-message-rows
i18n: German translates the messages no catalog had a row for
2026-11-14 20:34:51 +07:00
BFlat bbb5a38100 Merge pull request #7362 from dotCooCoo/fix/nl-message-rows
i18n: Dutch translates 1,813 of the status and error messages the untranslated report lists
2026-11-14 20:34:40 +07:00
BFlat 8deaeda1f5 Merge pull request #7516 from ruchirguitar/feat/symbol-weather-icons
Symbols: built-in Weather Icons symbol library
2026-11-14 20:34:29 +07:00
dotCooCoo 9f253e0fb7 Merge main into fix/flat-logo-gray-between-black-and-white 2026-11-14 05:28:44 -08:00
dotCooCoo 1ec44403c1 SVG import: reading the links of linked SVG files stops at the read and text limits
Reading an SVG file that an <image> links to, and gathering its own
links, counts toward the 1,024 reads and 512 MB of text, wherever the
file is linked from. Inside a linked SVG file, every file read for its
links, raster or SVG, also counts toward the 512 MB before it is
decoded, and once either limit is passed no file is read there: the
image is left out with a warning. An SVG file the imported SVG links to
is still shown past the limits, but the files its own links name are
not read, with the same warning. Rasters the imported SVG links to are
read as before.

Every SVG file read is kept by its file, wherever it was read, so
another href to it (another spelling, or the same file from another SVG
file) does not read it again, past the limits too. An SVG file whose art
depends on where it is shown (too deep there for its links to be read,
or with a link that leads back) is not kept, so a link to it from a
shallower place shows the rasters it links to.
2026-11-14 05:20:31 -08:00
dotCooCoo 7dbbd8334f Merge main into fix/svg-nested-image-links-read 2026-11-14 05:20:28 -08:00
dotCooCoo 2c897e62f5 Merge main into fix/trace-flat-16-levels 2026-11-14 05:19:16 -08:00
dotCooCoo 49ed212582 Merge main into fix/text-zoom-marquee-space-moves 2026-11-14 05:15:49 -08:00
dotCooCoo 36c62e14d2 Panels: drag autoscroll scrolls the right way in a short list
In a list view shorter than 56 pt the 28 pt top and bottom bands of the
drag autoscroll overlapped, so their speeds partly canceled: in a 40 pt
view a pointer 19 pt down scrolled at 20 pt/s instead of 74. In a view
shorter than 28 pt a pointer just outside one edge scrolled toward the
other. Each band is now at most half the view, so the pointer is in one
band at most. Views of 56 pt or more keep their bands and speeds.

The band and speed math moves into drag_scroll_speed, with a test of
short, tall and invalid view heights.
2026-11-14 05:14:11 -08:00
dotCooCoo 01359bc753 Image Trace: a trace made off the UI thread applies only in its own document
A trace handed in for imageTrace.make or imageTrace.makeAndExpand was
matched by its object, image, pixels and settings alone, so a trace made
in one document could stand in for the command in another open document
with the same image and settings. The trace's inputs now carry the
document's uid: TraceRun::current is false in any other document, and the
commands there drop the trace handed in and trace their own image, as one
undo step.

Test: a_trace_run_applies_only_in_its_own_document.
2026-11-14 05:11:34 -08:00
dotCooCoo 7c4fc5ea62 Merge main into docs/mcp-own-folders-arrowheads 2026-11-14 05:11:34 -08:00
dotCooCoo 0bdf6823f3 Merge main into fix/svg-masked-shadow 2026-11-14 05:11:15 -08:00
dotCooCoo bc24ad5352 Symbols: a symbol nested in symbol art is measured by its own art
Document::symbol_art_bounds measured a symbol's art without the
document, so an instance of another symbol in that art counted as the
20 x 20 square. It now measures the art through SymbolBoxes, so a nested
instance takes its own symbol's art, and an inline graphic of the outer
symbol is sized by it and follows it when that symbol changes.

- The inline resolve order also follows the instances that size a
  symbol's art, so a symbol is measured after the type in the art of
  the symbols it holds is laid out again.
- A symbol whose art reaches itself through an instance and an inline
  graphic is an empty slot. Only instances that the measurement uses
  count, so one a clipping path hides adds no dependency.
- A missing symbol, a symbol without art, a symbol that holds an
  instance of itself, and nesting 32 deep still measure as the square.
- SymbolBoxes finds symbols through a name index built once, and the
  inline resolve pass and inline_art_bounds share one index, instead
  of scanning the symbol list for each lookup.
2026-11-14 05:10:41 -08:00
dotCooCoo 9ced1772f4 Merge main into fix/sv-missing-message-rows 2026-11-14 05:09:50 -08:00
dotCooCoo 893af5b3d6 Merge main into fix/perspective-grid-noop-undo 2026-11-14 05:07:49 -08:00
dotCooCoo 0b37cf2880 Merge main into fix/cs-missing-message-rows 2026-11-14 05:05:52 -08:00
dotCooCoo 1818bacfce Merge main into fix/no-op-undo-steps 2026-11-14 05:05:30 -08:00
dotCooCoo bd672151fa Merge main into fix/issue-7525 2026-11-14 05:02:54 -08:00
dotCooCoo 0296e9e12f Merge main into perf/flatten-sweep-staggered-boxes 2026-11-14 05:01:31 -08:00
dotCooCoo 0843e1e331 Merge main into fix/tiled-documents-own-profiles 2026-11-14 04:58:21 -08:00
dotCooCoo 3835fb23f5 Merge main into fix/eps-bitmap-glyph-rollback-test 2026-11-14 04:57:25 -08:00
dotCooCoo 0c1fb89757 Merge main into fix/map-links-stop-plates 2026-11-14 04:57:21 -08:00
dotCooCoo 9911bb07bc Merge main into test/swatch-batch-spot-options-defaults 2026-11-14 04:55:11 -08:00
dotCooCoo a5664e3030 Merge main into feat/ai-style-named-gradients 2026-11-14 04:54:56 -08:00
dotCooCoo 3474f7d123 Swatches: test Spot Colors options and Default Swatches replace in a batch
swatch.spotOptions and swatch.resetDefaults {replace: true} rewrite the
fill and stroke for new art through map_default_paints, which also runs
for command.batch steps. Two tests now run each command on its own and
as a batch step followed by a rectangle, and check that the default
paints and the rectangles match: a Lab spot link keeps its tint and
takes the Lab values or their CMYK equivalent in both directions, and a
link to a swatch the replace removes is dropped while the color stays.
Both tests fail when map_default_paints skips every interaction.

The progress line for swatch steps in a batch names the two commands and
the new tests.
2026-11-14 04:54:25 -08:00
dotCooCoo baf9905ba0 Merge main into fix/plugin-store-folder-lock 2026-11-14 04:50:30 -08:00
dotCooCoo 9fb76c5c7a Merge main into fix/remove-breaks-named-locked-type 2026-11-14 04:50:25 -08:00
dotCooCoo 4ca74c02c8 Merge main into fix/pt-br-missing-message-rows 2026-11-14 04:49:50 -08:00
dotCooCoo add6938441 Merge main into fix/links-stored-brush-art 2026-11-14 04:49:13 -08:00
dotCooCoo 5dcf172325 Merge main into fix/monitor-profile-after-blending 2026-11-14 04:48:42 -08:00
dotCooCoo abf93e31d7 Canvas: translucent art blends with the paper before the monitor profile
With Use Monitor Profile for Canvas converting, the art's raster was
converted on its own and then drawn over the separately converted
paper, so a translucent fill or an antialiased edge showed
blend(convert(art), convert(paper)) rather than the converted blend.

Each pixel with partial alpha over an artboard's paper, a colored
artboard, the transparency grid or Hide Artboards' paper now gets the
color that, drawn over the converted paper, shows the art blended with
the paper in sRGB and then converted. Its alpha is kept, so a grid
drawn in back still shows through. Opaque and empty pixels, art over
the pasteboard and Outline convert as before, and with no profile to
convert into nothing changes.

The frame rendered whole, the part an edit renders again, the render
worker's frame (and the pan fill), and the other windows' panes all
use the same rule. The paper is part of the canvas cache key, so
turning the grid on or hiding the artboards renders the art again.
2026-11-14 04:48:22 -08:00
dotCooCoo 1fe52fc5b6 Merge main into fix/separations-spot-stop-plates 2026-11-14 04:47:00 -08:00
dotCooCoo 779591f5ca Merge main into fix/wayland-paste-copied-files 2026-11-14 04:46:48 -08:00
dotCooCoo 6050e48b5d Merge main into docs/complete-message-languages 2026-11-14 04:46:28 -08:00
dotCooCoo 6ab46b5fd8 Print: a spot gradient stop prints its process plates on the separations
A gradient stop linked to a spot ink that also carries process plates
(a DeviceN stop opened from a PDF) printed only its spot tint: print
separations and Separations Preview left its Cyan, Magenta, Yellow and
Black plates blank. They now print the stop's plates beside the tint.
With spots printed as process, each process plate prints the stop's
plate layered with the spot tint's process equivalent, as a separated
image's spot plates layer. Plates beside no spot link, or beside
Registration, still print nothing of their own.

The color visitor also skipped a freeform gradient's points, so print
plates kept their display colors and Document Color Mode left them
unconverted. The points are now visited as unlinked colors.
2026-11-14 04:46:10 -08:00
dotCooCoo be9be8c1bd Swatches: a replacement gradient or pattern is stored as a new swatch stores it
swatch.edit stored a replacement gradient without its placement, so a
radial gradient with an aspect, Alt-dropped on a gradient swatch or
given as `paint`, lost that aspect, while swatch.new keeps it and
applies the swatch with it. A gradient given an aspect without `start`
and `end` lost the aspect in both commands. A replacement pattern kept
the tile transform of the swatch it came from, while swatch.new stores
a pattern untransformed, and `paint: {pattern: name}`, which an Alt-drop
of a pattern fill sends, was refused.

swatch.edit and swatch.new now store a gradient or pattern through one
helper: a gradient keeps its aspect, with or without a vector, and holds
no swatch link, and a pattern is untransformed. swatch.edit takes a
pattern by name, as swatch.new does.
2026-11-14 04:45:04 -08:00
dotCooCoo fbe60fdcbb Merge main into fix/action-batch-step-number 2026-11-14 04:44:33 -08:00
dotCooCoo b1700e06cf Merge main into fix/brush-freehand-unknown-brush 2026-11-14 04:41:48 -08:00
dotCooCoo f37c5c293e Brushes: brush.freehand refuses a brush or style it cannot use
brush.freehand drew the plain path when `brush` named no brush in the
document or was not a string, and drew a pencil stroke for any `style`
other than "brush". It now refuses an unknown name with "no brush named
`<name>`", as brush.apply and brush.setCurrent do, a `brush` that is not
a string, and a `style` other than "pencil" or "brush". The document does
not change and no undo step is recorded. A `brush` left out or null still
draws the plain path.

The Paintbrush skips a tool brush or current brush that has been deleted
and paints with the other, or draws the plain path when neither is in the
document, so a stroke after a brush is deleted is not refused.
2026-11-14 04:41:02 -08:00