Commit Graph
14291 Commits
Author SHA1 Message Date
dotCooCoo 793dbb0201 Merge main into fix/after-the-last-missing-link-question-the-open-s 2026-11-14 23:06:33 -08:00
BFlat 0995c130d1 Merge pull request #7211 from dotCooCoo/fix/composite-font-error-translations
i18n: translate the composite font errors in the complete-message languages
2026-11-15 13:51:57 +07:00
BFlat 4a5f07b8c3 Merge pull request #7753 from dotCooCoo/feat/info-panel-tool-readouts
Info: the panel shows the move, transform, Zoom and Paintbrush values of the tool in use
2026-11-15 13:50:30 +07:00
BFlat 8e1e344f84 Merge pull request #7752 from dotCooCoo/fix/perspective-infer-followups
Perspective: Automatic Plane Positioning checks a held plane's own place and finds skewed intersections
2026-11-15 13:50:21 +07:00
BFlat 941277aa38 Merge pull request #7747 from dotCooCoo/feat/3d-render-wireframe
3D and Materials: Render Settings › Wireframe draws the live 3D effect as its faces' edges
2026-11-15 13:50:13 +07:00
BFlat 0cef4fa727 Merge pull request #7743 from dotCooCoo/fix/legacy-ai-artboard
.ai import: legacy PostScript .ai files open on their own artboard
2026-11-15 13:50:00 +07:00
BFlat 35a0d5ab04 Merge pull request #7755 from dotCooCoo/fix/clip-type-paint-export
Clipping: painted type keeps its fill and stroke in a group with geometry effects
2026-11-15 13:49:52 +07:00
BFlat fd6b3fb9a9 Merge pull request #7748 from dotCooCoo/feat/live-paint-selection-triple-click
Live Paint: a Live Paint Selection triple-click selects the parts of the same paint
2026-11-15 13:49:42 +07:00
BFlat 4ca206fea9 Merge pull request #7749 from dotCooCoo/fix/svg-textpath-pathlength
SVG import: textPath startOffset follows the path's pathLength
2026-11-15 13:49:33 +07:00
BFlat b43372361e Merge pull request #7746 from dotCooCoo/fix/replace-clipped-psd-keeps-transform
Place: a plain image replacing a clipped PSD keeps its scale and rotation
2026-11-15 13:49:22 +07:00
BFlat bdfd445eef Merge pull request #7662 from ruchirguitar/feat/style-neon-glow
Graphic Styles: built-in Neon & Glow graphic style library
2026-11-15 13:49:11 +07:00
dotCooCoo aa7166be0b Merge main into fix/after-the-last-missing-link-question-the-open-s 2026-11-14 21:41:46 -08:00
BFlat 78be970bc3 Merge pull request #7437 from dotCooCoo/fix/tr-draw-label
i18n: Turkish Draw labels use the drawing verb instead of a tied game
2026-11-15 12:38:28 +07:00
BFlat 1a596c0362 Merge pull request #7653 from dotCooCoo/fix/svg-export-confined-image-links
MCP: SVG output under read roots refuses to name a linked image file outside them
2026-11-15 12:38:16 +07:00
BFlat 82b0c915a3 Merge pull request #7734 from dotCooCoo/feat/place-show-import-options
Place: Show Import Options asks for each file's import options, or uses the ones confirmed last
2026-11-15 12:38:07 +07:00
BFlat b4bd916141 Merge pull request #7737 from dotCooCoo/feat/select-similar-button
Control bar: Select Similar Objects selects by the attribute its menu keeps
2026-11-15 12:37:57 +07:00
BFlat 6dd478a420 Merge pull request #7456 from dotCooCoo/feat/ai-save-envelope-case
.ai save: a top object with uneven sides stays a live envelope
2026-11-15 12:37:47 +07:00
BFlat acf04dd00f Merge pull request #7724 from dotCooCoo/fix/ai-off-artboard-art
.ai import: symbol instances in older files are read, so art outside the artboard opens
2026-11-15 12:37:39 +07:00
BFlat a1f10d4566 Merge pull request #7643 from dotCooCoo/fix/aligned-paint-rows-of-design-art
Graphs: aligned paint and stroke rows given with a design's art are rows of its stack
2026-11-15 12:37:29 +07:00
BFlat ba350c2e9f Merge pull request #7745 from dotCooCoo/fix/svg-css-not-rule-budget
SVG import: :not() rules test only the rules indexed for the element
2026-11-15 12:37:19 +07:00
BFlat 8fa6a7b881 Merge pull request #7742 from dotCooCoo/fix/swatch-conflict-paste-document
Swatch Conflict: OK pastes nothing after another document became active
2026-11-15 12:37:11 +07:00
dotCooCoo 814cae044f Clipping: painted type keeps its fill and stroke in a group with geometry effects
A clip group whose clipping path is type with a fill or stroke lost that
paint when a group around it had a geometry effect. Outlining the type
for the effect replaced it with a group of glyph outlines, and a group
paints nothing as a clipping path. Distort effects lost it on the canvas
and in SVG and PDF; Transform effects that only move lost it in SVG and
PDF when other type in the group stayed type.

