Commit Graph
5947 Commits
Author SHA1 Message Date
BFlat 06d776e220 Merge pull request #7757 from dotCooCoo/feat/3d-classic-preserve-spot
3D (Classic): Preserve Spot Colors keeps spot inks in shaded faces
2026-11-15 15:45:01 +07:00
BFlat 4b7af3b6c7 Merge pull request #7792 from dotCooCoo/fix/trace-abutting-seams
Image Trace: Abutting traces draw seam fills under their paths
2026-11-15 15:44:43 +07:00
BFlat 7e7d229ac9 Merge pull request #7782 from dotCooCoo/fix/a-colorized-warped-image-decodes-its-coverage
Legacy .ai: a colorized warped image works out its coverage once
2026-11-15 15:44:35 +07:00
BFlat f8edea8c4b Merge pull request #7787 from dotCooCoo/fix/symbol-instances-are-clicked-and-marquee-touched
Selection: symbol instances are hit where their art draws past their box
2026-11-15 15:44:27 +07:00
BFlat 9643b21496 Merge pull request #7786 from dotCooCoo/feat/variable-options-kind
Variables: Variable Options changes a variable's kind as well as its name
2026-11-15 15:44:15 +07:00
BFlat 792cc96217 Merge pull request #7784 from dotCooCoo/fix/a-nan-spot-tint-from-a-file-reaches-plate
Print: a spot or Registration tint that is not a finite number prints no ink
2026-11-15 15:44:07 +07:00
BFlat febb54d6ab Merge pull request #7788 from dotCooCoo/fix/a-gradient-drawn-as-an-image-turns-rgb-because
PDF export: a spot stop that prints nothing keeps a gradient image in CMYK
2026-11-15 15:43:58 +07:00
BFlat f94b97c4d5 Merge pull request #7789 from dotCooCoo/fix/an-opaque-16-bit-cmyk-tiff-s-inks-are-rounded
TIFF: an opaque 16-bit CMYK TIFF's inks are rounded to 8 bits for display
2026-11-15 15:43:49 +07:00
BFlat cbadd8c14b Merge pull request #7791 from dotCooCoo/fix/path-commands-do-not-skip-locked-or-hidden-paths
Artwork Cleanup: path commands take locked and hidden art named by ids
2026-11-15 15:43:35 +07:00
BFlat df984b2a02 Merge pull request #7551 from dotCooCoo/fix/hi-missing-message-rows
i18n: Hindi translates 116 status and error messages that its catalog lacked
2026-11-15 14:43:12 +07:00
BFlat 97c3226d72 Merge pull request #7773 from dotCooCoo/feat/variables-panel-sort-columns
Variables: Variables, Objects and type columns sort the variable list
2026-11-15 14:43:04 +07:00
BFlat 6fe176f997 Merge pull request #7428 from dotCooCoo/feat/ai-save-nested-envelope
.ai save: type in an envelope stays editable
2026-11-15 14:42:55 +07:00
BFlat 871dc96f7d Merge pull request #7775 from dotCooCoo/feat/recolor-new-row
Recolor Artwork: New Row adds a row that current colors can be merged into
2026-11-15 14:42:46 +07:00
BFlat c495d50752 Merge pull request #7756 from dotCooCoo/fix/clip-path-item-effects-order
Effects: a painted clipping path's fill and stroke effects apply before a group's
2026-11-15 14:42:37 +07:00
BFlat d4ab89f6e4 Merge pull request #7780 from dotCooCoo/fix/a-background-file-save-or-failed-completion
Status bar: a background save or failed job keeps a newer status line
2026-11-15 14:42:29 +07:00
BFlat a768464705 Merge pull request #7785 from dotCooCoo/fix/automatic-keeps-every-level-of-clean-16-level
Image Trace: Automatic keeps every level of clean flat art of up to 16 levels
2026-11-15 14:42:13 +07:00
BFlat 04b91c748e Merge pull request #7648 from dotCooCoo/feat/graph-type-dialog
Graphs: Graph Type is a dialog of its own with type buttons and a page per axis
2026-11-15 14:42:05 +07:00
dotCooCoo 63dab14ee7 Image Trace: Abutting traces draw seam fills under their paths
An Abutting trace with Fills now holds a "Seam Fills" group under its
paths. For each color it has one stroke, 1.5 image pixels wide, along
the edges where a filled path of that color meets a filled path drawn
after it, in that color. A renderer that anti-aliases each path on its
own no longer shows a light hairline along those edges. The traced
paths and their shared edges do not change, and edges against the
image's border, a transparent area or a color left out get no stroke.

