Commit Graph
3013 Commits
Author SHA1 Message Date
dotCooCoo df155042d4 Merge main into feat/image-color-mask 2026-11-12 17:40:13 -08:00
BFlat f7a03f7899 Merge pull request #6991 from dotCooCoo/feat/recolor-theme-picker
Recolor Artwork: the Color Theme Picker picks new colors from the art on the canvas
2026-11-13 08:31:13 +07:00
BFlat 8bd948f9b4 Merge pull request #6996 from dotCooCoo/fix/align-artboard-distribute
Align: artboard Distribute buttons need three artboards with Align to Selection
2026-11-13 08:30:39 +07:00
BFlat 2716eab08e Merge pull request #6975 from dotCooCoo/fix/followup-6841
Document Info: Spot Color Objects leaves out fills and strokes at opacity 0
2026-11-13 08:30:19 +07:00
BFlat a6f89f8c85 Merge pull request #6976 from dotCooCoo/fix/followup-6847
Cutting Tools: weeding lines stop at an outline that lies on a line
2026-11-13 08:29:58 +07:00
BFlat 487ffbba4b Merge pull request #6994 from dotCooCoo/fix/paste-style-pattern-order
Paste: text styles that paint with a pattern are pasted after the patterns they use
2026-11-13 07:49:08 +07:00
BFlat 0d553f9a4d Merge pull request #6985 from dotCooCoo/fix/fonts-in-masks-and-patterns
Fonts: Find Font, Replace Missing Fonts and font lists include type in opacity masks and patterns
2026-11-13 07:48:52 +07:00
BFlat 24af0c146a Merge pull request #6938 from dotCooCoo/fix/pdf-large-page-export
Export As: a PDF without artboards opens Save PDF and its options
2026-11-13 07:48:44 +07:00
BFlat cd6d197c58 Merge pull request #6992 from dotCooCoo/fix/open-filter-grid-presets
File formats: File › Open has filters for graphic style libraries and perspective grid presets
2026-11-13 07:48:31 +07:00
BFlat b4bc86c45c Merge pull request #6942 from dotCooCoo/feat/cjk-insert-aki
Type: Insert Aki Left and Right add space before and after a character
2026-11-13 07:48:24 +07:00
BFlat 4b344e91ce Merge pull request #6960 from dotCooCoo/feat/3d-graphics-planar
3D and Materials: map graphics onto the planar faces of 3D objects
2026-11-13 07:10:09 +07:00
BFlat 2d22db13ff Merge pull request #6978 from dotCooCoo/fix/docinfo-brush-type-translations
Document Info: Brushes shows brush types in the interface language
2026-11-13 07:10:00 +07:00
dotCooCoo 3031fcf96d Cutting Tools: the weed params text keeps the spacing range in one key
The comma in "more than 0, at most 100000" split the `spacing` entry in
the params text of `addon.cutting.weed`, so the params check read
"at most 100000 (...)" as a key and every_description_parses failed.
The range now reads "more than 0 and at most 100000".
2026-11-12 16:01:28 -08:00
dotCooCoo addbcd918e Paste: text styles that paint with a pattern are pasted after the patterns they use
Paste placed character and paragraph styles before the patterns, symbols
and brushes they use, and compared each one with the document's before a
pattern it painted with had its final name. A style that painted with a
pattern added as "Dots 2" kept painting with the document's own "Dots",
or was matched to a document style of its name that paints with that
"Dots". A symbol whose art paints with such a pattern, and a brush whose
art sets type in a style renamed on the way in, were matched the same way.

Paste, and the symbol, brush, pattern and Libraries imports that add art
through it, now place each style, symbol, pattern and brush after the
ones it uses, as Load Character Styles and Load Paragraph Styles already
did, and relink the styles they add at the end. Pasted back into its own
document, each definition stays the document's of its name.
2026-11-12 15:59:36 -08:00
dotCooCoo 2a5d255217 File formats: File › Open has filters for graphic style libraries and perspective grid presets
File › Open already opened `.vcstyles` graphic style libraries in their
library panel and imported `.vcperspective` perspective grid presets, but
its dialog had no filter for either. It now lists "Graphic Style
Libraries" after "Swatch libraries" and "Perspective grid presets" after
"Print presets". "All readable files" still lists documents only.

