Commit Graph
5685 Commits
Author SHA1 Message Date
BFlat 0693fe4e61 Merge pull request #4175 from Taha-Mahmoodi/fix/1732-transform-each-remembers
Fix #1732: Transform Each opens on the values it was last confirmed with and has a Copy button
2026-10-26 09:20:40 +07:00
BFlat 8b9267d412 Merge pull request #4180 from dotCooCoo/feat/eraser-angle-roundness
Eraser: Angle and Roundness in Eraser Tool Options shape the tip
2026-10-26 09:20:27 +07:00
BFlat e24c576209 Merge pull request #4181 from dotCooCoo/feat/art-brush-width-pressure
Brushes: Art Brush Options' Width can follow the pen pressure
2026-10-26 09:20:08 +07:00
BFlat ad0a9c9201 Merge pull request #4182 from dotCooCoo/feat/pencil-live-curve-fitting
Pencil: Live curve fitting in Pencil Tool Options shows the stroke's points until the release fits them
2026-10-26 09:19:54 +07:00
BFlat a1ff0eab96 Merge pull request #4192 from dotCooCoo/feat/typed-list-detection
Type: typing "1. ", "A) " or "* " at the start of a paragraph starts a list
2026-10-26 09:19:39 +07:00
BFlat 24b50b1643 Merge pull request #4057 from dotCooCoo/feat/mcp-answer-dialog
MCP: answer_dialog sets the fields of the app's open dialog and confirms or cancels it
2026-10-26 09:19:25 +07:00
BFlat b1feb063a5 Merge pull request #4055 from dotCooCoo/feat/mcp-render-trace-views
MCP: screenshot and render_preview can draw the Image Trace view
2026-10-26 09:19:11 +07:00
BFlat f3e07d7ecc Merge pull request #4049 from dotCooCoo/fix/dialog-set-unknown-field
Dialogs: ui.dialog.set returns an error for a field the open dialog does not read
2026-10-26 09:18:55 +07:00
BFlat 3a2a1c8249 Merge pull request #4103 from dotCooCoo/fix/undo-group-cancel-keeps-batch-steps-elsewhere
Undo: canceling an undo group keeps a batch's steps in other documents
2026-10-26 09:18:39 +07:00
BFlat f0bdf3fa2c Merge pull request #4105 from dotCooCoo/fix/trace-preview-drafts
Image Trace: changes that wait with Preview off stay with their object
2026-10-26 09:18:24 +07:00
BFlat 86519a61cd Merge pull request #4075 from dotCooCoo/fix/trace-cut-edge-palette
Image Trace: the blended edge of a cut-out image adds no color to the palette
2026-10-26 09:18:07 +07:00
BFlat 3431ca3dc4 Merge pull request #4048 from dotCooCoo/fix/trace-library-neutral-tones
Image Trace: Document Library keeps neutral tones off saturated library colors
2026-10-26 09:17:48 +07:00
BFlat 34b5c56560 Merge pull request #4054 from dotCooCoo/fix/overlapping-trace-own-areas
Image Trace: Overlapping layers reach only under areas that hold their own color
2026-10-26 09:17:32 +07:00
BFlat 6d855b4af4 Merge pull request #4076 from dotCooCoo/fix/trace-eye-button-hold
Image Trace: the eye button's hold ends on release, and the panel uses any selected trace or image
2026-10-26 09:17:13 +07:00
BFlat dbf7194090 Merge pull request #4079 from dotCooCoo/fix/shape-builder-merge-thin-overlap
Shape Builder: a merge across an overlap thinner than the precision gives one path
2026-10-26 09:16:54 +07:00
BFlat 5b10d96a11 Merge pull request #4065 from dotCooCoo/fix/shape-builder-erase-narrow-crossings
Shape Builder: erasing picks a region narrower than twice the tolerance
2026-10-26 09:16:38 +07:00
BFlat bb8e1897f6 Merge pull request #4158 from devius/ka-short-labels
i18n(ka): shorter Georgian for 15 labels that were cut off
2026-10-26 09:16:23 +07:00
BFlat 8f6200b44f Merge pull request #4062 from dotCooCoo/fix/shape-builder-merge-reuses-hover-map
Shape Builder: a click merges over the map the tool built for the hover
2026-10-26 09:16:08 +07:00
BFlat bca67558ea Merge pull request #4211 from storytold/land/4080
G11: Shape Builder's edge-source grid holds a bounded number of references (#4080)
2026-10-26 09:15:33 +07:00
BFlat 86ee259d81 Merge pull request #4078 from dotCooCoo/fix/live-paint-plain-group-named-live-paint
Live Paint: a plain group named "Live Paint..." is not a Live Paint group
2026-10-26 09:14:11 +07:00
BFlat 00584e491e Merge pull request #4149 from acosimati/doc-inspect-opacity-pct
MCP: doc_inspect reports opacityPct in the percent scale the drawing tools take
2026-10-26 09:13:40 +07:00
BFlat 3af669b5bf Merge pull request #4147 from nrq6993-a11y/stream/vc-feat-3627-convert-pdf-editing
Fix #3627: convert to PDF omits editing data by default
2026-10-26 09:13:15 +07:00
BFlat 9176a85065 Merge pull request #4148 from nrq6993-a11y/stream/vc-feat-g1-star-radii-measure-label
G1: Star tool shows inner and outer radii in measurement labels
2026-10-26 09:13:01 +07:00
Dylan M. Taylor 97ccb83337 lint: shell helper and lossless float conversion (S1192, S7679, S4325) (#4205)
- packaging/linux/package.sh: one verify_sha256 helper replaces the four
  repeated printf|sha256sum -c pipelines.
- packaging/macos/package.sh: stapler_retry copies its positional
  arguments into locals before use.
- swatch_options: f64::from(v) instead of v as f64 (same value; the
  argument is an f32, so the conversion stays).
2026-10-25 22:12:52 -04:00
BFlat 8334528da0 Merge pull request #4164 from nrq6993-a11y/stream/vc-feat-g1-shear-tool-shift-axis
G1: Shear tool Shift locks width or height
2026-10-26 09:12:50 +07:00
BFlat 8ebefbacb2 Merge pull request #4168 from nrq6993-a11y/stream/vc-feat-g1-slice-resize-transform-tools
G1: Slice Selection resize honors Transform Tools
2026-10-26 09:12:33 +07:00
BFlat b6b31dbd81 Merge pull request #4160 from nrq6993-a11y/stream/vc-feat-g1-artboard-resize-transform-tools
G1: Artboard resize honors Transform Tools readouts
2026-10-26 09:12:14 +07:00
BFlat 49e4b23d4f Merge pull request #4161 from nrq6993-a11y/stream/vc-feat-g1-reshape-readout-prefs
G1: Reshape readouts follow Measurement Labels pref
2026-10-26 09:11:56 +07:00
Taha-Mahmoodi 0dc9d9abb4 Fix #1732: Transform Each opens on the values it was last confirmed with and has a Copy button
Squashed from #4175 onto main.
2026-10-26 09:09:46 +07:00
dotCooCoo 3d8c40f500 Eraser: Angle and Roundness in Eraser Tool Options shape the tip
Squashed from #4180 onto main.
2026-10-26 09:09:46 +07:00
dotCooCoo 7117c82cab Brushes: Art Brush Options' Width can follow the pen pressure
Art Brush Options' Width had no pen tablet option, so an art brush
drew at one width whatever the pressure. The Width row now has a
Fixed or Pressure menu and a second width. With Pressure the art is
Width wide at the lightest pen pressure and the second width at the
heaviest, following the pressure the Paintbrush recorded along the
stroke, and half way between the two on a stroke drawn without
pressure. brush.options takes width_mode and width_max; a brush
without them is saved as before.
2026-10-26 09:09:46 +07:00
dotCooCoo 60cb4c45ab Pencil: Live curve fitting in Pencil Tool Options
Pencil Tool Options has a Live curve fitting checkbox, on by default.
With it off, the path shown while a Pencil stroke is drawn joins the
stroke's points with straight segments, and the release fits the curve
at the Fidelity, as it does with the option on. Choosing another tool
while a stroke is drawn also keeps the stroke fitted. The option is
saved with the tool's other options.

path.freehand takes fit (true by default): with fit false, a new path,
a continued path and a redrawn section join the points with straight
segments.
2026-10-26 09:09:46 +07:00
dotCooCoo 5339fec9cd Type: typing "1. ", "A) " or "* " at the start of a paragraph starts a list
The reference app detects lists typed as 1., 1), A. or A), and makes
custom bullets from *, #, > or + followed by a space. In VectorCraft
the characters stayed as text.

