An instance whose symbol art has live effects is replaced in the export by a group holding the baked art. That group now takes the instance's attributes as well, so a PDF export keeps the instance's URL as a link annotation over the art where its effects draw it.
On a pie with Legends in Wedges, the graph draws legend labels white on
dark wedges unless they keep a fill of their own, and it read a kept black
fill as no fill of its own. A label recolored from white to black on a dark
wedge went back to white the next time the graph was drawn.
The graph now marks the legend labels' fill as set when a command sets it
(legendFillSet in the graph's label styles, kept through save and open), and
draws a marked fill on every wedge, black included. Undo clears the mark. A
size, font or stroke change does not set it, and neither does a whole-pie
recolor that gives the legend labels different fills; one that gives them
all the same fill sets it. A swatch edit or color conversion leaves the
default black legend fill as it is, and keeps a non-black legend fill from a
file saved without the mark as the labels' own when it turns black.
With ids, Combine Point Text and Join Point Text take locked and hidden
type. They kept the first piece's object and removed the others, so
naming a visible piece and a hidden one beside it hid the visible text
or showed the hidden text, and the same held for locked pieces and for
pieces in a locked or hidden group or layer.
A piece now joins only pieces that are as visible and as locked as it
is, counting their groups and layers. The selection route takes only
editable type, so it behaves as before.
Hidden instances, instances in hidden groups, on template layers, and
on hidden layers or layers that do not print when the exporter leaves
those out are no longer placed for PDF, print, EPS and DXF. Their art
was baked and counted toward the 16,000,000-object limit for placed
symbol art, so it could leave a visible instance written without its
effects.
bake_document_placing_symbols takes a WrittenLayers value: PDF passes
the layers its settings write, EPS writes layers that do not print but
not hidden ones, and DXF writes both. Print removes the layers that do
not print before baking.
VectorCraft reads the symbol definitions of a large canvas .ai or EPS,
and of a .ai whose page is in larger units, in the same units as its
layers. Opening such a file scaled the layers and graphic styles up to
full size but left the symbols' art as it was. Instances on the layers
drew at the right size, but each one's transform carried the factor N,
and a newly placed instance came in at 1/N of the size, where N is the
file's large canvas scale or its page's unit.
- Opening the file now scales each symbol's art, strokes and effects with
the layers. Instances on the layers, in symbol art, in pattern tiles
and in opacity masks keep their own scale and rotation and draw where
they did.
- A symbol library without layers from such a file gets the same scale
as its graphic styles.
- Opacity masks on the layers that do not move with their object are
scaled with the layers too, as are those in symbol art.
- Editing data that VectorCraft wrote (its %%Creator line) keeps its
symbols and those masks at their own size, as the .ai save writes
them, so files saved by earlier versions open as before.
A gray or RGB TIFF that reached PDF export as a TIFF, for example in a
native document or from a script, was decoded to 8-bit RGBA and written
as DeviceRGB, which dropped the ICC profile of its tag 34675, its 16-bit
samples and its gray color space. It is now written in an ICCBased color
space holding that profile, as a tagged PNG is: gray stays gray, 16-bit
samples stay 16-bit from PDF 1.5 on, and the alpha becomes a soft mask
only when some pixel is not opaque.
A gray or RGB image that the Compression settings resample or compress
with JPEG keeps its source profile too, a PNG included. Pixels that the
Output settings convert are written without it, and so is a profile whose
color space differs from the samples'. CMYK images are unchanged.
The untranslated report listed these messages as missing from the
Swedish catalog. Among them are the image export encoders and size
limits, color profiles, color books, swatch exchange files, DXF import,
3D and Revolve errors, and the `index` check of document.activate. Each
now has an @msg row in sv.tsv, with its placeholders, backticked names,
format names and values kept as the English writes them. Messages that
open pull requests already translate into Swedish are left to them.
The Swedish row in docs/localization-parity.md is recounted, and
docs/target-app-parity.md gets a line for the Swedish catalog.
An absolutely placed character starts its own text chunk, anchored on its
own x (SVG 1.1 text chunks). In a right-to-left line the import kerned the
character before each placed one as if kerning moved the placed character
right, but a right-to-left glyph takes its kerning at its left, so the
correction moved the wrong glyph. In <text direction="rtl" font-size="20">,
<tspan x="100 160" y="80 80">אב</tspan> on a second line put the right
edge of א at 393.48 instead of 100.
The placement now works in drawing order: each kerning is a cut after its
character (before it when it runs right to left), each gap between two
placed neighbors takes one cut, and the line's left edge is measured again
every round. Corrections are divided by the character's horizontal scale,
so text stretched with lengthAdjust="spacingAndGlyphs" lands on its x too.
A left-to-right character drawn between two placed right-to-left ones has
no kerning slot before the next one, which then keeps its place in the
line; the import warns about it.
A raster that SVG import decodes and stores again (a TIFF, a BMP or any
other format that is not PNG, JPEG, GIF or WebP, or an image whose EXIF
or TIFF orientation turns or flips it) was written as a PNG with no pHYs
chunk, and a turned or planar CMYK TIFF was written without resolution
tags, so the image lost the resolution its file declares.
The converted PNG now carries the source's resolution in a pHYs chunk,
and the CMYK TIFF in its resolution tags, as Open and Place store them.
A quarter turn (orientations 5 to 8) swaps the horizontal and vertical
values. An image that declares no resolution is stored without one, and
an image stored unchanged keeps its own bytes.
The PNG, JPEG, TIFF, WebP and BMP resolution readers and the pHYs writer
move from the engine to vectorcraft-doc, so the SVG importer can use
them; the engine and renderer entry points forward to them unchanged.
perspective.grid.preset stored the preset's grid every time, so applying
the preset the document already holds recorded an undo step that changed
nothing. It now compares the new grid with the stored one, as
perspective.grid.set does through grid_kept, and records a step only when
the grid changes. When only whether the grid shows or its active plane
differs, the preset sets them without an undo step, as
perspective.grid.show and perspective.plane.set do.
vi.tsv gets an @msg row for each of the 115 status and error messages
that the untranslated report listed as missing from every
complete-message catalog and that no open pull request adds to
Vietnamese. Among them are the image export, color profile, color
book, swatch exchange file, swatch library, DXF and DWG import, 3D and
Revolve errors, the zip, regular expression and script file errors,
and the `index` whole-number error. Placeholders, backticked names,
parameter values and limits stay as the English writes them.
Docs: the Vietnamese row of docs/localization-parity.md and a line in
docs/target-app-parity.md give the new counts.
With Window › Arrange › Tile or floating document windows, every document
other than the front one was drawn through the profiles the front document
is assigned, since the active color settings are process-wide.
- cms::with_active puts other settings in place of the active ones on one
thread, fast paths included, and puts them back after (also on a panic).
cms::for_document gives the context a document's assigned profiles make,
the same one each time for the same profiles and working settings.
- Each pane renders its document's art through colormgmt::doc_cms, on the
render worker and on the UI thread alike, and draws its paper, artboard
colors and transparency grid through the same settings.
- Loading or removing a profile redraws the documents assigned it, the
ones behind the front one included.
- The ink and separation tables keep the tables of up to four color
settings, so documents with different CMYK profiles side by side do not
rebuild them on each redraw.
Placed documents inside a document behind the front one still draw through
the front document's profiles.
Where the clipboard goes through the compositor's core Wayland protocol
(the Flatpak on GNOME), Paste now reads the text/uri-list a file manager
offers, else GNOME Files' x-special/gnome-copied-files, and pastes the
first file that is art before the clipboard's other types, as on the
other platforms. The list is read on the read worker and the files on
the paste's background thread. Only file: URIs with no host or
localhost are taken (RFC 8089), percent escapes decoded once (RFC
3986); other URIs are skipped, and a list of more than 1,024 URIs, a
limit of VectorCraft's own, names no file. The Paste menu item is
enabled when a file list is offered.
main added the message "`{key}` must be four numbers not below 0:
[tl, tr, br, bl]" to every other catalog. Danish now has its row too,
and the Danish row of docs/localization-parity.md gives the counts on
main at 4c86cb97d: the untranslated report lists the same missing
messages for Danish as for Greek, Spanish and Finnish.