Commit Graph
2851 Commits
Author SHA1 Message Date
BFlat 6dc068b162 Merge pull request #7703 from dotCooCoo/feat/color-management-policies
Color Settings: RGB and CMYK policies keep, take off or convert a document's profiles on open
2026-11-15 15:46:48 +07:00
BFlat a9b43489a7 Merge pull request #7769 from dotCooCoo/feat/align-key-anchor
Align: a Shift-clicked anchor becomes the key anchor that Align and Distribute keep in place
2026-11-15 15:45:20 +07:00
BFlat e5f15de4d6 Merge pull request #7770 from dotCooCoo/feat/composite-custom-character-sets
Type: composite fonts take custom character sets
2026-11-15 15:45:12 +07:00
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 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 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 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 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 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 37052dd07a Type: Composite Fonts takes custom, entry and char from ui.dialog.set on open
The dialog opened without the custom, entry and char fields, so
ui.dialog.set refused them until Custom was clicked or an entry typed.
The spec now lists them in its inputs, and the dialog opens with
custom off and an empty entry.
2026-11-14 23:04:09 -08:00
dotCooCoo 0f67bbbddf Merge main into feat/3d-classic-preserve-spot 2026-11-14 22:56:34 -08:00
dotCooCoo c0b1c2e144 Merge main into feat/color-management-policies 2026-11-14 22:51: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 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
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 d999d861de Color Settings: Convert to Working Space compensates CMYK black points
- CMYK colors converted between two loaded CMYK profiles now use the
  Color Settings black point compensation, as RGB colors already did:
  the conversion goes through linear ProPhoto RGB and maps the source
  profile's black onto the destination's.
- The edit.colorSettings, document.open and file.newFromTemplate params
  text and docs/mcp.md name file.newFromTemplate with the commands that
  apply the policies, and say that colorMode on open converts after the
  policies, through the profiles the document keeps.
- A test covers New from Template under the policies, and another the
  CMYK black point compensation.
2026-11-14 22:43:08 -08:00
dotCooCoo 53249e406c Align: Distribute's docs and params text describe the key anchor with spacing and to
object.distribute uses spacing with a key anchor, and to: "selection" or
"artboard" makes the key anchor an ordinary point. docs/mcp.md and the
object.distribute and object.distributeSpacing params text still said
both commands ignore to and spacing with anchor points selected.
2026-11-14 22:31:22 -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 18fe65acd6 Type: composite fonts take custom character sets
Type > Composite Fonts... has Custom: named character sets, each setting
the characters it lists in its own font, style, size, baseline and
scales ahead of their class. The later of two sets that list a character
sets it. Characters are added by Direct Entry or by Unicode code and
deleted one at a time, and the parts table scrolls when it grows.

- type.compositeFonts.set takes `custom`; part keys left out take the
  Kanji part's values. Sets are saved with the document and in
  .vccomposite files, and Export refuses a file over 4 MB.
- VectorCraft's own limits: 64 sets per font, 8,192 characters per set,
  each character once per set, up to U+FFFF and no control characters.
- The font database caches each font's character lookup.

Docs: docs/mcp.md, docs/type-parity.md, docs/target-app-parity.md.
2026-11-14 22:16:08 -08:00
dotCooCoo be32d6be89 Align: a Shift-clicked anchor becomes the key anchor that Align and Distribute keep in place
With Direct Selection, the point a Shift-click adds to two or more
selected anchor points is the key anchor. It is drawn as a larger filled
square in a frame, and the Align panel and the Control bar show the key
choice chosen as Align to Key Anchor. The Align buttons move the other
points to its x or y, and Distribute with a spacing places them from it.
A plain click still selects one point alone.

