Commit Graph
4300 Commits
Author SHA1 Message Date
BFlat da9d9f8cf4 Merge pull request #7498 from dotCooCoo/fix/graph-design-art-style-redefine
Graphs: graphic styles leave a design's art in a series unlinked
2026-11-14 19:37:45 +07:00
dotCooCoo bfa0c8e15e Dimensions: an opened file redraws its labels in its own composite fonts
When a document opens or is reverted with dimensions whose art is not in
its color mode, the dimensions are drawn again before the document's
composite fonts are registered. A label whose font names a composite font
that another open document defines differently was measured in that other
definition, so it was centered off its anchor. The redraw now measures the
labels in the document's own composite fonts, in front and in the back.
2026-11-14 04:31:29 -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 b3fd92ccdc PDF export: CMYK images that keep their numbers carry their ICC profile
A CMYK TIFF written again, a CMYK JPEG that the Compression settings
resample or compress again, and a CMYK image written with its mask as
its soft mask lost the CMYK profile the image embeds. Such an image is
now written in an ICCBased space holding that profile, byte for byte,
when output.profiles is all or taggedSource, and in PDF/A-2b, PDF/X-3
and PDF/X-4 unless profiles is destination. Pixels the Output settings
convert are never tagged with it.

A CMYK JPEG embedded as it is now follows the same rule instead of
always carrying its own ICC_PROFILE segments: with profiles none it is
DeviceCMYK, and PDF/X-1a export no longer refuses a CMYK JPEG that
carries a profile.

A profile tags an image only when it is at most 16 MiB and its declared
size, acsp signature, device class, CMYK color space and tag table are
well formed. Tagged CMYK documents blend transparency in the document's
CMYK profile space, not in an image's own; without that space they
blend in DeviceCMYK, or keep their RGB space in PDF/A.
2026-11-14 03:59:32 -08:00
dotCooCoo fe82f68d6f TIFF: a 16-bit CMYK or gray TIFF with alpha converts at 16 bits
Place, Open and relink read a CMYK or grayscale TIFF with an alpha
channel through extra_samples_tiff_rgba, which cut every 16-bit sample
to its high byte before converting it. A faint ink or a low alpha was
lost: cyan 129 at full alpha showed as white, and an alpha of 129
became fully transparent.

The samples are now normalized at the depth the file stores them, and
only the resulting color and alpha are rounded to 8 bits (a 16-bit
alpha to the nearest 8-bit value). Associated alpha is divided out at
16 bits. A pixel whose associated alpha is zero now has no color,
instead of keeping its stored color. TIFF 6.0's Associated Alpha
Handling section states this arithmetic and the zero-alpha rule for
RGB data; applying them to CMYK and gray samples is VectorCraft's own
rule.
2026-11-14 03:44:41 -08:00
dotCooCoo bbf3e5ca7e Merge main into fix/plugin-store-folder-lock 2026-11-14 03:22:06 -08:00
dotCooCoo b1d364033e Artwork Cleanup: Combine and Join Point Text keep hidden and locked pieces apart
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.
2026-11-14 02:45:50 -08:00
dotCooCoo 2249b71e03 Merge main into fix/followup-7305 2026-11-14 02:38:29 -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
dotCooCoo 9834c58b66 Merge main into fix/links-stored-brush-art 2026-11-14 02:26:44 -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 bf3a23d031 Merge main into fix/graph-label-paint-recolor 2026-11-14 02:19:54 -08:00
dotCooCoo cee68c525a Merge main into fix/reflected-dimension-line 2026-11-14 02:15:24 -08:00
ruchirguitar 831c477ad6 Symbols: built-in Weather Icons symbol library 2026-11-14 15:43:16 +05:30
dotCooCoo 0846f1eaf7 Merge main into fix/live-shape-replay-negative-radius 2026-11-14 02:12:21 -08:00
dotCooCoo 119a86b501 Merge main into fix/action-batch-step-number 2026-11-14 02:12:03 -08:00
dotCooCoo 1bf5accc0d Merge main into fix/remove-breaks-named-locked-type 2026-11-14 02:11:05 -08:00
dotCooCoo 997aaa61b9 Merge main into fix/live-paint-expand-drawn-stroke 2026-11-14 02:08:40 -08:00
dotCooCoo a041fe04f0 Merge main into fix/dcs-placement-clip-keeps-file-clip 2026-11-14 02:08:11 -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 3c58bec2ed Merge main into fix/smooth-keeps-closed-start 2026-11-14 02:00:55 -08:00
dotCooCoo d9f80a15fd Merge main into fix/map-links-stop-plates 2026-11-14 01:57:06 -08:00
dotCooCoo fb13d2045d Merge main into feat/cjk-tsume 2026-11-14 01:56:33 -08:00
BFlat edb228ac33 Merge pull request #7402 from dotCooCoo/fix/more-int-param-wrong-type
MCP: path, type, panel, library, style and ruler indices refuse a wrong-type value
2026-11-14 16:54:34 +07:00
BFlat 3c7d72f8bc Merge pull request #7333 from dotCooCoo/fix/graph-series-gradient-per-mark
Graphs: a kept gradient takes the same place on every mark of its series
2026-11-14 16:54:26 +07:00
dotCooCoo 15d6e107b6 Merge main into fix/remove-breaks-named-locked-type 2026-11-14 01:54:04 -08:00
BFlat 4c86cb97d3 Merge pull request #7489 from dotCooCoo/fix/instance-row-raster-effects
Effects: raster effects on a symbol instance's fill or stroke are drawn
2026-11-14 16:52:35 +07:00
dotCooCoo 3e08b96690 Merge main into fix/no-op-undo-steps 2026-11-14 01:52:17 -08:00
BFlat 92b89f88a8 Merge pull request #7386 from dotCooCoo/fix/mcp-docs-stack-file
Docs: script stack frames and $.fileName name the file of the code
2026-11-14 16:51:41 +07:00
BFlat ddfa381c91 Merge pull request #7273 from dotCooCoo/fix/knockout-groups-flat-masks
PDF/SVG export: knockout groups nest no deeper with more elements
2026-11-14 16:51:33 +07:00
BFlat 895307e58b Merge pull request #7487 from dotCooCoo/fix/paste-graph-label-styles
Paste: graphs bring and follow the styles and swatches their labels keep
2026-11-14 16:51:25 +07:00
dotCooCoo 8969633c71 Flatten: boxes staggered right and down meet only the box before in the grouping sweep
When an arriving box that joins everything it overlaps covers an open
box to the right and below, and starts lower than it, the open box now
keeps only its part above the arriving box's top in the sweep's tree.
Any later box that would have met the removed part meets the arriving
box instead, which is open at least as long and in the same set, so
the groups stay the same. A box held by an open box is not opened and
cuts nothing short.