The type's outlines now clip, its fills become art behind the clipped
art inside the clip, and its strokes become art over it outside the
clip, as the canvas draws an unaffected clip group.
2026-11-14 21:34:17 -08:00
dotCooCoo bcadfc7ac8 Info: the panel follows the tool in use
While the Selection, Direct Selection or Group Selection tool moves the
selection, or the Gradient tool draws a vector, W and H show the change
in x and y, with the distance and the angle under them. A Scale tool
drag shows its percentages; a Rotate, Reflect or Shear tool drag shows
the center of the selection's box and its angles. The Zoom tool adds the
magnification and the Paintbrush the name of its brush.

W and H follow Use Preview Bounds. With several objects selected, the
panel shows only the fill, stroke and type values they share, and Show
Options adds a tint's swatch and percentage and a gradient's swatch name.

- Tool::readout and Readout (crates/tools/src/readout.rs).
- info.readout returns the selection's size and the tool's readout.
- Docs: docs/mcp.md, docs/ui-parity.md.
2026-11-14 21:31:28 -08:00
dotCooCoo 4516cff69a Perspective: Automatic Plane Positioning checks a held plane's own place and finds skewed intersections
- perspective.grid.set rejects an offset that puts a plane behind the
  viewer even while Automatic Plane Positioning holds that plane, so the
  plane does not vanish when positioning ends.
- The gridline intersection nearest the pointer is found on strongly
  skewed planes: each drawn line is searched at the point nearest the
  pointer on the page, instead of a few cells around the pointer's
  inverse.
- Moves while an artboard name is pressed no longer reach the tool as
  hover, so Shift does not position the plane while the button is down.
2026-11-14 21:26:52 -08:00
dotCooCoo 923ba3d1bb 3D and Materials: the 3D area row lists Render Settings › Wireframe and its tests 2026-11-14 21:22:26 -08:00
dotCooCoo 9762e124fc SVG import: textPath startOffset follows the path's pathLength
A startOffset given as a length now counts in the units of the
referenced element's pathLength, so pathLength="100" on a path 400
long puts startOffset="50" at 200. A percentage stays a share of the
computed length. A pathLength of 0 keeps an offset of 0 at the start
and puts any other offset past the end, and an offset too large to
scale starts at the path's end instead of its start.

https://www.w3.org/TR/SVG2/text.html#TextLayoutAlgorithm
https://www.w3.org/TR/SVG2/paths.html#PathLengthAttribute
2026-11-14 21:14:20 -08:00
dotCooCoo 27a0dc89d4 3D and Materials: Render Settings › Wireframe draws the live 3D effect as its faces' edges
The 3D and Materials panel gets a Render Settings menu with Wireframe.
Extrude & Bevel, Revolve, Inflate and Rotate take a `render` parameter,
`{mode: "shaded" | "wireframe"}`. In wireframe mode the effect stays
live and draws the edges Expand as Wireframes gives, each once, as
0.5 pt black strokes with round joins, with no shadow or graphics. The
object's own opacity, blending mode and opacity mask apply to the mesh.

Commands that set wireframe mode are checked against the edges it
draws: the shaded surface's paint copies, graphics and shadow limits do
not refuse them. A `render` value that is not an object holding only a
valid `mode`, and `render` on the 3D (Classic) effects, are refused.

Docs: docs/three-d.md, docs/mcp.md, docs/effects-parity.md,
docs/target-app-parity.md.
2026-11-14 21:04:33 -08:00
dotCooCoo d62de12db6 Live Paint: Live Paint Selection triple-click selects parts of the same paint
A triple-click with the Live Paint Selection tool on a face now selects
every face of its group with that face's fill, and on an edge every edge
of its group that draws with that edge's stroke paint. Hidden faces and
edges are left out. Before, a triple-click selected only what its third
click selected.

With Shift held, the parts are toggled from the selection there was
before the clicks: the tool keeps what the double-click and the Shift
clicks of the series toggled, and the triple-click toggles those back.

