Commit Graph
4453 Commits
Author SHA1 Message Date
BFlat 001660517c Merge pull request #7059 from dotCooCoo/fix/dcs-eps-proxy-plates
Place: DCS links reopen with their plates under the low-resolution EPS proxy
2026-11-13 14:17:44 +07:00
BFlat 7d417a0729 Merge pull request #7048 from dotCooCoo/fix/font-menu-shared-filters
Font menu: every font menu shares one set of filters
2026-11-13 14:17:18 +07:00
BFlat d0b4df357c Merge pull request #7063 from dotCooCoo/fix/ui-parity-pencil-fidelity-unit
Docs: the Pencil row gives Fidelity in screen pixels
2026-11-13 14:17:05 +07:00
BFlat 9ba02d41d7 Merge pull request #7038 from dotCooCoo/fix/schema-expected-phrases
i18n: parameter schema errors translate what the value must be
2026-11-13 14:16:56 +07:00
BFlat d5699579de Merge pull request #7017 from mockydevs/fix/pdf-empty-actualtext-art-6971
PDF import: glyphs in a span with an empty ActualText come in as outlines
2026-11-13 14:16:32 +07:00
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
Don Omondi 74deb4aade 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-13 00:46:18 -05:00
dotCooCoo 33931064ab Merge main into fix/font-menu-shared-filters 2026-11-12 21:42:31 -08:00
dotCooCoo 6886198458 Merge main into fix/schema-expected-phrases 2026-11-12 21:37:21 -08:00
dotCooCoo 9468508501 Docs: the Pencil row gives Fidelity in screen pixels
#5748 moved the Pencil's and the Paintbrush's Fidelity to screen pixels, but
docs/ui-parity.md still gave it in points. The Pencil row now gives the
slider's rail, the field and the key steps in px, and says the tool sends
path.freehand the value in points at the current zoom.

The Pencil row also appeared twice, the second copy without the Fidelity
text. The two rows are merged into one.

The comments on FIDELITY_MAX, fidelity_step, fidelity_at and fidelity_from
in the Tool Options dialog name the tool's unit, since the slider is shared
with Smooth and Blob Brush, which stay in points.
2026-11-12 21:33:07 -08:00
dotCooCoo 2d2ac65b2c Place: DCS links reopen with their plates under the low-resolution EPS proxy
With the lowResProxyEps preference on, opening a document kept the saved
preview of a linked DCS file, so the link showed as EPS without its
plates. Opening now reads the first 1 MiB of each such EPS file and reads
a DCS file in full. The whole file is read only when a binary EPS header
puts the PostScript past those bytes or the header comments run past
them. Other EPS files keep their preview.
2026-11-12 21:30:06 -08: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 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
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
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