512 boxes, each 1 pt right of and below the one before, now meet 511
open boxes in the sweep instead of 130,816, with and without
transparency. Staggering right and up in sweep order still meets every
earlier open box.

The every-pair test oracle skips boxes that aren't finite, as the
sweep does.
2026-11-14 01:51:12 -08:00
BFlat 1c324e47a1 Merge pull request #7312 from dotCooCoo/fix/polygon-sides-refused
Shapes: addon.shapes commands refuse values outside their ranges
2026-11-14 16:51:03 +07:00
dotCooCoo 06e6ee943b Merge main into fix/action-batch-step-number 2026-11-13 23:14:57 -08:00
dotCooCoo 5fbb4f2c64 Merge main into fix/links-stored-brush-art 2026-11-13 23:11:59 -08:00
dotCooCoo e76982bfad Artwork Cleanup: named type on a locked artboard stays out of the text tools
Add a test that Remove Breaks leaves type on a locked artboard as it is
when ids names it, with no undo step. Rewrap the Text tools paragraph
in docs/mcp.md and name the tests in docs/target-app-parity.md.
2026-11-13 23:08:11 -08:00
dotCooCoo b4a7f106ac Merge main into fix/smooth-keeps-closed-start 2026-11-13 22:58:44 -08:00
dotCooCoo 25ff56c0b6 Merge main into fix/live-shape-replay-negative-radius 2026-11-13 22:57:58 -08:00
dotCooCoo 6e765f1848 Merge main into fix/dcs-placement-clip-keeps-file-clip 2026-11-13 22:47:26 -08:00
dotCooCoo ae05540f70 Merge main into feat/cjk-tsume 2026-11-13 22:46:57 -08:00
dotCooCoo cbdd3b4706 Merge main into fix/reflected-dimension-line 2026-11-13 22:46:36 -08:00
BFlat 6beeb9e2a4 Merge pull request #7262 from dotCooCoo/feat/smooth-cursor-without-path
Smooth: the cursor shows Not Allowed when no path is selected to smooth
2026-11-14 13:43:44 +07:00
BFlat 2169e229f6 Merge pull request #7376 from dotCooCoo/fix/int-param-wrong-type
MCP: an integer given as a string or a fraction is refused as the wrong type, not reported as missing
2026-11-14 13:43:27 +07:00
BFlat 18266da1e1 Merge pull request #7328 from dotCooCoo/fix/save-unused-option-notes
Save, Export for Screens: warnings name an option the file doesn't read
2026-11-14 13:42:55 +07:00
BFlat be93e4b3f2 Merge pull request #7377 from dotCooCoo/fix/symbol-expand-reset-bbox
Symbols: Break Link and Expand keep an instance's bounding box
2026-11-14 13:42:23 +07:00
BFlat 4b3df93745 Merge pull request #7371 from dotCooCoo/fix/batch-swatch-default-paint
Swatches: swatch steps in a batch change the paints for new art
2026-11-14 13:42:04 +07:00
BFlat 7fd4564c0c Merge pull request #7390 from dotCooCoo/fix/hyphenation-exceptions-relayout
Type: hyphenated type lays out again when the hyphenation exceptions change
2026-11-14 13:41:57 +07:00
BFlat d8f180006a Merge pull request #7382 from ncic/pencil-alt-close-straight
Pencil: a closed stroke closes with a straight segment
2026-11-14 13:41:27 +07:00
BFlat ecd4b80af2 Merge pull request #7395 from storytold/fix/warichu-test-text-ops
Tests: warichu PDF check reads only text objects
2026-11-14 13:41:10 +07:00
dotCooCoo 8887806cb2 Undo: no step when Randomize Opacity or a type setting changes nothing
- addon.arrange.randomizeOpacity, type.orientation.vertical and .horizontal,
  type.opticalMarginAlignment, type.systemLayout and type.fractionalWidths
  run through edit_if_changed (the Edit Colors helper) and record an undo step
  only when an opacity, a direction or a setting changes.
- A test for each command; the params text says so, and docs/mcp.md for the
  commands it describes.
2026-11-13 22:40:01 -08:00