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.
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.
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.
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.
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.
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.
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.