When the Type tool types a space on its own after one of these at the
start of a paragraph in no list, the typing so far becomes one undo
step. The new command text.startList then removes the typed characters
and the space and makes the paragraph a numbered list in 1, 2, 3 or
A, B, C, or a bulleted list with the filled dot. A paragraph with no
indents gets the 18 pt hanging indent. One Undo puts the characters
back as text with no list, and the caret goes on after them; Redo
removes them again. The same characters later in a paragraph, list
characters pasted in one piece with the space and a paragraph already
in a list start nothing.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-26 09:09:46 +07:00
bflatastic a8cc7b8f72 Dialog field-list tests use fields the Move dialog reads (#4049 refuses the others) 2026-10-26 09:09:46 +07:00
dotCooCoo 9f358a1d6d MCP: answer_dialog sets the fields of the app's open dialog and confirms or cancels it
Squashed from #4057 onto main.
2026-10-26 09:09:46 +07:00
dotCooCoo 2d10d17143 Tests: supersampled outlines are checked for width as well as darkness
The test checked only that each outline had a dark pixel, which a line
two or more pixels wide also has. It now counts the dark pixels across
the path, a stem of the type and the guide, and expects one, with and
without supersampling.
2026-10-26 09:09:45 +07:00
dotCooCoo 8c67ade824 Dialogs: Move runs with a Distance and Angle set before its next frame
Move opened without Distance and Angle, so its first frame replaced the
values a control client set with ones computed from Horizontal and
Vertical, and OK read Horizontal and Vertical without the Distance and
Angle set since the last frame. Move now opens holding the Distance and
Angle of its offset, and OK applies a Distance and Angle set since the
last frame.
2026-10-26 09:09:45 +07:00
dotCooCoo 056274f5d6 Undo: canceling an undo group keeps a batch's steps in other documents
A command.batch that edited a document with an undo group and then a
document without one was dropped from the journal as a whole when the
group was canceled, so a replay lost the second document's edit, which
the session kept. Each batch step is now noted in the undo groups it
belongs to, by the same rule as a top-level command, and a cancel takes
only those steps out of the batch's journal entry. A step that changed
the active document becomes that change. Undo groups that stay open
follow the entry and step numbers that a cancel changes.
2026-10-26 09:09:45 +07:00
dotCooCoo fd4c187ab5 Image Trace: settings that wait stay with their object when a plain image is selected
With Preview off, selecting a plain image after an Image Trace object
kept the panel on that object without saving its waiting settings. A
trace of the image then made the image's trace the panel's object, and
selecting the first object again showed its stored settings and lost the
change. The panel now keeps the waiting settings for the object it
leaves whatever is selected next.
2026-10-26 09:09:45 +07:00
dotCooCoo 58767abe0f Image Trace: the blended edge of a cut-out image adds no color to the palette
Squashed from #4075 onto main.
2026-10-26 09:09:45 +07:00
dotCooCoo bc674bec64 Image Trace: the empty-palette test uses a library blue the row maps to
The test of a color whose every path straightens to no area traced a
pale blue row with a library of a light color, black and [40, 120, 240].
With Document Library weighing hue and chroma three times as much as
lightness, the row takes the light color instead of that blue, so the
test no longer traced any blue. The library blue is now [60, 130, 235],
which the row still maps to; the assertions are unchanged.
2026-10-26 09:09:45 +07:00
dotCooCoo 0629d4e9a5 Image Trace: Overlapping layers reach only under areas that hold their own color
With Method Overlapping, each color layer covered every pixel of the colors
above it in the stack. A small dot or square on a background was then traced
once in its own color and again, at the same bounds, in every color between
the background and it, and with Shapes on each copy became its own live shape.
Those layers also ended on edges they never touched and showed through the
anti-aliased rim there.

Each layer now leaves out every 4-connected part of its stacked area that holds
no pixel of its own color. This changes the result of many Overlapping traces,
the photo presets included: fewer paths (High Fidelity Photo 121 to 69.6 on its
own quality inputs, Low Fidelity Photo 37.1 to 26.1) and no rim, around a
shape, of a color that sits apart from it. One existing test that counted the
extra copies now expects one layer per area, and another that compared layer
pixel counts now checks that the bottom layer covers the whole image.
2026-10-26 09:09:45 +07:00
dotCooCoo 2bbbdafc63 Image Trace: the eye button's hold ends on release, and the panel uses any selected trace or image
Squashed from #4076 onto main.
2026-10-26 09:09:45 +07:00
dotCooCoo 6c9ac54b22 Shape Builder: a merge across an overlap thinner than the precision gives one path
Two shapes that overlap by less than the region precision (0.01 pt) leave
their overlap out of the Shape Builder's regions as a sliver. Merging the
regions on both sides of it united only the picked faces, so the result
was a compound path with a hairline gap where the overlap had been.

A merge now takes in each dropped sliver next to a merged face when only
the merged faces' shapes fill it, both from the arrangement and from the
planar map used when open paths are selected. A thin cutout that no shape
fills stays a hole. What is left of a shape after the merge takes in a
sliver only where the shape covers it and the merged shape does not take
it in, so the two do not overlap. Pathfinder operations and Live Paint do
not use the merger and are unchanged; Live Paint's planar map does not
test which shapes cover a sliver.
2026-10-26 09:09:45 +07:00
dotCooCoo eadf7674f1 MCP: screenshot and render_preview can draw the Image Trace view
After imageTrace.setView, screenshot and render_preview still drew the
tracing result, because ui.render renders with the export options and only
the canvas turns on trace views. Only the app window showed the view.

ui.render now takes traceViews. With traceViews: true, Image Trace objects
draw in the view set with imageTrace.setView, as on the canvas, both
headless and in the running app. screenshot and render_preview take
traceViews and pass it on; without it they draw the tracing result, as
exports do. The trace-and-style prompt names the argument.

A supersampled render drew Outline view's lines, type outlines and dotted
guides as little as a quarter of an output pixel wide, so they came out
pale gray. The renderer now scales those widths and the guides' dashes by
the supersampling factor in the larger frame, so the lines stay one output
pixel wide.

Docs: docs/mcp.md (render_preview, screenshot), docs/control-protocol.md
(ui.render).
2026-10-26 09:09:45 +07:00
dotCooCoo 0641412cce Dialogs: ui.dialog.set returns an error for a field the open dialog does not read
ui.dialog.set stored any field name it was given, so a misspelled field
(`discrad` for `discard`) was kept without effect and the dialog then
ran with its old value. It now answers such a field with an error that
lists the dialog's fields, and leaves the dialog unchanged.

A dialog accepts the fields it holds, `__` fields, `discard` with a
discard button, `preview` with a live preview, the fields it reads
before a control adds them (each spec's `inputs`, for example Copy and
the object options of the Transform dialogs, Move's `distance` and
`angle`, the reference point, `path` of the export options dialogs,
`searchFolder`, Brush Options' `tips`, the Justification and
Hyphenation values that open blank, the Corners `kind` and `radius` of
corners that differ, the Gradient Stop popover's `color`, `opacity`,
`location` and `spread`, and a new artboard's `color` and display
marks), and the fields it passes to the command it runs: every
parameter of the generic `command` dialog's command, and the
`textureImage` that Load Texture… sets in the Glass and Texturizer
effects. Edit Selection now opens holding `deleted<i>` for each of its
rows, so setting a row number it does not have returns an error, and
Transparency Flattener Presets opens holding the selected preset's name
and options instead of adding them on its first frame.
2026-10-26 09:09:45 +07:00
dotCooCoo 3eda1b128c Image Trace: changes that wait with Preview off stay with their object
With Preview off, changes made in the Image Trace panel for one Image
Trace object were lost when another object was selected: selecting the
first object again showed its stored settings. The panel now keeps the
waiting changes for each object and shows them again when that object
is selected, unless the object's own settings changed in the meantime.
When Preview was turned on while another object was selected, the
object is traced with its changes when it is selected again.

Preview is now the UI command imageTrace.preview ({on?}: on, off or
toggle), and both the panel's checkbox and ui.set's imageTracePreview
run it. The command label has a row in every catalog.
2026-10-26 09:09:45 +07:00
dotCooCoo c9cc2ef076 Image Trace: Document Library keeps neutral tones off saturated library colors
With the Document Library palette, each pixel took the library color
nearest in plain Oklab distance. A 50% gray lies nearer in that distance
to a saturated blue of the same lightness than to black or a light
cream, and a muted brown is also nearer to the blue than to either. With
a black, cream and blue library, both traced as the blue.

This changes how Document Library matches pixels: each pixel now takes
the library color nearest with differences in hue and chroma (Oklab a
and b) counted three times as much as lightness. The same measure picks
which library colors are used. Neutral and muted tones take a neutral
library color, and the other palettes are unchanged.
2026-10-26 09:09:45 +07:00
dotCooCoo 529a2296a7 Shape Builder: erasing near the end of a thin region with split sides picks the region
When both sides of a 1.5 pt bar have a point level with a click 0.1 pt
from its end, the point of each side nearest the click is the end of a
segment, so the sides were not tried and an Alt-click there touched the
end edge.

A segment end now also counts when the segment is square there to the
line to the point, so splitting a side at the click gives the same
answer as an unsplit side.
2026-10-26 09:09:44 +07:00
Davit MatchakhelidzeandClaude Opus 5.5 5e68d5891c i18n(ka): shorter wording for labels that were cut off
Decided in the native-speaker review of the screens (all-t01).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-26 09:09:44 +07:00