Commit Graph
4434 Commits
Author SHA1 Message Date
BFlat 7d77f8aebd Merge pull request #7044 from dotCooCoo/fix/effect-apply-strict-params
Effects: effect.apply refuses a wrongly typed parameter that has no default
2026-11-13 13:19:01 +07:00
BFlat 9b7aa561c0 Merge pull request #7036 from dotCooCoo/fix/pattern-cancel-dangling
Patterns: canceling a new pattern leaves no swatch or paint of it
2026-11-13 13:18:51 +07:00
BFlat 9b54280846 Merge pull request #7050 from dotCooCoo/feat/layers-delete-confirm
Layers: deleting layers that hold art asks first
2026-11-13 13:18:43 +07:00
BFlat 53ff632a26 Merge pull request #7042 from dotCooCoo/feat/pict-open-place
File formats: PICT pictures open and place
2026-11-13 13:18:26 +07:00
BFlat c6da74eef3 Merge pull request #7043 from dotCooCoo/fix/pen-readout-without-rubber-band
Drawing tools: the measurement readout shows with the rubber band off
2026-11-13 13:17:57 +07:00
BFlat bf71429d06 Merge pull request #7052 from dotCooCoo/feat/font-samples-on-white
Font menu: Show samples on white draws each sample in dark type on a white area
2026-11-13 13:17:48 +07:00
BFlat 499903878e Merge pull request #7055 from dotCooCoo/feat/mojikumi-presets
Type: the Mojikumi Set menu offers the predefined spacing sets
2026-11-13 13:17:36 +07:00
BFlat 7257c28a83 Merge pull request #7056 from dotCooCoo/feat/rotated-box-transforms
Free Transform: handles, shear and distort follow the rotated bounding box
2026-11-13 13:17:23 +07:00
BFlat ce37ec3d9a Merge pull request #7041 from dotCooCoo/fix/3d-refusal-translations
i18n: 3D effects' refusal messages are translated
2026-11-13 12:28:07 +07:00
BFlat 1b9aa07e65 Merge pull request #6995 from dotCooCoo/feat/actions-insert-select-path
Actions: Insert Select Path stores the selected path as a step
2026-11-13 12:27:58 +07:00
BFlat bae885e393 Merge pull request #6876 from dotCooCoo/feat/outline-object-image-alpha
Effects: Outline Object on an image's fill or stroke follows its opaque pixels
2026-11-13 12:27:50 +07:00
BFlat 8cd598397c Merge pull request #7039 from dotCooCoo/fix/package-after-failed-save
Package: a failed save before packaging writes no package
2026-11-13 12:27:41 +07:00
BFlat ef3beb9401 Merge pull request #7027 from dotCooCoo/fix/followup-6985
Fonts: Find Font skips patterns and inline graphics that draw nothing, and Refresh Font List lays out type in art again
2026-11-13 12:27:33 +07:00
BFlat 65138198a8 Merge pull request #7033 from dotCooCoo/fix/colorize-missing-link-fill
Colorize: a fill color recolors a colorized image whose link is missing
2026-11-13 12:27:18 +07:00
BFlat 6c3022d6e1 Merge pull request #7008 from jmverges/fix/6983-import-font-exact-postscript-name
.ai and EPS import: type takes the face of its exact PostScript name and version
2026-11-13 12:27:09 +07:00
dotCooCoo 38049325e7 Free Transform: handles, shear and distort follow the rotated bounding box
After a rotation the Selection tool already shows and drags a bounding
box turned with the objects, but the Free Transform tool still used the
page-aligned box. Its handles sat on the wrong corners, a side handle
scaled along the page axes, and Perspective Distort and Free Distort
started from a box that did not match the art.

- The Free Transform tool keeps the selection's turned box for the
  drag. Handles, the rotate zone and the move zone are read in its
  frame; a handle scales along the selection's own sides from the
  opposite handle (or the center with Alt) and snaps as the Selection
  tool's does; Cmd/Ctrl on a side handle shears along that side; the
  outline, handles and cursors are drawn on the turned box.
- Perspective Distort and Free Distort move the corners of the turned
  box. `object.distort` takes `angle?` (degrees): `from`, or the
  selection's bounds without it, is then a box in the frame turned by
  that angle. Upright boxes send the same params as before.
- The Scale and Reflect tools, their dialogs and commands, and the
  Transform panel's flips keep the page's axes.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-12 21:19:58 -08:00
dotCooCoo 41b8114865 Font menu: Show samples on white draws each sample in dark type on a white area
A new Type preference, Show samples on white (`fontSamplesOnWhite`, off
by default), draws each family's sample in every font menu, and in
Type → Font in the in-window menu bar, in the Light brightness's text
color on a white area, in every interface brightness. A row's white
area is drawn while its sample is still rendering, and leaves 2 pt above
and below it where a highlighted row's color shows. The family names and
the rest of the menu keep the interface's colors. Preferences dims the
checkbox while Enable in-menu font previews is off.

Docs: docs/mcp.md (prefs), docs/target-app-parity.md evidence line.
2026-11-12 21:12:37 -08:00
dotCooCoo 52da895220 Docs: record the drawing readout in the Drawing tools area row
The Drawing tools row in docs/target-app-parity.md now names the
measurement readout that the Pen, Smart Pen and Curvature tool show
with the rubber band off. The score, gaps and hours are unchanged.
2026-11-12 21:12:01 -08:00
dotCooCoo 7b6b6af7b1 Type: the Mojikumi Set menu offers the predefined spacing sets
The Paragraph panel's Mojikumi Set lists None, YakumonoHankaku,
GyomatsuYakumonoHankaku, GyomatsuYakumonoZenkaku and YakumonoZenkaku,
then Line-end Punctuation Half Width, and text.setFormat {mojikumi}
takes yakumonoHankaku, gyomatsuYakumonoHankaku, gyomatsuYakumonoZenkaku
and yakumonoZenkaku besides none and lineEndHalf.

The spacing of each set is VectorCraft's own rule, built on the help
page's one-line description of each set:
- YakumonoHankaku sets every bracket, comma and full stop half width,
  takes a quarter em off each side of a middle dot, and puts a quarter
  em between Japanese and Latin letters or digits.
- GyomatsuYakumonoHankaku keeps punctuation full width inside a line,
  sets an opening bracket starting a line flush and a closing mark
  ending it half width, and takes the quarter em after a middle dot
  ending a line off.
- GyomatsuYakumonoZenkaku keeps punctuation full width and adds the
  quarter em between Japanese and Latin text.
- YakumonoZenkaku sets characters as None does.

Both composers and vertical type measure each line as it is set. A
right-to-left paragraph, whose line ends are measured untrimmed, also
draws them untrimmed, and a right-to-left line that ends between a
Japanese and a Latin character is measured without the quarter em the
set adds there. With a Desired glyph scaling other than 100%, the
space a set takes off before an opening bracket or middle dot, and the
Japanese-Latin space recorded at a line's end, scale with the glyph.

The sets save with the document and paragraph styles; new type and
Reset Panel keep Line-end Punctuation Half Width. SVG export lays type
with middle dots out again for its positioned spans. A .ai save
reports a paragraph with one of the new sets as left out.

Docs: docs/mcp.md, docs/target-app-parity.md, docs/type-parity.md,
docs/gaps.md.
2026-11-12 21:07:44 -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
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
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 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 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
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