Other Library… and Locate Library… in the swatch and graphic style
library panels list their library filter once; the swatch dialog listed
"Swatch libraries" twice.
2026-11-12 15:55:58 -08:00
dotCooCoo 632830947a Merge main into feat/recolor-theme-picker
Xf::new is test-only on main now: the Color Theme Picker's canvas layer builds its view transform with Xf::at and the canvas's interface zoom.
2026-11-12 15:54:28 -08:00
dotCooCoo c97cea8a65 Align: artboard Distribute buttons need three artboards with Align to Selection
With the Artboard tool chosen and Align to Selection, two selected artboards are the first and the last of the distribution, so the Align panel's and the Control bar's Distribute buttons are off until three are selected. With Align to Artboard the spacing places the second artboard from the active one, and two are enough.

The Distribute Spacing field takes negative values with the Artboard tool chosen, as artboard.distributeSpacing overlaps the artboards with a negative spacing. With other tools its lowest value stays 0.

Art inside two overlapping artboards now goes with the one first in artboard order when the artboard Align and Distribute commands move them, and stays when that artboard stays, as in the other artboard edits.
2026-11-12 15:49:46 -08:00
dotCooCoo fcec08e1bb Document Info: the clear-paint test expects Gradient Objects to skip clear gradients
Gradient Objects now leaves out fills and strokes at an opacity of 0,
so the test expects no gradient count once every fill and stroke of
the spot gradient object is clear.
2026-11-12 15:41:23 -08:00
dotCooCoo 5beed58f0f PDF export: the art-bounds warning appears only with Preserve Editing on
A PDF of the art's bounds never carries Preserve Editing data, and the
export adds its warning only when Preserve Editing was on. docs/mcp.md
and the document.exportPdf params text now say so.
2026-11-12 15:41:04 -08:00
dotCooCoo 52867e7096 Fonts: Find Font, Replace Missing Fonts and font lists include type in opacity masks and patterns
Find Font and Replace Missing Fonts looked only at the type on the layers
and in symbols, and the font list behind the export warning, Package and
the Missing Fonts dialog skipped opacity masks and pattern swatches.

- text.fonts lists the type in opacity masks (on objects and layers,
  disabled masks and masks inside other art included) and in pattern
  swatches, a swatch that nothing paints with included. A pattern's type
  counts once however many objects it paints. With selectionOnly, the
  masks of the selected objects and the symbols and patterns they show.
- select.font also selects the objects whose mask holds the font and the
  objects painted with a pattern whose art uses it (visible fills and
  strokes wider than 0). A layer's mask and an unused swatch select
  nothing.
- text.replaceFont changes that type in one undo step. Type in the mask
  of a hidden or locked object, and the type of a pattern that only
  hidden or locked selected objects paint with, keeps its font and is
  counted in skipped.
- addon.cleanup.replaceFonts replaces missing fonts in masks and
  patterns, hidden or locked type included.
- text.missingFonts, File > Package and the export warning read masks
  and patterns too.
- document.info's fonts for the whole document (the Fonts and Font
  Details categories and the text report) include the same type. With
  selectionOnly the list stays the selected type's fonts.

While a mask or pattern is edited, its type is taken from the editing
layer only.
2026-11-12 15:29:22 -08:00
dotCooCoo d5a02ee872 Merge main into feat/3d-graphics-planar 2026-11-12 15:19:09 -08:00
dotCooCoo 31b669a0a1 Recolor Artwork: the Color Theme Picker picks new colors from the art on the canvas
The Color Theme Picker button beside the Assign and Edit tabs turns on
picking from the canvas. A click takes the color palette of the object a
Selection tool click takes there, a drag takes the palette of the art
inside its marquee, and Shift adds more picks. The rows that are not
excluded take the palette as their new colors and the art previews them;
OK keeps the recolor as one undo step.

- recolor.pickTheme {picks, colors?} returns the palette of the art
  picked: visible fills and strokes, gradient stops, text, mesh points,
  pattern tiles, symbol art, colorize colors and image pixels. Clip
  groups, clipping opacity masks and isolation mode limit it to what
  shows, and it changes nothing.