docs/target-app-parity.md's Live Paint Selection line says so.
2026-11-14 21:02:05 -08:00
dotCooCoo bee46530d8 Place: a plain image replacing a clipped PSD keeps its scale and rotation
Replace measured the image inside a PSD or PSB file's clip group only
when the new file brought its own clipping path. A plain image placed
with `replace` over such a clip group took only the group's center and
came in at 100%, losing the image's scale and rotation. The image in
the group is now measured whenever the new art is an image, clipped or
not.
2026-11-14 20:40:45 -08:00
BFlat 282559c105 Merge pull request #7405 from dotCooCoo/fix/i18n-read-roots-graph-design-rows
i18n: translate the read-root, linked JavaScript and graph design refusals
2026-11-15 11:38:25 +07:00
BFlat 6b3ae1c2f8 Merge pull request #7705 from dotCooCoo/fix/installed-script-runs-checked-text
Scripts: File › Scripts runs the text its check read, with includes from the checked folder
2026-11-15 11:38:16 +07:00
BFlat 225947af05 Merge pull request #7728 from dotCooCoo/feat/3d-lighting-widget
3D and Materials: the Lighting tab's widget moves lights around the object
2026-11-15 11:38:09 +07:00
BFlat 269674be17 Merge pull request #7738 from dotCooCoo/fix/narrow-popups-ellipsis
Menus: long popup rows are shortened with an ellipsis so the popup stays inside a narrow window
2026-11-15 11:38:00 +07:00
BFlat 2607a98c1f Merge pull request #7726 from dotCooCoo/feat/eraser-tip-variations
Eraser: Angle, Roundness and Size vary with Random, Pressure, Tilt, Bearing or Rotation
2026-11-15 11:37:51 +07:00
BFlat f3c093b6cd Merge pull request #7740 from dotCooCoo/feat/assign-profile-choices
Color management: Assign Profile offers Don't Color Manage, the working space or a profile
2026-11-15 11:37:43 +07:00
BFlat 511f36ed4c Merge pull request #7721 from dotCooCoo/fix/glyph-forms-review
Type: glyph forms and width forms follow the OpenType rules
2026-11-15 11:37:33 +07:00
BFlat dc8149cdf1 Merge pull request #7723 from dotCooCoo/fix/pdf-page-links-review
Import PDF: linked pages refuse placeholder .ai files, read the file once and keep blank pages
2026-11-15 11:37:26 +07:00
BFlat 70605ff828 Merge pull request #7725 from dotCooCoo/fix/issue-7524
Fix #7524: the canvas's frame fits the display's largest texture side
2026-11-15 11:37:17 +07:00
BFlat 3a2a8772f5 Merge pull request #7730 from dotCooCoo/fix/hpgl-9slice-art-bounds
Export: the HP-GL plot of the art's bounds places 9-slice and filtered symbol art before measuring
2026-11-15 11:37:09 +07:00
BFlat 23be0cf916 Merge pull request #7634 from dotCooCoo/fix/svg-data-url-decode-bounded
SVG import: image data URLs are decoded once each, within 512 MB per import
2026-11-15 11:36:57 +07:00
BFlat c7ed93dc31 Merge pull request #7736 from dotCooCoo/feat/pattern-move-tile-with-art
Pattern Options: Move Tile with Art moves the tile with the pattern's art
2026-11-15 11:36:50 +07:00
BFlat 3ce7b256b6 Merge pull request #7735 from dotCooCoo/fix/ai-cs-type-from-editing-data
.ai import: files saved for version 11 take their type from the text document
2026-11-15 11:36:41 +07:00
BFlat 94432bf2d0 Merge pull request #7729 from dotCooCoo/fix/pdf-image-profile-to-destination
PDF export: CMYK and other RGB destinations convert tagged images from their profile
2026-11-15 11:36:32 +07:00
dotCooCoo 13fa65cf77 SVG import: :not() rules test only the rules indexed for the element
set_by_not_rules tested every rule with a :not() against every element,
while matched_bytes, which charges the import's selector budget, counts
only the rules Index::candidates gives for the element. A style sheet of
many class-keyed :not() rules made the pre-pass test rules x elements
selectors that the budget never saw. It now loops over the same
candidates, which hold every rule that can match the element, so the
properties it returns are unchanged.
2026-11-14 20:35:10 -08:00
ruchirguitar f77bbaf32e docs: record Neon & Glow library in roadmap and align G5 estimate history 2026-11-15 09:55:20 +05:30
dotCooCoo 829c5973d1 Links: Cancel of a missing-link question keeps the line about modified files
With Update Links: Manually, Cancel in Linked File Not Found, or in the Find Linked Files dialog its Find in Folder… opened, shows the line about the linked files that changed on disk before the open's notes, as the last answer does. With Ask When Modified, Cancel still asks nothing more.
2026-11-14 20:23:47 -08:00
ruchirguitar 44acce4a27 Merge remote-tracking branch 'upstream/main' into feat/style-neon-glow
# Conflicts:
#	ROADMAP.md
#	docs/gaps.md
#	docs/target-app-parity.md
2026-11-15 09:46:14 +05:30
dotCooCoo 39a4de61cb Merge main into fix/aligned-paint-rows-of-design-art 2026-11-14 20:00:33 -08:00
dotCooCoo 8767cf847f .ai save: check a split top object's sides at every point they have
The writer compared the top object's patch with the one the reader makes
of the written grid on an even 9 x 9 grid of places. A split side can
change how the reader samples a short curve that falls between those
places, so a top object could be written live although the reader would
map the contents differently there.

Coons::places gives the places in u and v where the patch's sides have
points. Each side runs straight between them, so the writer now compares
the four sides of both patches at every one of those places, within a
third of the tolerance; a point inside a patch blends its sides and
corners, so the patches then lie within the tolerance everywhere.
2026-11-14 19:55:47 -08:00
dotCooCoo a399683204 Merge main into fix/after-the-last-missing-link-question-the-open-s 2026-11-14 19:50:16 -08:00