Commit Graph
808 Commits
Author SHA1 Message Date
BFlat 52ec037f4a Merge pull request #7425 from dotCooCoo/fix/ai-envelope-budget-warped-type
.ai save: images with a Warp count against the envelope limit
2026-11-15 05:30:30 +07:00
BFlat 3ccafde99f Merge pull request #7466 from dotCooCoo/fix/ai-wrap-options-edge-cases
.ai save: text wrap fixes for cut-away clipping fills and symbols without room
2026-11-15 04:22:46 +07:00
BFlat 20ae675b9b Merge pull request #7622 from dotCooCoo/fix/graph-label-restyle-keeps-plot
Graphs: restyling the labels leaves the plot where it is at the next redraw
2026-11-15 04:22:27 +07:00
BFlat e6b31e00d2 Merge pull request #7458 from dotCooCoo/fix/eps-cshow-composite-codes
EPS import: cshow runs once for each character of a composite font
2026-11-15 04:22:01 +07:00
BFlat 2e3fc0b59a Merge pull request #7616 from dotCooCoo/fix/ai-save-outlined-wrap-object
.ai save: type written as outlines keeps wrapping by its bounds
2026-11-15 03:22:56 +07:00
BFlat c6c06b2c68 Merge pull request #7442 from dotCooCoo/fix/eps-ryumin-light-h
EPS import: Ryumin-Light-H and GothicBBB-Medium-V read as Japanese type without their CIDFont
2026-11-15 03:19:37 +07:00
dotCooCoo b374d1f2c0 EPS import: cshow over a descendant without a matrix sees it at its drawn scale
When a Type 2 CIDFont or a Type 42 descendant of a composite font has no FontMatrix, the
font a cshow procedure sees as current now takes the identity as its default, as glyph
measuring and drawing do, instead of the 1/1000 default of other fonts.
2026-11-14 11:03:23 -08:00
dotCooCoo b12d4794a0 Merge main into fix/eps-cshow-composite-codes 2026-11-14 10:29:48 -08:00
dotCooCoo 37f06a86ee Merge main into fix/ai-wrap-options-edge-cases 2026-11-14 09:46:27 -08:00
dotCooCoo 29be6fc287 Merge main into fix/ai-envelope-budget-warped-type 2026-11-14 09:46:10 -08:00
BFlat 67f6d3a50f Merge pull request #7593 from dotCooCoo/fix/ai-writer-wrap-comment
PDF/.ai export: the comment gives the present reason area type with wrap shapes is written as outlines
2026-11-15 00:42:14 +07:00
BFlat e76f8d2c88 Merge pull request #7501 from dotCooCoo/fix/export-bakes-symbol-art-effects
Export: live effects in symbol art apply in PDF, EPS, print and DXF
2026-11-15 00:41:46 +07:00
BFlat 7ee5f499f4 Merge pull request #7547 from dotCooCoo/fix/ai-large-canvas-symbol-art
.ai and EPS import: large canvas symbols come in at the file's size
2026-11-15 00:40:30 +07:00
BFlat 1b2a4b39d5 Merge pull request #7557 from dotCooCoo/fix/eps-kshow-composite
EPS import: kshow runs its procedure between the characters of a composite font
2026-11-15 00:39:59 +07:00
dotCooCoo d3789f2b0c Graphs: outlined labels and opened .ai graphs keep the plot in place at the next redraw
- A graph opened from a .ai file now saves `placedArt` too. Moving or
  restyling one of its labels before the first redraw no longer moves or
  stretches the plot.
- Type > Create Outlines on a graph's labels now adjusts the saved bounds,
  so the outlines do not read as a move at the next redraw. A move of
  the graph made before the outlining is still followed.
- A `placedArt` with no width or height falls back to the bounds of all
  of the art, as a graph saved without it does.
- `art_bounds` moves to the doc crate so the .ai reader can use it.
- docs/mcp.md describes `placedArt`, `placed` and when a redraw follows
  a move.
