Commit Graph
9906 Commits
Author SHA1 Message Date
dotCooCoo f00ddcbaa9 Effects: each copy of a Transform effect draws the raster effects listed before it
A path's Drop Shadow, glow, blur, Feather or pixel filter listed before a
Transform effect that makes copies was drawn once under all the copies, at
the object's own distances. Each copy now carries those raster effects,
scaled by the copy's mean scale, with a Drop Shadow's offset turned,
reflected and scaled with the copy. Raster effects listed after the
Transform effect still paint once around all the copies. Copies that stop
at the effect budget keep their effects, and a Transform effect without
copies draws as before.

The canvas, the object's bounds, export, baking and Expand Appearance use
the same art. Type, images, symbol instances, groups, a fill's or stroke's
own copying Transform effect, and paths with Rasterize or an SVG filter
before the copying effect keep one set of raster effects.
2026-11-14 05:32:43 -08:00
dotCooCoo 9c092798ec i18n: add Danish rows for the literal-brace messages 2026-11-14 05:29:58 -08:00
dotCooCoo 5fba145353 Merge main into fix/mesh-point-color-panel 2026-11-14 05:29:50 -08:00
dotCooCoo b0961a29af Merge main into fix/single-line-composer-remeasure 2026-11-14 05:29:48 -08:00
dotCooCoo 9f253e0fb7 Merge main into fix/flat-logo-gray-between-black-and-white 2026-11-14 05:28:44 -08:00
dotCooCoo e385d92b1b Merge main into feat/live-paint-bucket-multi-click 2026-11-14 05:25:24 -08:00
dotCooCoo 87900ab512 Export: a page of the art's bounds is measured on the art the file draws
With useArtboards off, PDF, .ai and HP-GL exports sized their one page
by every visible object, including art they then leave out. A PDF
without includeNonPrinting or createLayers drops non-printing layers, so
art on such a layer made the page larger than what was drawn, and a
document whose only visible art did not print came out as a blank page.
An HP-GL plot draws nothing of non-printing layers, objects at 0%
opacity, placed images, gradient meshes whose every point is at 0%
opacity and paths that paint nothing, and such art moved the plot's
origin.

The page is now measured with that art hidden, and a document with no
other visible art is refused. A .ai file is measured with the PDF
options it is written with, so it keeps non-printing layers unless both
createLayers and includeNonPrinting are off. The PDF writer's own
non-printing filter uses the same helper, and the HP-GL writer's
plots_nothing says which objects a plot draws nothing of. Export As
measures an HP-GL plot of the art's bounds the same way, so a document
with nothing the plot draws stays in the dialog before the save panel.
2026-11-14 05:21:54 -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 23d2c07c8a Merge main into fix/tool-overlays-reuse-settled-outline 2026-11-14 05:15:44 -08:00
dotCooCoo 41853dbe4d Merge main into fix/svg-direction-any-case 2026-11-14 05:15:42 -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 b562fc1c54 Text wrap: an out-of-range or non-number offset is refused
object.textWrap.make and object.textWrap.options kept an offset outside
-1000 to 1000 pt at the nearer end of the range, and read an offset that
is not a number, or an invert that is not true or false, as if it had
been left out. Both commands now return an error for such a value and
leave the wrap options and the undo history unchanged. An omitted or
null value still takes the default (6 pt and no invert for Make, the
current options for Text Wrap Options), and Text Wrap Options with only
null values reads the current options. A stored offset outside the range
is kept when only Invert Wrap changes.