select.key takes {id, anchor} to set it, select.key {} cancels it, and
document.inspect reports it as keyAnchor. It goes when it is deselected,
deleted or left as the only selected point.
2026-11-14 22:14:03 -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
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 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 3c0dc77cef Merge main into fix/path-commands-do-not-skip-locked-or-hidden-paths 2026-11-14 20:46:33 -08:00
dotCooCoo bee46530d8 Place: a plain image replacing a clipped PSD keeps its scale and rotation
Replace measured the image inside a PSD or PSB file's clip group only
when the new file brought its own clipping path. A plain image placed
with `replace` over such a clip group took only the group's center and
came in at 100%, losing the image's scale and rotation. The image in
the group is now measured whenever the new art is an image, clipped or
not.
2026-11-14 20:40:45 -08:00
BFlat 6b3ae1c2f8 Merge pull request #7705 from dotCooCoo/fix/installed-script-runs-checked-text
Scripts: File › Scripts runs the text its check read, with includes from the checked folder
2026-11-15 11:38:16 +07:00
BFlat 2607a98c1f Merge pull request #7726 from dotCooCoo/feat/eraser-tip-variations
Eraser: Angle, Roundness and Size vary with Random, Pressure, Tilt, Bearing or Rotation
2026-11-15 11:37:51 +07:00
BFlat f3c093b6cd Merge pull request #7740 from dotCooCoo/feat/assign-profile-choices
Color management: Assign Profile offers Don't Color Manage, the working space or a profile
2026-11-15 11:37:43 +07:00
BFlat 511f36ed4c Merge pull request #7721 from dotCooCoo/fix/glyph-forms-review
Type: glyph forms and width forms follow the OpenType rules
2026-11-15 11:37:33 +07:00
BFlat dc8149cdf1 Merge pull request #7723 from dotCooCoo/fix/pdf-page-links-review
Import PDF: linked pages refuse placeholder .ai files, read the file once and keep blank pages
2026-11-15 11:37:26 +07:00
BFlat 3a2a8772f5 Merge pull request #7730 from dotCooCoo/fix/hpgl-9slice-art-bounds
Export: the HP-GL plot of the art's bounds places 9-slice and filtered symbol art before measuring
2026-11-15 11:37:09 +07:00
BFlat c7ed93dc31 Merge pull request #7736 from dotCooCoo/feat/pattern-move-tile-with-art
Pattern Options: Move Tile with Art moves the tile with the pattern's art
2026-11-15 11:36:50 +07:00
BFlat 94432bf2d0 Merge pull request #7729 from dotCooCoo/fix/pdf-image-profile-to-destination
PDF export: CMYK and other RGB destinations convert tagged images from their profile
2026-11-15 11:36:32 +07:00
dotCooCoo 39a4de61cb Merge main into fix/aligned-paint-rows-of-design-art 2026-11-14 20:00:33 -08:00
dotCooCoo d34e9a1c67 Merge main into fix/path-commands-do-not-skip-locked-or-hidden-paths 2026-11-14 19:50:41 -08:00
BFlat 0c1ac3bdc5 Merge pull request #7241 from dotCooCoo/fix/toggle-touch-mode-error
Tools: commands return the error when a tool cannot be chosen
2026-11-15 10:46:51 +07:00
BFlat 26878d3d0e Merge pull request #7715 from dotCooCoo/fix/svg-open-path-type-before-start
Type on a path: type on an open path can start before the path
2026-11-15 10:46:42 +07:00
BFlat 98b5d31f77 Merge pull request #7568 from dotCooCoo/fix/graph-design-art-aligned-rows
Graphs: aligned rows given with a design's art stay rows of its stack
2026-11-15 10:46:33 +07:00
BFlat d094a3c449 Merge pull request #7601 from ruchirguitar/feat/brush-tech-circuit
Brushes: built-in Tech Circuit brush library
2026-11-15 10:45:11 +07:00
dotCooCoo 85063b4108 Merge main into feat/place-show-import-options 2026-11-14 19:29:13 -08:00
dotCooCoo e9cd607aae Merge main into fix/glyph-forms-review 2026-11-14 19:20:09 -08:00