Commit Graph
14127 Commits
Author SHA1 Message Date
dotCooCoo 3824b15a77 .ai and EPS import: large canvas symbols come in at the file's size
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.
2026-11-14 02:43:50 -08:00
dotCooCoo ffbc5446d5 i18n: Hungarian translates the index and PDF knockout messages no catalog had
Adds Hungarian rows for two messages that reached main after the earlier rows: the `index` whole-number error and the warning for PDF knockout groups with too many overlapping translucent elements.
2026-11-14 02:43:44 -08:00
dotCooCoo 7e66a990bc PDF export: a stored gray or RGB image keeps its ICC profile
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.
2026-11-14 02:42:43 -08:00
dotCooCoo 795fbf0148 i18n: Swedish translates 114 more status and error messages
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.
2026-11-14 02:42:29 -08:00
dotCooCoo f03d200c16 Merge main into fix/followup-7304 2026-11-14 02:42:19 -08:00
dotCooCoo 1780584f8a Merge main into fix/ai-wrap-options-edge-cases 2026-11-14 02:41:43 -08:00
dotCooCoo af750ee599 i18n: Finnish translates the PDF warning for knockout groups with brushed strokes
PDF export warns when a knockout group has a brushed stroke over other
translucent elements and is written as a PDF knockout group. No catalog
had a row for that warning, and untranslated_report does not list it,
because the scanner does not follow the constant into the Err it is
returned in. fi.tsv now has a Finnish row for it, next to the row for
the knockout warning about too many elements.
2026-11-14 02:41:23 -08:00
dotCooCoo 1c973dc141 SVG import: absolutely placed characters in right-to-left text land on their x
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.
2026-11-14 02:41:16 -08:00
dotCooCoo e7feeb311d SVG import: a raster stored again as PNG keeps its resolution
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.
2026-11-14 02:40:45 -08:00
dotCooCoo 55595f0cff i18n: Dutch messages keep the bracketed field names in English
Ten nl rows translated the field names inside [subpath, anchor], [x, y, width, height] and [width, height], which a command reads only in English. They now keep the English names, as the other catalogs do.
2026-11-14 02:40:39 -08:00
dotCooCoo 27e75cfce2 Merge main into fix/flat-logo-gray-between-black-and-white 2026-11-14 02:40:29 -08:00
dotCooCoo 2249b71e03 Merge main into fix/followup-7305 2026-11-14 02:38:29 -08:00
dotCooCoo f3e097b813 Merge main into fix/web-locks-monotonic-clock 2026-11-14 02:36:36 -08:00
dotCooCoo 5c4f96fc96 Merge main into fix/eps-cshow-composite-codes 2026-11-14 02:35:54 -08:00
dotCooCoo 7694627a39 Perspective: reapplying the current grid preset adds no undo step
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.
2026-11-14 02:35:48 -08:00
ruchirguitar e0fe953258 docs: sync symbols area row inventory in target-app-parity 2026-11-14 16:05:47 +05:30
FredApps 4552915aae Tests: spiral decay is per full wind on main, so four segments give the decay 2026-11-14 11:35:04 +01:00
dotCooCoo a8c2a405ac Merge main into fix/dxf-ellipse-doc-line 2026-11-14 02:34:12 -08:00
dotCooCoo ef61c9afbd Merge main into feat/da-complete-messages 2026-11-14 02:33:57 -08:00
dotCooCoo 6eb0769dfe Merge main into feat/ai-insert-aki 2026-11-14 02:33:44 -08:00
dotCooCoo dcd3adc445 Merge main into fix/learn-panel-commands 2026-11-14 02:33:25 -08:00
dotCooCoo b391aeafe9 Merge main into fix/pt-br-missing-message-rows 2026-11-14 02:32:22 -08:00
dotCooCoo 110cf34f29 Merge main into feat/ai-import-kinsoku-settings 2026-11-14 02:32:17 -08:00
dotCooCoo 82e220802f Graph Data: Import Data refuses a file larger than 1 MB without reading it all
Import Data in the Graph Data window read the whole picked file into
memory before cutting its rows and columns to the graph's limits. It now
reads at most one byte past 1 MB (1,048,576 bytes, the limit Import Data
Sets uses) where the host can read part of a file, and refuses a larger
file with "the file is larger than 1 MB", which every complete catalog
already translates. The sheet is left as it was.
2026-11-14 02:32:12 -08:00
dotCooCoo 0bb290e617 Merge main into fix/colr-radial-negative-start-radius 2026-11-14 02:31:23 -08:00
dotCooCoo 013cd6aa42 Merge main into fix/it-missing-message-rows 2026-11-14 02:30:48 -08:00
dotCooCoo 5d2d6e95f7 Merge main into fix/later-span-taller-line-clears 2026-11-14 02:30:02 -08:00
dotCooCoo 95450b1e23 i18n: Vietnamese translates 115 status and error messages it lacked
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.
2026-11-14 02:28:44 -08:00
dotCooCoo a7adb337cf Merge main into feat/arrange-nest 2026-11-14 02:27:15 -08:00
dotCooCoo 9834c58b66 Merge main into fix/links-stored-brush-art 2026-11-14 02:26:44 -08:00
dotCooCoo fc5ebdbdfe Merge main into fix/ko-missing-message-rows 2026-11-14 02:26:09 -08:00
dotCooCoo 9ebd467f8d Merge main into fix/type-dialogs-story-wide 2026-11-14 02:25:49 -08:00
dotCooCoo 5eb428f02f Merge main into fix/nl-message-rows 2026-11-14 02:25:45 -08:00
dotCooCoo be7139c6c5 Merge main into fix/hindi-label-senses 2026-11-14 02:25:08 -08:00
dotCooCoo a946b8241e Merge main into fix/export-bakes-symbol-art-effects 2026-11-14 02:25:04 -08:00
dotCooCoo cd86168e34 Color management: documents behind the front one draw through their own profiles
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.
2026-11-14 02:24:51 -08:00
dotCooCoo a9fbb7aa50 Merge main into fix/svg-clip-path-effects 2026-11-14 02:24:38 -08:00
dotCooCoo 3f7d24a0d3 Merge main into fix/recovery-error-ancestor-paths 2026-11-14 02:24:32 -08:00
dotCooCoo 9735e51473 Clipboard: files copied in a file manager paste as art on core Wayland
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.
2026-11-14 02:24:26 -08:00
dotCooCoo 21267a4b1f Merge main into fix/wireframe-outline-stroke-width 2026-11-14 02:24:25 -08:00
dotCooCoo 5b5104177a i18n: Danish translates the error for four numbers not below 0
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.
2026-11-14 02:23:18 -08:00
dotCooCoo 897a0c7ba0 Merge main into fix/es-missing-message-rows 2026-11-14 02:22:43 -08:00
dotCooCoo ad628c0f3e Merge main into fix/ai-envelope-budget-warped-type 2026-11-14 02:21:54 -08:00
dotCooCoo ad31fe9527 Merge main into fix/reverse-path-profiles 2026-11-14 02:21:25 -08:00
dotCooCoo 69156f558e Merge main into fix/tr-message-rows 2026-11-14 02:21:12 -08:00
dotCooCoo a45be8907b Merge main into fix/followup-7303 2026-11-14 02:20:12 -08:00
dotCooCoo bf3a23d031 Merge main into fix/graph-label-paint-recolor 2026-11-14 02:19:54 -08:00
dotCooCoo c6b901aa21 Merge main into fix/fr-missing-message-rows 2026-11-14 02:18:40 -08:00
dotCooCoo a2e98feb64 i18n: keep bracketed field names untranslated in fr rows 2026-11-14 02:18:24 -08:00
dotCooCoo 4678bda849 Merge main into fix/eps-ryumin-light-h 2026-11-14 02:18:10 -08:00