- vectorcraft-trace: `seam_fills` finds the segments two filled paths
  share and strokes them in the lower path's color (one stroke per
  gradient path). Overlapping, traces without Fills and Flat Logo get
  none.
- Image Trace commands: the group comes under every path (right above
  the hidden image in a live trace). Expand keeps it, Expand by color
  leaves it under the color groups, and a trace whose paths have more
  than half of the anchor limit gets no seam fills.

Docs: docs/mcp.md, the params text, docs/target-app-parity.md.
2026-11-14 23:15:50 -08:00
dotCooCoo 0f67bbbddf Merge main into feat/3d-classic-preserve-spot 2026-11-14 22:56:34 -08:00
BFlat 4a5f07b8c3 Merge pull request #7753 from dotCooCoo/feat/info-panel-tool-readouts
Info: the panel shows the move, transform, Zoom and Paintbrush values of the tool in use
2026-11-15 13:50:30 +07:00
BFlat 941277aa38 Merge pull request #7747 from dotCooCoo/feat/3d-render-wireframe
3D and Materials: Render Settings › Wireframe draws the live 3D effect as its faces' edges
2026-11-15 13:50:13 +07:00
BFlat fd6b3fb9a9 Merge pull request #7748 from dotCooCoo/feat/live-paint-selection-triple-click
Live Paint: a Live Paint Selection triple-click selects the parts of the same paint
2026-11-15 13:49:42 +07:00
BFlat b43372361e Merge pull request #7746 from dotCooCoo/fix/replace-clipped-psd-keeps-transform
Place: a plain image replacing a clipped PSD keeps its scale and rotation
2026-11-15 13:49:22 +07:00
BFlat bdfd445eef Merge pull request #7662 from ruchirguitar/feat/style-neon-glow
Graphic Styles: built-in Neon & Glow graphic style library
2026-11-15 13:49:11 +07:00
dotCooCoo 1f841dbeec Variables: Variable Options changes a variable's kind as well as its name
Variable Options in the Variables panel only renamed a variable, and no
command changed a variable's kind. variable.rename now takes
{name, newName?, kind?} and renames the variable, changes its kind, or
both, in one undo step, with none when nothing changes. A null or empty
value, an unknown kind, a taken name and locked variables are refused.

A kind change unbinds the objects that can't hold the new kind (text
keeps type with no other text variable, image keeps image objects,
graph keeps graph roots, visibility keeps every object) and drops the
variable's values in every data set. The dialog shows the variable's
name and kind and sends both.
2026-11-14 22:47:04 -08:00
dotCooCoo b2a83415d0 Merge main into fix/path-commands-do-not-skip-locked-or-hidden-paths 2026-11-14 22:44:05 -08:00
dotCooCoo 396b6d620a Merge main into fix/symbol-instances-are-clicked-and-marquee-touched 2026-11-14 22:40:48 -08:00
dotCooCoo 1284dc6927 PDF export: a spot stop that prints nothing keeps a gradient image in CMYK
A linear or radial gradient of CMYK stops drawn as an image (a dithered
fill, or a Perceptual gradient that is not written as a spot shading)
was written as an RGB image whenever any stop was linked to a spot
swatch, even a stop that colors nothing: one inside fully transparent
stretches, one out of order between stretches with no width, or one at
a tint of 0 without process plates. The spot color warning already
skipped those stops.

The image now falls back to RGB only when a stop prints a spot ink, the
same test the warning and the spot shadings use. A drawn spot stop at a
tint above 0, or with process plates, still gives an RGB image with the
warning.
2026-11-14 22:38:00 -08:00
dotCooCoo 6f9f9dfa95 Image Trace: Automatic keeps every level of clean flat art of up to 16 levels
Automatic counted flat art's colors with a median cut that never splits a
box narrower than 24 levels, so evenly spaced levels about 17 apart (gray)
or 13 apart (sepia) shared boxes: 16 clean gray levels traced in 14 colors
and 16 sepia levels in 9.