The MCP text_wrap tool checks offset, invert and release before it
changes the selection, so a refused call changes nothing, and a release
that is not true or false is an error instead of making a wrap.
2026-11-14 05:12:58 -08:00
dotCooCoo 7aad123a00 Merge main into fix/invert-wrap-offset-band-exact 2026-11-14 05:11:42 -08:00
dotCooCoo b3c2fdab21 Merge main into fix/svg-raster-keeps-resolution 2026-11-14 05:11:34 -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 0c1858f91e Merge main into fix/inflate-lazy-puffs 2026-11-14 05:11:29 -08:00
dotCooCoo dbb145a88b Merge main into fix/type-no-op-undo-more 2026-11-14 05:11:18 -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 b96d41e277 Merge main into fix/el-missing-message-rows 2026-11-14 05:10:38 -08:00
dotCooCoo 8de86c9144 Merge main into fix/svg-rtl-absolute-chunks 2026-11-14 05:10:03 -08:00
dotCooCoo 9ced1772f4 Merge main into fix/sv-missing-message-rows 2026-11-14 05:09:50 -08:00
dotCooCoo 765a98e49e PDF/.ai export: give the present reason area type with wrap shapes is written as outlines
The text document of the editing data does not hold an area text object's wrap shapes. On reopening, the reader works them out again from the art above the type, which can wrap it differently (a live object written as its drawn pieces) or not at all. The comments on the check in holds and in a thread's frame check now say so, and the outlines test's comment no longer says the wrap object's settings are not written.
2026-11-14 05:09:42 -08:00
dotCooCoo 893af5b3d6 Merge main into fix/perspective-grid-noop-undo 2026-11-14 05:07:49 -08:00
dotCooCoo 786dcc5581 Images: scaled-down images keep their color beside clear pixels
The image crate's filtered resize filters each channel on its own, which
is correct only for premultiplied pixels, and its thumbnail averages each
channel on its own too. Placed images, linked-image previews, MCP
captures and previews, metafile bitmaps, PDF downsampling and library
thumbnails passed straight RGBA to them, so the color under clear pixels
(usually black) bled into the opaque pixels beside them and darkened
cut-out edges.

vectorcraft_doc::resample scales such images with each pixel's color
weighted by its alpha: filtered resampling premultiplies the pixels in
place and divides them back after, and averaging takes the area-weighted
mean of the pixels each new one covers. Opaque and alpha-free images are
scaled as before. PDF export also multiplies the inks of a CMYK image
with alpha by that alpha before resampling them, and divides them by the
resampled alpha after.
2026-11-14 05:07:39 -08:00
dotCooCoo e395ef3362 Merge main into fix/graph-data-import-size-limit 2026-11-14 05:07:35 -08:00
dotCooCoo b73de03cfd Merge main into fix/pdf-tiff-keeps-icc 2026-11-14 05:07:19 -08:00
dotCooCoo 262a44d5c9 Merge main into fix/rasterfilters-deterministic 2026-11-14 05:06:54 -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 443ca3cb4a Merge main into fix/colr-radial-negative-start-radius 2026-11-14 05:05:29 -08:00
dotCooCoo b1528a3a5a Merge main into fix/tr-missing-message-rows 2026-11-14 05:05:11 -08:00
dotCooCoo 95c036104f Merge main into fix/pl-missing-message-rows 2026-11-14 05:05:09 -08:00
dotCooCoo 28cac223bc Merge main into fix/ai-large-canvas-symbol-art 2026-11-14 05:03:08 -08:00
dotCooCoo bd672151fa Merge main into fix/issue-7525 2026-11-14 05:02:54 -08:00
dotCooCoo 7f319f8975 Merge main into fix/ca-missing-message-rows 2026-11-14 05:02:35 -08:00
dotCooCoo 0296e9e12f Merge main into perf/flatten-sweep-staggered-boxes 2026-11-14 05:01:31 -08:00
dotCooCoo fc672f2257 Merge main into fix/followup-7319 2026-11-14 05:01:10 -08:00
dotCooCoo 86bf36ad3a Merge main into fix/uk-missing-message-rows 2026-11-14 05:00:34 -08:00
dotCooCoo 98bf61bb53 Merge main into fix/objects-on-path-widgets-flatten-once 2026-11-14 05:00:14 -08:00
dotCooCoo b79ca7b1f7 Merge main into fix/dimension-second-point-guides 2026-11-14 04:59:53 -08:00
dotCooCoo 6ebe79d3ec Merge main into fix/fi-missing-message-rows 2026-11-14 04:59:38 -08:00
dotCooCoo 190e4be825 Merge main into fix/3d-masked-cap-graphic-once 2026-11-14 04:59:36 -08:00
dotCooCoo 0843e1e331 Merge main into fix/tiled-documents-own-profiles 2026-11-14 04:58:21 -08:00
dotCooCoo 86c1c5d09d Merge main into fix/eps-kshow-composite 2026-11-14 04:57:48 -08:00
dotCooCoo cb9b7c684a Merge main into fix/nl-missing-message-rows 2026-11-14 04:57:47 -08:00
dotCooCoo 3835fb23f5 Merge main into fix/eps-bitmap-glyph-rollback-test 2026-11-14 04:57:25 -08:00