- Each object read weighs the same; similar colors merge (k-means in Lab)
  into at most `colors`, most used first. Image reads are bounded (65,536
  pixels a pick, 1,048,576 pixels and 64 images in all), and past 4,096
  distinct colors, close colors merge before clustering.
- The dialog's themePicker and themePicks fields drive it from
  ui.dialog.set. A new Colors count keeps the picks.
2026-11-12 15:16:23 -08:00
BFlat b4505a76de Merge pull request #6887 from dotCooCoo/feat/new-document-profiles
New Document: each preset category starts documents from its own profile
2026-11-13 06:11:41 +07:00
BFlat d61ad77529 Merge pull request #6909 from dotCooCoo/feat/align-artboards
Align: the Align panel aligns and distributes the selected artboards
2026-11-13 06:11:32 +07:00
BFlat 1461bb2123 Merge pull request #6963 from dotCooCoo/fix/transform-effect-moves-member-raster-effects
Effects: a group's or object's Transform effect moves the raster effects inside it
2026-11-13 06:11:24 +07:00
BFlat a55606e66b Merge pull request #6949 from dotCooCoo/fix/assign-profile-working-spaces
Color management: Assign Profile leaves the working spaces of Color Settings
2026-11-13 06:11:15 +07:00
dotCooCoo cfff971d06 Merge main into fix/pdf-large-page-export 2026-11-12 14:40:47 -08:00
dotCooCoo c7900a9705 Document Info: Brushes shows brush types in the interface language
The Brushes rows name each type as the New Brush dialog does (Art Brush,
Scatter Brush) and say "missing from the Brushes panel" for a brush the
panel does not hold. The panel now shows these values through the
catalogs, so a localized interface no longer shows them in English.
document.info and the saved report keep them in English. Every catalog
gets a row for "missing from the Brushes panel"; the type names already
had rows.
2026-11-12 14:40:14 -08:00
dotCooCoo 5ae81b8d63 Merge main into fix/followup-6841 2026-11-12 14:28:51 -08:00
dotCooCoo 3c10f9bf71 Merge main into feat/cjk-insert-aki 2026-11-12 14:28:45 -08:00
BFlat f813ea02d5 Merge pull request #6950 from dotCooCoo/perf/setformat-per-paragraph
Type: a Tabs indent drag over many paragraphs no longer takes time in the square of their number
2026-11-13 05:24:02 +07:00
BFlat 9861e7f927 Merge pull request #6920 from dotCooCoo/feat/export-notes-loss-first
Save and Export: notes of what the file loses come before notes on options
2026-11-13 05:23:53 +07:00
BFlat 912a97346b Merge pull request #6973 from dotCooCoo/fix/followup-6827
MCP: document.json names linked JavaScript files outside the read roots by file name
2026-11-13 05:23:43 +07:00
BFlat 822d4101b5 Merge pull request #6890 from dotCooCoo/feat/3d-expand-as-wireframes
3D and Materials: Expand as Wireframes turns a 3D object into its edges as paths
2026-11-13 05:23:34 +07:00
BFlat 666ba78862 Merge pull request #6967 from dotCooCoo/feat/docinfo-brush-types
Document Info: Brushes lists the brushes applied to art, with their types
2026-11-13 05:23:17 +07:00
BFlat e0a8fdae5b Merge pull request #6958 from dotCooCoo/fix/bevel-join-visual-bounds
Transform: a bevel stops at the corners of the segments it joins with Use Preview Bounds
2026-11-13 05:23:09 +07:00
BFlat c2f97d2efa Merge pull request #6961 from dotCooCoo/fix/gradient-repeat-runs
Gradients: a repeated gradient with many stops keeps every run
2026-11-13 05:22:59 +07:00
dotCooCoo 76d61be566 Image Tools: Remove Background checks the pixels it clears for a process colorize color
Remove Background refused a grayscale image colorized with a process
color by looking at the pixels the image shows. With a color mask whose
masked pixels are not gray, as an opened file can hold, the check let
the image through, and the gray pixels it cleared took an alpha channel
under the process color. The check now reads the image's own pixels,
which are the ones cleared.

