Commit Graph
4487 Commits
Author SHA1 Message Date
dotCooCoo 149f4243b2 Place: DCS transparency interactions look only at what clipping paths show
Show DCS Transparency Interactions compared full object bounds, so a
transparent object over the part of a DCS image that its clipping path
hides marked the image. Bounds are now cut to the clipping paths of the
clip groups and clipping layers that hold each object.
2026-11-12 20:45:43 -08:00
dotCooCoo eb6c522458 Font menu: every font menu shares one set of filters
Each font menu kept its own script, kind, Variable and favorites
filters, so a filter chosen in the Character panel's menu was off in
the Control bar's, the Properties panel's, the Glyphs panel's and the
dialogs' menus. The filters now live in one place that every font menu
reads when it is drawn and writes back afterward. A filter chosen in one
menu is on in the others, and their rows are listed by it. The mouse
wheel over a closed family field steps through the families those
shared filters list. The search, highlight and expanded families stay
with each menu. The filters last for the session, as before.

Docs: docs/type-parity.md, docs/target-app-parity.md.
2026-11-12 20:45:27 -08:00
dotCooCoo 367c092fee Layers: deleting layers that hold art asks first
The Layers panel's trash button, rows dropped on it, the panel menu's
Delete Selection, and Delete or Backspace on highlighted rows now run
ui.layerDelete. When a layer or sublayer among the rows holds art
(hidden, locked and nested objects count; guides do not), a confirm
dialog asks first. OK deletes the rows it asked about, by id, in the
document it was asked in, as one undo step; Cancel keeps them. Empty
layers, guide-only layers and object or group rows alone are deleted at
once. layer.delete itself is unchanged and never asks.
2026-11-12 20:43:56 -08:00
dotCooCoo 47fbe1c14a Patterns: Delete, Cancel and rename reach a graph's stored paints
The series fill and stroke and the label fill and stroke a graph keeps
for its next redraw are now in the paint traversal, so Delete Pattern
and canceling a new pattern make them no paint and a Pattern Options
rename renames them. Before, a later graph.setData drew the paint of a
missing pattern again. Global swatch edits reach the same paints.

The progress-doc line now says that only canceling a new pattern clears
its paints; canceling the edit of an existing pattern puts the
definition, and after a rename the old name, back.
2026-11-12 20:43:38 -08:00
dotCooCoo a992a14997 Merge main into feat/pict-open-place 2026-11-12 20:41:24 -08:00
dotCooCoo 145ac9d30a 3D: an object's fill and stroke solids share one face limit
Extrude & Bevel (both kinds) and Inflate built every fill and stroke
solid of an object, each up to 163,840 faces, before any check, so one
effect on a path with many strokes or a group with many members could
build several times that. The solids are now built in order and their
faces counted together: once they pass 163,840 (VectorCraft's own
limit), no later solid is built, the object draws its source art, and
effect.apply, effect.setParams, Export 3D Object and Expand as
Wireframes report "The 3D surface is too complex; simplify the shape".
A stroke left out for its own limits is not counted.

Export 3D Object now builds Extrude & Bevel (Classic) meshes with the
Classic bevel options, so the exported solid matches the drawn one.
2026-11-12 20:40:25 -08:00
dotCooCoo 26ab0f2523 Symbols: 9-slice guides may lie outside the symbol's art
A 9-slice guide can now be placed outside the symbol's art, by dragging
it past the art's edge in symbol editing mode, by symbol.options
nineSliceGuides, or by a Symbol Options field below 0% or above 100%.
A scaled instance then scales by the cells its art falls in.

- Each guide is a fraction from its edge in -16..16, and the two guides
  of an axis keep their order (left + right < 1, top + bottom < 1).
- A guide past an edge cuts the art at that edge, so that side's outer
  cell holds no art. With both guides of an axis past opposite edges,
  the art scales as a whole along it. With both past the same edge, the
  art keeps its size in the outer cell at the other edge.
- Symbol Options shows the guides with three decimals, and OK keeps a
  field that was not changed at its exact value.
- Native files keep the guides exactly. SVG and .ai write such an
  instance as its placed art, without guides.