When flat art's pixels fall in 2 to 16 histogram bins, each holding at
least the share a color needs to be counted, and every two bins lie at
least 12 levels apart on some channel, Automatic now takes one color per
bin. If mixed-color merging then finds two of those colors mixed through
each other (dithering, or a thin region beside a close level), the picture
is counted by median cut as before, with rare colors added.

Anti-aliased art whose levels lie more than 20 apart is counted level by
level too, because its blended edge pixels are left out of the count.
Noisy pictures, anti-aliased art whose levels lie 20 or fewer apart and
pictures of 17 levels or more are counted as before, and continuous-tone
classification is unchanged.
2026-11-14 22:33:16 -08:00
dotCooCoo b867dee0b8 Merge main into fix/an-opaque-16-bit-cmyk-tiff-s-inks-are-rounded 2026-11-14 22:30:11 -08:00
dotCooCoo d8ba795824 Docs: the opaque 16-bit CMYK TIFF line links the PNG rescaling section 2026-11-14 22:29:59 -08:00
dotCooCoo bbaa31ca9f Merge main into fix/a-nan-spot-tint-from-a-file-reaches-plate 2026-11-14 22:26:42 -08:00
dotCooCoo f0a7c76bce Merge main into fix/a-background-file-save-or-failed-completion 2026-11-14 22:26:06 -08:00
dotCooCoo 50f2b2d07c Merge main into fix/a-colorized-warped-image-decodes-its-coverage 2026-11-14 22:25:49 -08:00
dotCooCoo c5b8754eb7 Recolor Artwork: New Row adds a row that current colors can be merged into
The Assign tab has a New Row button before Merge. With art selected it
adds a row with no current colors above the first selected row, or at
the top, with that row's new color, and selects it. Merge with the new
row first moves the other rows' current colors into it, and they take
its new color. The row shows an empty slot until then.

An empty row recolors nothing and does not count toward Colors. OK
sends it with the other rows. recolor.apply adds no library swatch for
it and gives a rewritten color group no color from it, in the dialog's
groupColors and in the command's default.
2026-11-14 22:22:55 -08:00
dotCooCoo d5ccac5646 Variables: Variables, Objects and type columns sort the variable list
The Variables panel drew each variable as one "name · object" line in
the order the variables were defined, with no headers and no sorting.

The list now has three columns with headers: the type icon, Variables
and Objects. A click on a header sorts the list by that column, and a
second click reverses the order. The new command variable.sort {by:
name|object|type|none, descending?} sets the order, which is panel
state: not saved and not an undo step. variable.list lists the
variables in that order and reports it as sort. An unknown by, or a
descending that is not true or false, is an error.
2026-11-14 22:21:08 -08:00
dotCooCoo 496cdb54f5 Merge main into feat/ai-save-nested-envelope 2026-11-14 21:44:34 -08:00
dotCooCoo b8d4780611 3D (Classic): Preserve Spot Colors keeps spot inks in shaded faces
Extrude & Bevel (Classic), Revolve (Classic) and Rotate (Classic) take a
preserveSpotColors param and a Preserve Spot Colors checkbox on the
Lighting tab. When it is on, a fill or stroke linked to a spot or global
swatch stays linked on every face: the highlight lowers the swatch's
tint, and a face that darkens gets black over it, multiplied and
overprinting, so a spot color keeps its own plate in separations and PDF.
The checkbox is unavailable while Shading Color is Custom, and the param
does nothing then. With the option off, the faces draw as before. A
value that is not true or false is refused.
2026-11-14 21:43:44 -08:00
BFlat 1a596c0362 Merge pull request #7653 from dotCooCoo/fix/svg-export-confined-image-links
MCP: SVG output under read roots refuses to name a linked image file outside them
2026-11-15 12:38:16 +07:00
BFlat 82b0c915a3 Merge pull request #7734 from dotCooCoo/feat/place-show-import-options
Place: Show Import Options asks for each file's import options, or uses the ones confirmed last
2026-11-15 12:38:07 +07:00
BFlat b4bd916141 Merge pull request #7737 from dotCooCoo/feat/select-similar-button
Control bar: Select Similar Objects selects by the attribute its menu keeps
2026-11-15 12:37:57 +07:00
dotCooCoo db1feeea10 Effects: a painted clipping path's fill and stroke effects apply before a group's
A clipping path that paints a fill or stroke kept the geometry effects of
those fills and strokes live, so a geometry effect on the clip group or on
a group around it reshaped the path first and the fill's or stroke's
effect applied after it, on the canvas and in export alike. Unpainted
clipping paths already applied them first.