- Tests: a legend across the top, a legend after a right value axis and
  legend labels of several lines keep the plot in place through label
  size changes; moving a category label on its own; outlining labels
  before and after a move; a flat `placedArt`; a label moved in an
  opened .ai graph.
2026-11-14 08:47:03 -08:00
dotCooCoo 4cfad8e56b Merge main into fix/ai-envelope-budget-warped-type 2026-11-14 07:51:15 -08:00
dotCooCoo 7d76b35710 .ai save: type written as outlines keeps wrapping by its bounds
Type that the editing copy writes as its outlines (mirrored type, type in
a clip or symbol, type the text document can't hold) put its Text Wrap
Options on the group of glyph outlines. The reader then wrapped area type
around the glyph shapes instead of the type's bounds, so the wrap region
changed when the file was opened.

The group now ends with an unpainted closed rectangle at the type's
geometric bounds, with the type's lock and hidden state, that carries the
wrap options; the group keeps the type's name and has no options of its
own. The `.ai` reader already reads an unpainted path with its own
options (`text_wrap` in crates/eps/src/import/ai/read/document.rs), and
wrap resolution descends into a group without options. The rectangle
counts toward the object limit; without room for it the options are left
out with the limit's warning. Type without finite bounds gets no
rectangle, as it had no wrap region before saving.
2026-11-14 07:48:03 -08:00
dotCooCoo f4492c3627 Merge main into fix/ai-wrap-options-edge-cases 2026-11-14 07:19:26 -08:00
BFlat 3a80dfcd36 Merge pull request #7471 from dotCooCoo/fix/followup-7319
.ai save: a clipping path cut away outside keeps its text wrap options
2026-11-14 21:55:38 +07:00
BFlat cbba5e85fe Merge pull request #7528 from dotCooCoo/feat/ai-style-named-gradients
PDF/.ai import: graphic styles that paint with a named gradient load with it
2026-11-14 21:54:55 +07:00
BFlat cb99b78a40 Merge pull request #7441 from dotCooCoo/fix/eps-johab-code-space
EPS import: KSC-Johab type reads one-byte ASCII codes
2026-11-14 21:54:39 +07:00
BFlat a15b44fbe4 Merge pull request #7492 from dotCooCoo/fix/eps-bitmap-glyph-rollback-test
EPS: a test covers type taken back with its color bitmap glyph images
2026-11-14 21:51:13 +07:00
dotCooCoo 80854eb4b8 Merge main into fix/export-bakes-symbol-art-effects 2026-11-14 06:00:09 -08:00
BFlat 94237e00a9 Merge pull request #7268 from dotCooCoo/fix/ai-warped-image-pieces-cropped
.ai export: the pieces of a warped image write only the pixels they show
2026-11-14 20:38:46 +07:00
BFlat 31f6a9f15e Merge pull request #7367 from dotCooCoo/fix/ai-calligraphic-samples
.ai import: Calligraphic paths with pen samples keep their drawn look
2026-11-14 20:38:22 +07:00
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
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 efb31aa51a PDF and EPS export: gradients name only the spot inks of stops that color something
A gradient's Separation or DeviceN space, and EPS's %%DocumentCustomColors,
named the spot ink of every linked stop. A stop out of order whose
neighboring stretches have no width, a stop at a tint of 0 without process
plates, and in PDF a stop whose stretches are fully transparent print no
ink, but their spot inks were still declared, so separations got an empty
plate.

- vectorcraft-color: Gradient::drawn_stops (the rule Document Info uses,
  moved here) and Gradient::reached_stops (every stop taken as opaque).
- PDF: Separation and DeviceN shadings, the Perceptual spot shadings and
  the spot-image warning name only inks of drawn stops at a tint above 0
  or with process plates; other stops are written with no ink, so their
  process inks and RGB or Lab colors no longer shape the space either.
- EPS: the same with reached stops, since EPS writes stops opaque; a
  transparent spot stop keeps its ink.

Output is unchanged when every stop colors part of the gradient and every
spot stop has a tint above 0 or process plates.
2026-11-14 04:11:40 -08:00
dotCooCoo ebf498a823 EPS import: kshow runs its procedure between the characters of a composite font
In a composite font the file carries (FMapType 2, or a CMap), kshow ran
its procedure zero times. It now runs between each two characters with
the values of their codes (font number times 256 plus code, or the CMap
code), and the next character follows where the procedure moves the
current point (PLRM 3rd ed., kshow). What the procedure draws goes after
the type, outside the glyphs' group, as for live type.
2026-11-14 03:20:55 -08:00
dotCooCoo 0397bfa47f Merge main into fix/ai-calligraphic-samples 2026-11-14 02:53:05 -08:00
dotCooCoo 2992ec6aa0 Merge main into fix/followup-7319 2026-11-14 02:51:49 -08:00
dotCooCoo b59ec11b32 Export: symbol art placement skips instances the export leaves out
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.
2026-11-14 02:45:49 -08:00
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 1780584f8a Merge main into fix/ai-wrap-options-edge-cases 2026-11-14 02:41:43 -08:00
dotCooCoo 5c4f96fc96 Merge main into fix/eps-cshow-composite-codes 2026-11-14 02:35:54 -08:00
dotCooCoo 110cf34f29 Merge main into feat/ai-import-kinsoku-settings 2026-11-14 02:32:17 -08:00
dotCooCoo ad628c0f3e Merge main into fix/ai-envelope-budget-warped-type 2026-11-14 02:21:54 -08:00
dotCooCoo 4678bda849 Merge main into fix/eps-ryumin-light-h 2026-11-14 02:18:10 -08:00
dotCooCoo 9965454983 Merge main into fix/eps-bitmap-glyph-rollback-test 2026-11-14 02:17:57 -08:00
dotCooCoo f21c9561c5 Merge main into fix/ai-warped-image-pieces-cropped 2026-11-14 02:14:20 -08:00
dotCooCoo cbbed9fa6c Merge main into fix/eps-johab-code-space 2026-11-14 02:08:25 -08:00
dotCooCoo df3d012e1f Merge main into fix/export-bakes-symbol-art-effects 2026-11-14 02:07:20 -08:00
dotCooCoo cdd6ffa1f2 PDF/.ai import: graphic styles that paint with a named gradient load with it
A graphic style from a .ai or EPS library whose fill, or the fill or
stroke of a style of one paint, paints with one of the file's gradients
by name was left out of the library. Such styles now load with that
gradient at the style's angle. The style stores only the gradient's name
and angle, so the gradient is fitted to the bounds of each object the
style is applied to; this placement is VectorCraft's own rule.

- A style of one paint reads a gradient instance's fill or stroke as
  that gradient; a gradient outside an instance is still not read.
- A fill filter paints with its last paint: a color, a gradient or a
  pattern replaces whichever of the others came before it.
- A style naming a gradient the file doesn't define, or painting with a
  pattern, is still left out.

Docs: docs/mcp.md, graphicStyle.loadLibrary params, progress doc.
2026-11-14 02:05:00 -08:00
dotCooCoo c786f75349 Merge main into fix/ai-envelope-budget-warped-type 2026-11-14 01:56:13 -08:00
dotCooCoo 7517ef0db3 Merge main into fix/ai-warped-image-pieces-cropped 2026-11-14 01:54:59 -08:00
BFlat 111ceddb9b Merge pull request #7383 from dotCooCoo/feat/ai-art-brush-options
.ai import and save: Art brushes keep None, their width, scale and flips
2026-11-14 16:54:16 +07:00
dotCooCoo 79e719dcdd Merge main into fix/export-bakes-symbol-art-effects 2026-11-14 01:53:06 -08:00
BFlat 158e7eed5c Merge pull request #7500 from dotCooCoo/fix/eps-freeform-field-once
EPS: a freeform gradient's image drawn more than once writes its samples once
2026-11-14 16:52:10 +07:00
dotCooCoo 66535b725b Merge main into fix/eps-ryumin-light-h 2026-11-13 23:05:31 -08:00
dotCooCoo 05c652f9fc Merge main into fix/export-bakes-symbol-art-effects 2026-11-13 23:04:23 -08:00