Docs: docs/mcp.md, docs/target-app-parity.md, docs/gaps.md.
2026-11-12 20:40:05 -08:00
Don Omondi a0e4680710 Roadmap M4 row: the #6971 note goes in the Status cell 2026-11-12 23:29:02 -05:00
Don Omondi b0cc3eb13a Merge remote-tracking branch 'upstream/main' into fix/pdf-empty-actualtext-art-6971 2026-11-12 23:29:01 -05:00
Don Omondi 9142716ddc Roadmap M3 row: the library-panel note goes in the Status cell (#2992) 2026-11-12 23:28:53 -05:00
Don Omondi 85ed43c04e Merge remote-tracking branch 'upstream/main' into fix/library-panel-list-height-2992 2026-11-12 23:28:53 -05:00
Don Omondi b8877455be Roadmap M3 row: separate the moved notes from the status text 2026-11-12 23:28:36 -05:00
Don Omondi 1fe4529248 Roadmap M3 row: the panel-list notes go in the Status cell (#2992, #1638) 2026-11-12 23:28:16 -05:00
Don Omondi 317d13a168 Merge remote-tracking branch 'upstream/main' into fix/graphic-styles-list-height-2992 2026-11-12 23:28:10 -05:00
dotCooCoo fad257ce82 Drawing tools: the measurement readout shows with the rubber band off
Enable Rubber Band now hides only the preview segment in the Pen, the
Curvature tool and the Smart Pen. With it off and Measurement Labels on,
the three tools still show the D / Angle / dX / dY readout at the pointer
while a path is drawn, and the Curvature tool also shows it when
going on from the current end of a selected path. With Measurement Labels
off, no readout shows either way. The click places the same anchor as
before.

Docs: docs/mcp.md (penRubberBand, curvatureRubberBand), docs/ui-parity.md,
docs/target-app-parity.md.
2026-11-12 20:27:27 -08:00
BFlat f062dd7ed2 Merge pull request #6932 from dotCooCoo/feat/dcs-linked-spot-plates
Place: DCS files link with their spot plates as spot swatches and separate on their own inks
2026-11-13 11:27:13 +07:00
dotCooCoo f5bfe0c425 Effects: effect.apply refuses a wrongly typed parameter that has no default
effect.apply, appearance.addEffect and effect.setParams checked an effect
parameter's type only when the effect has a dialog default for the key. Keys
that only the params text names were stored as given: an Outline Stroke with
`width: "10 pt"` drew at the stroke's own weight, and a Gaussian Blur with
`linear: 1` blurred in linear light.

- The earlier 3D `perspective`, `lightAzimuth` and `lightElevation`,
  Scribble's `variation` and Outline Stroke's `width` must be numbers, and
  Gaussian Blur's `linear` must be true or false. A test walks every effect
  so a new key without a default needs a listed type or a check of its own.
- The `style` of Crop Marks must be `roman` or `japanese`, and `null` is
  refused. Any other value drew as Roman.
- An installed plug-in effect's parameters are checked against its manifest
  when the command runs, as plugin.run already checks the effect records a
  filter returns.
- effect.setParams with `warpStyle` checks the parameters against the new
  Warp style's effect, as it already did for a 3D effect's new
  `threeDType`. It checked them against the old style.
- effect.setParams refuses a `visible` that is not true or false, such as
  `1` or `"false"`, when called and when a step plays, and nothing changes.
  Before, the value was ignored and the rest of the call applied. `null`
  still leaves the visibility as it is.

A step of command.batch is refused the same way. A replayed journal or
action still plays a wrongly typed effect parameter, as it plays a key the
effect no longer takes.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-12 20:27:09 -08:00
BFlat 465091d7d2 Merge pull request #7031 from dotCooCoo/fix/followup-6920
Print: notes of what a print loses come before notes on options
2026-11-13 11:26:54 +07:00
BFlat be389b8b59 Merge pull request #7030 from dotCooCoo/fix/followup-6960
3D: mapped graphics keep paint order and hide handles on hidden fills
2026-11-13 11:26:46 +07:00
BFlat 5e17d47370 Merge pull request #7029 from dotCooCoo/fix/followup-6718
Pen: Space held during a closing drag moves the first anchor
2026-11-13 11:26:39 +07:00
dotCooCoo fe489405d7 Package: a failed save before packaging writes no package
With Background Save on, Package's OK started the save of a dirty
document on the worker and then wrote the package whether or not that
save succeeded. With both preferences off, a failed save already stopped
the package, so the result depended on the preferences.

The package now starts only after the save is written, with both
preferences in every combination. With Background Export on, it is still
collected from the document as it was at OK and starts once the save's
result arrives; when the save fails, or asks a question first, no package
is written and the save's error stays in the status bar. With Background
Export off, the dialog shows the save's error.

background::after runs a step on the UI thread once a job's result is
applied.
2026-11-12 20:22:12 -08:00
dotCooCoo ac76040014 Merge main into feat/outline-object-image-alpha 2026-11-12 20:16:33 -08:00
dotCooCoo 9dc6009007 i18n: 3D effects' refusal messages are translated
The refusals of Extrude & Bevel, Revolve, Inflate, Rotate and their
Classic forms (art a 3D effect can't build a solid from, invalid
light, shadow, graphics and surface settings, and Expand as Wireframes
notes) now have an @msg row in every complete-message catalog, as do
the effect names and object kinds the messages name, so the status bar
shows them in the interface language. Parameter keys, numbers and
names keep their English form; command replies stay English.

A value a message quotes in "...", curly quotes or backticks, such as a
symbol's name, is shown as written instead of being looked up as a
message of its own.
2026-11-12 20:12:14 -08:00
dotCooCoo c84ece827c i18n: parameter schema errors translate what the value must be
A parameter schema's error ("`zoom` must be a number > 0, not -1") was
translated around its requirement, which stayed in English in every
language: only "a number", "a string" and "true or false" had rows.

- Every complete catalog gets a row for each requirement a schema
  writes: a number with each kind of range and with a unit, an integer
  and its range, a list of names, an object id, a list of object ids,
  a color, a point, an object and a list. The bounds, unit and names
  stay as the English gives them.
- An enum error no longer matches the `{key}` must be one of {_1} row,
  which took `"a", "b", not "c"` as its list and left ", not ..." in
  English: a `{path}` must be one of {_1}, not {got} row translates it,
  in the complete catalogs and in Bulgarian, Bosnian, Danish,
  Indonesian and Dutch.
- A part of a message that starts with `{` or `[` is translated only
  when it is an exact message, so "[x, y] (two numbers)" translates and
  JSON values, shown cut short or whole, stay as they are.

Docs: docs/mcp.md (Parameter schemas), docs/target-app-parity.md.
2026-11-12 20:00:10 -08:00
dotCooCoo 8aee6a9ede Merge main into fix/colorize-missing-link-fill 2026-11-12 19:57:08 -08:00
jmverges 2ac96a5ed5 Merge remote-tracking branch 'upstream/main' into fix/ai-import-font-match
# Conflicts:
#	docs/file-format-parity.md
2026-11-13 03:55:56 +00:00
dotCooCoo 71da62dab2 File formats: PICT pictures open and place
File > Open and File > Place read QuickDraw pictures, versions 1 and 2,
from .pct, .pic and .pict files, with or without the file's 512 bytes
of application data; a version 2 picture also opens by its content.
The reader plays the opcodes of Apple's Opcodes in Pictures table on
the metafile player: lines, rectangles, rounded rectangles, ovals,
arcs, polygons and regions become paths, text becomes point type in
the font the picture names, bitmaps, pixel maps and QuickTime JPEG
images become images, and the clip region clips what follows it.
Place puts the picture in one group clipped to its frame. What isn't
read comes back as warnings, and a picture cut short keeps what came
before it. PICT is not written.

Images whose transform flattens them no longer leave their pixel data
in the document. Formats whose signature starts the file are detected
before PICT, which is known by bytes 522 or 10.

Docs: docs/mcp.md, docs/file-format-parity.md, docs/target-app-parity.md.
2026-11-12 19:52:06 -08:00
dotCooCoo 3bf00207a6 Actions: action set files with Select Path steps are version 5
Version 4 marks sets with Select Object steps, so a build that reads
version 4 but has no select.storedPath accepted a Select Path set and
failed at the step during playback. Sets with Select Path steps now
save as version 5, Load Actions reads versions 1 to 5, and docs/mcp.md
and the file header say so.
2026-11-12 19:41:57 -08:00
Don Omondi 8ba280ec44 Merge remote-tracking branch 'upstream/main' into fix/pdf-empty-actualtext-art-6971
# Conflicts:
#	docs/file-format-parity.md
#	docs/roadmap.md
#	docs/target-app-parity.md
2026-11-12 22:40:11 -05:00
Don Omondi cabef90876 Merge remote-tracking branch 'upstream/main' into fix/library-panel-list-height-2992
# Conflicts:
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-11-12 22:40:11 -05:00
Don Omondi 60228dbfd6 Merge remote-tracking branch 'upstream/main' into fix/graphic-styles-list-height-2992
# Conflicts:
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-11-12 22:39:56 -05:00
dotCooCoo 302586960c Colorize: a fill color recolors a colorized image whose link is missing
A colorized image whose linked file is missing shows the placeholder
preview, whose pixels are not grayscale. paint.setFill skipped such an
image and added a fill item instead, while the Fill proxy showed the
image's colorize color. A solid color now replaces the colorize color.
While that color is a spot color, black or white, a process color is
refused, since the relinked pixels may have an alpha channel.
2026-11-12 19:32:47 -08:00
BFlat e899f3fdb4 Merge pull request #6881 from dotCooCoo/feat/image-color-mask
Image Tools: Color Mask hides chosen colors of an image without changing its pixels
2026-11-13 10:27:04 +07:00
BFlat 563850dca0 Merge pull request #6988 from dotCooCoo/feat/control-bar-float
Control bar: dragging the gripper away from both docked edges floats the bar
2026-11-13 10:26:54 +07:00
BFlat 34e3418996 Merge pull request #7022 from dotCooCoo/fix/followup-2948
Docs: document.open's pages sentence for a .ai without PDF compatibility appears once
2026-11-13 10:26:46 +07:00
BFlat efc3c9491a Merge pull request #7018 from dotCooCoo/fix/followup-6991
Recolor Artwork: the Color Theme Picker keeps symbol art and clipped image reads within their limits
2026-11-13 10:26:37 +07:00
BFlat fe9fd05a1a Merge pull request #7016 from dotCooCoo/fix/layers-right-drag
Layers: a drag with the right button no longer moves a row
2026-11-13 10:26:27 +07:00
BFlat 703fb03d65 Merge pull request #7006 from dotCooCoo/fix/mesh-locate-winding
Mesh: a point on a mesh's outline locates on its edge on every side
2026-11-13 10:26:18 +07:00
BFlat bd6b99ed1f Merge pull request #7015 from mockydevs/fix/swatches-list-height-1638
Swatches: the swatch list fills a taller panel above its footer
2026-11-13 10:26:10 +07:00
BFlat c6ceeabf0c Merge pull request #6928 from jmverges/fix/6899-ai-type-manual-kerning
.ai import: type keeps the manual kerning of its text document
2026-11-13 10:26:01 +07:00
dotCooCoo 9c1c7dee7e Print: notes of what a print loses come before notes on options
A print to a file and the print preview list their notes as saves and
exports do since #6920: what the job leaves out of the document or prints
differently first (art outside the imageable area, type in a fallback
font, transparency flattened for PostScript), then the notes on the
options (halftone screens and a fixed flatness that aren't written, copies
per sheet that don't fit, a printer profile left out, ink options that
name no ink). Each kind keeps the order it is given in.

The print layout, the PDF print and the PDF print plan return the notes
on the options in `setting_notes` beside `warnings`, as `ExportReport`
does. The status message after a print to a file names the first note,
so a fixed flatness no longer hides type printed in a fallback font.
2026-11-12 19:13:13 -08:00
dotCooCoo f6d8af3ed6 Merge main into feat/dcs-linked-spot-plates 2026-11-12 19:09:51 -08:00
dotCooCoo b64b4802f8 Merge main into feat/actions-insert-select-path 2026-11-12 19:01:39 -08:00
dotCooCoo 3e9e58afb1 3D: mapped graphics keep paint order and hide handles on hidden fills
A solid now shares its mapped graphics only with the run of solids just
before it that have the same opacity and blending mode. Before, it
joined any earlier solid with the same settings, so with members A, B
and C where A and C match, A's graphic was drawn after C and over B.

The Materials tab shows no artboard handles for graphics on a hidden
fill or stroke, which draws no solid and no graphics.

docs/three-d.md now says that pattern tiles in a graphic keep their own
colors instead of taking the face's light.
2026-11-12 18:59:02 -08:00
dotCooCoo 1587cb84f7 Pen: Space held during a closing drag moves the first anchor
Space held while dragging out a new anchor already moved it, handles and
all, but the closing drag skipped it, so the closing anchor could not be
repositioned. The closing drag now moves the first anchor by as far as the
pointer moves while Space is held, its handles with it, and the drag
shapes the handles round the new place once Space is released.

path.close takes `at: [x, y]`, which moves the first anchor, its handles
with it, before `in` and `out` are placed. docs/mcp.md and the Pen line
in docs/target-app-parity.md describe it.
2026-11-12 18:55:10 -08:00
Don Omondi 79954e36cb Library panels (#2992): M3 and area row notes 2026-11-12 21:45:59 -05:00
Don Omondi 3bc09c66fd Merge remote-tracking branch 'upstream/main' into fix/library-panel-list-height-2992
# Conflicts:
#	docs/target-app-parity.md
2026-11-12 21:45:59 -05:00
Don Omondi 34798989bd Swatches list (#1638): M3 and area row notes 2026-11-12 21:45:37 -05:00
Don Omondi 9fdaf3d999 Merge remote-tracking branch 'upstream/main' into fix/swatches-list-height-1638
# Conflicts:
#	docs/target-app-parity.md
2026-11-12 21:45:37 -05:00
Don Omondi 432fe0362f Graphic Styles list (#2992): M3 and area row notes 2026-11-12 21:45:12 -05:00