The clipping path now becomes one path per fill and stroke with those
effects applied, as an unpainted one does, in a group marked as such
pieces (`NodeExtras::clip_pieces`, saved with the document). `clip_paint`
paints that group's fill pieces behind the clipped art and its stroke
pieces over it, as the path paints its fills and strokes, also after an
effect around it turns a piece into a compound path or puts it in a group.
The clip group's visual bounds take in the stroke pieces' width, and HP-GL
export draws the clipping path once, in its stroke pieces.

An export of a painted clipping path with such effects in a clip group
without effects of its own also keeps its fill and stroke now, where the
baked pieces painted nothing.
2026-11-14 21:37:54 -08:00
BFlat 6dd478a420 Merge pull request #7456 from dotCooCoo/feat/ai-save-envelope-case
.ai save: a top object with uneven sides stays a live envelope
2026-11-15 12:37:47 +07:00
BFlat acf04dd00f Merge pull request #7724 from dotCooCoo/fix/ai-off-artboard-art
.ai import: symbol instances in older files are read, so art outside the artboard opens
2026-11-15 12:37:39 +07:00
BFlat a1f10d4566 Merge pull request #7643 from dotCooCoo/fix/aligned-paint-rows-of-design-art
Graphs: aligned paint and stroke rows given with a design's art are rows of its stack
2026-11-15 12:37:29 +07:00
dotCooCoo bcadfc7ac8 Info: the panel follows the tool in use
While the Selection, Direct Selection or Group Selection tool moves the
selection, or the Gradient tool draws a vector, W and H show the change
in x and y, with the distance and the angle under them. A Scale tool
drag shows its percentages; a Rotate, Reflect or Shear tool drag shows
the center of the selection's box and its angles. The Zoom tool adds the
magnification and the Paintbrush the name of its brush.

W and H follow Use Preview Bounds. With several objects selected, the
panel shows only the fill, stroke and type values they share, and Show
Options adds a tint's swatch and percentage and a gradient's swatch name.

- Tool::readout and Readout (crates/tools/src/readout.rs).
- info.readout returns the selection's size and the tool's readout.
- Docs: docs/mcp.md, docs/ui-parity.md.
2026-11-14 21:31:28 -08:00
dotCooCoo 923ba3d1bb 3D and Materials: the 3D area row lists Render Settings › Wireframe and its tests 2026-11-14 21:22:26 -08:00
dotCooCoo 27a0dc89d4 3D and Materials: Render Settings › Wireframe draws the live 3D effect as its faces' edges
The 3D and Materials panel gets a Render Settings menu with Wireframe.
Extrude & Bevel, Revolve, Inflate and Rotate take a `render` parameter,
`{mode: "shaded" | "wireframe"}`. In wireframe mode the effect stays
live and draws the edges Expand as Wireframes gives, each once, as
0.5 pt black strokes with round joins, with no shadow or graphics. The
object's own opacity, blending mode and opacity mask apply to the mesh.

Commands that set wireframe mode are checked against the edges it
draws: the shaded surface's paint copies, graphics and shadow limits do
not refuse them. A `render` value that is not an object holding only a
valid `mode`, and `render` on the 3D (Classic) effects, are refused.

Docs: docs/three-d.md, docs/mcp.md, docs/effects-parity.md,
docs/target-app-parity.md.
2026-11-14 21:04:33 -08:00
dotCooCoo d62de12db6 Live Paint: Live Paint Selection triple-click selects parts of the same paint
A triple-click with the Live Paint Selection tool on a face now selects
every face of its group with that face's fill, and on an edge every edge
of its group that draws with that edge's stroke paint. Hidden faces and
edges are left out. Before, a triple-click selected only what its third
click selected.

With Shift held, the parts are toggled from the selection there was
before the clicks: the tool keeps what the double-click and the Shift
clicks of the series toggled, and the triple-click toggles those back.

docs/target-app-parity.md's Live Paint Selection line says so.
2026-11-14 21:02:05 -08:00
dotCooCoo 82308b647f Merge main into fix/a-background-file-save-or-failed-completion 2026-11-14 20:58:21 -08:00