docs/mcp.md and the Color Mask line in docs/target-app-parity.md now say
that a mask that hides no pixels leaves a grayscale image free to take a
process color.
2026-11-12 14:14:24 -08:00
dotCooCoo cafbaec053 Merge main into fix/transform-effect-moves-member-raster-effects 2026-11-12 14:02:27 -08:00
dotCooCoo 3e32e99a15 Merge main into feat/align-artboards 2026-11-12 13:47:00 -08:00
dotCooCoo 7998954a95 Cutting Tools: weeding lines stop at an outline that lies on a line
A weeding line at v0 + k*step can round just past the edge of an outline
segment that lies on it: across 0.1 to 0.5 the one line sits at
0.30000000000000004, and (0.30000000000000004 - 0.1) / 0.2 is
1.0000000000000002. The candidate range for that segment then came out
empty, so the line was not stopped there and ran over the art's edge.
The candidate range is now widened by a small tolerance before rounding;
`near` still leaves out lines the segment does not meet.

docs/mcp.md and the params text of `addon.cutting.weed` now state the
`spacing` range (more than 0, at most 100000 pt), the 1000-line limit
each way, and that a request giving both `count` and `spacing` is
refused.
2026-11-12 13:46:37 -08:00
dotCooCoo 554d86765a Merge main into feat/3d-graphics-planar 2026-11-12 13:46:05 -08:00
dotCooCoo 5b09cf9c09 Document Info: Spot Color Objects leaves out fills and strokes at opacity 0
A spot-colored fill or stroke whose opacity is 0 prints no ink, but
Spot Color Objects still listed its object and objects.spots counted
it. Such fills and strokes are now left out; an object stays listed
while another of its fills or strokes prints the spot color. Pattern
Objects and Gradient Objects are unchanged.
2026-11-12 13:45:55 -08:00
dotCooCoo 7907bae6c3 Merge main into feat/new-document-profiles 2026-11-12 13:42:10 -08:00
dotCooCoo 127229d188 Color management: removing a profile redraws only when the canvas changes
color.removeProfile gave every open document a new revision for any
removed profile. It now redraws when the removed profile was an assigned
profile in use, which the working space replaces, or the CMYK profile
View → Proof Setup targets. Removing any other profile leaves the
revisions unchanged, which loading_or_removing_the_proof_profile_redraws
checks.
2026-11-12 13:42:04 -08:00
dotCooCoo 312d4a3914 Merge main into feat/image-color-mask 2026-11-12 13:30:24 -08:00
BFlat 3434e46240 Merge pull request #6825 from dotCooCoo/feat/custom-arrowheads
Stroke: custom arrowheads from an arrowheads file join the arrowhead menus
2026-11-13 04:25:55 +07:00
BFlat b8d23007e8 Merge pull request #6964 from dotCooCoo/fix/shaper-stroke-click-construction
Shaper: a click on an original shape's outline enters Construction mode
2026-11-13 04:25:26 +07:00
dotCooCoo a670c3072b MCP: document.json names linked JavaScript files outside the read roots by file name
With automation read roots in force, document.json returned each entry of
svg_scripts unchanged, so a JavaScript file linked from outside the read
roots kept its full path in the reply. The reply copy now names such a
file by its file name alone. An entry given as a URL is kept, and the
stored document is not changed.
2026-11-12 13:18:17 -08:00
dotCooCoo c513114674 Gradients: Expand reports a capped gradient as unavailable
- object.expand.info reports no gradient or fill to expand for a
  gradient that repeats in more runs across its box than are written,
  matching object.expand, which leaves it a gradient. For a path that a
  painting live effect draws, it measures each piece the effect returns.
- CSS writes a repeating gradient's stop positions, and a repeating
  radial gradient's radius, with enough decimals that their rounding
  adds up to at most a hundredth of a period across the box (at least
  four for positions and three for the radius).
- docs/mcp.md says that sharp steps and swatch-linked stops are the last
  to be left out rather than always kept, and that the CSS conic limit
  counts stops before midpoints and Perceptual curves add more.
2026-11-12 12:55:54 -08:00