Commit Graph
5637 Commits
Author SHA1 Message Date
BFlat bd214c124d Merge pull request #7640 from dotCooCoo/feat/canvas-character-alternates
Type: a selected character's alternate glyphs show beside it on the canvas
2026-11-15 03:22:11 +07:00
BFlat 7389d6669d Merge pull request #7396 from dotCooCoo/feat/smooth-keeps-corners
Smooth tool: keep corners where the path turns by more than 57.5°
2026-11-15 03:22:01 +07:00
BFlat 2c6c88ebc5 Merge pull request #7604 from dotCooCoo/fix/pdf-art-bounds-printing-layers
Export: a page of the art's bounds is measured on the art the file draws
2026-11-15 03:21:52 +07:00
BFlat 6970c4efec Merge pull request #7609 from dotCooCoo/fix/transform-copies-raster-effects
Effects: each copy of a Transform effect draws the raster effects listed before it
2026-11-15 03:21:43 +07:00
BFlat 6ee761e327 Merge pull request #7639 from dotCooCoo/feat/global-edit-rotated-copies
Global Edit: rotated copies are matched and take each edit turned by their angle
2026-11-15 03:21:03 +07:00
BFlat bac95f9902 Merge pull request #7631 from dotCooCoo/fix/composite-font-lent-document-only
Type: a document draws only its own composite font definitions
2026-11-15 03:20:55 +07:00
BFlat 3a76cd89ac Merge pull request #7620 from dotCooCoo/fix/live-paint-info-every-row
MCP: livePaint.info lists every appearance row of a face or edge
2026-11-15 03:20:38 +07:00
BFlat 2d9793d6f1 Merge pull request #7637 from dotCooCoo/perf/remove-breaks-thread-frames-once
Remove Breaks: a partly selected story's frames are gone through once
2026-11-15 03:20:29 +07:00
BFlat 2eb5894748 Merge pull request #7619 from dotCooCoo/fix/learn-reset-progress-doc
Docs: only learn.markStep checks a tutorial id, not learn.resetProgress
2026-11-15 03:20:03 +07:00
BFlat 013ee019e3 Merge pull request #7607 from dotCooCoo/fix/paste-copied-file-size-limit
Paste: a copied file over 64 MiB is skipped before it is read
2026-11-15 03:19:47 +07:00
BFlat c6c06b2c68 Merge pull request #7442 from dotCooCoo/fix/eps-ryumin-light-h
EPS import: Ryumin-Light-H and GothicBBB-Medium-V read as Japanese type without their CIDFont
2026-11-15 03:19:37 +07:00
BFlat a33a296ccc Merge pull request #7530 from dotCooCoo/fix/vi-missing-message-rows
i18n: Vietnamese translates 115 status and error messages it lacked
2026-11-15 03:19:06 +07:00
BFlat 8b351d475b Merge pull request #7613 from dotCooCoo/docs/localization-indonesian-bosnian
Docs: the localization page lists Indonesian once and marks Bosnian by what it translates
2026-11-15 03:18:47 +07:00
dotCooCoo dab13fbf14 Import PDF: Import PDF pages as links opens each page linked to its file
File › Open's Import PDF dialog gets Import PDF pages as links. With it on,
each page picked opens as a placed document linked to that page of the
file, on an artboard of its Crop To box and a layer named after the page,
in place of editable art. The Links panel lists each page, and Embed makes
a page editable.

document.open takes the matching linkPages param. It is refused for a
file that is not a PDF or a PDF-compatible .ai, for bytes without a path,
with a password and with textAs: outlines. The pages share one copy of
the file, and the document opens in CMYK when most of its pages do.
Save asks for a name, as for other partly read PDFs.
2026-11-14 12:13:59 -08:00
dotCooCoo b7748581d5 Merge main into feat/asset-export-panel-menu-options 2026-11-14 12:12:44 -08:00
dotCooCoo df257c2d53 Merge main into fix/svg-raster-keeps-resolution 2026-11-14 12:12:06 -08:00
dotCooCoo 163f256418 Perspective: Perspective Grid Options has Automatic Plane Positioning
Perspective Grid Options gets the two Automatic Plane Positioning
checkboxes, Anchor Point of Perspective Artwork and Intersection of
Gridlines. With the Perspective Selection tool, Shift held over an
anchor point of art in perspective, or over a gridline intersection,
with no button down, moves the active plane through that point and
hides the other planes. A plane made active then passes through the
same point. The plane goes back to its place once an object is drawn
on it or attached to it, when the grid hides or no plane is active,
when the file is opened again, and with Escape.

- perspective.plane.infer {at?, tolerance?, clear?} positions, reads
  and clears the held point, which is view state, not an undo step.
- perspective.widget.options takes anchorPoint and gridlineIntersection,
  both on by default and kept with the preferences.
- perspective.plane.move moves a held plane from where it is held.
2026-11-14 12:11:36 -08:00
dotCooCoo ebc82ca0d5 Links: Sort by Size in the panel menu lists the smallest file first
The Links panel menu gets Sort by Size beside Sort by Name, Kind and
Status, and links.list takes sort: "size". A row's size is the file size
Link Info shows: the file's size now, else the size the document keeps
of it. Rows without a size (embedded images, a missing file whose size
is not kept) come last, and equal sizes go by name. The size is read
only when sorting by it, and under automation read roots a file outside
them is not read.

Every catalog with Sort by Status gets a Sort by Size row; the Ukrainian
Sort by Status row, which read "Sort by:", now says "Sort by Status".
2026-11-14 11:43:39 -08:00
ncic badf89be39 Merge remote-tracking branch 'upstream/main' into pencil-no-guides
# Conflicts:
#	docs/mcp.md
#	docs/target-app-parity.md
2026-11-14 20:32:09 +01:00
dotCooCoo a19646b2f3 Asset Export: Create Sub-folders, Open Location after Export and Format Settings in the panel menu
Create Sub-folders and Open Location after Export are check items that set
the settings the panel shares with Export for Screens, and the panel's
Export follows them. Create Sub-folders is checked as the dialog opens on
it: on for a document without export settings, and on for remembered
folders per row, format or item, which the panel's Export now uses too.
Format Settings... opens Export for Screens on the Assets tab showing the
first row's format settings.

assets.settings.set takes openLocation (kept in document.exportSettings,
not in presets), refuses a subfolders or openLocation value that is not
true, false or null, and with subfolders false given alone also ends a
remembered folder per format or item. Export for Screens reads remembered
empty folders as none, as an export does.
2026-11-14 11:26:20 -08:00
dotCooCoo f0c920fa8e Shape Builder: leave out Live Paint faces and edges with an opacity of 0
A visible, unlocked Live Paint face or edge whose own opacity is 0 draws
nothing, as Expand and the edge stroke check already treat it, but the
Shape Builder still took it as an input. It now leaves such faces and
edges out; hidden and locked parts keep their current handling.
2026-11-14 11:15:41 -08:00
dotCooCoo 1bd269b4ed Type: Smart Punctuation replaces ligatures, extra spaces and fractions and reports results
Type > Smart Punctuation... now opens its own dialog in place of the
generic parameter form. It has the seven replacement options, Replace In
(Selected Text Only or Entire Document) and Report Results, which lists
how many of each chosen replacement were made after OK. The dialog opens
on the options confirmed last.

- type.smartPunctuation takes fiLigatures, flLigatures, spaces and
  fractions, all off by default, so existing calls behave as before.
- Ligatures write U+FB00 to U+FB04, longest match first. Expert
  Fractions writes the one-character fractions Unicode encodes, and
  skips one with a digit, a slash or a decimal point next to it, across
  a change of style too. Either is written only where the run's font
  has a glyph for it.
- Smart Spaces keeps one space after a period, across runs. An inline
  graphic separates the text on either side of it.
- The reply adds a replaced object with a count per kind. Nothing to
  replace still records no undo step.

Docs: docs/mcp.md, docs/type-parity.md.
2026-11-14 11:09:09 -08:00
datatimp 8d3f8d1ce5 Merge branch 'main' of https://github.com/storytold/vectorcraft into fix/7340-guide-row-clicks 2026-11-14 13:36:34 -05:00
dotCooCoo 3f3bccde77 Merge main into fix/svg-use-chain-bounded 2026-11-14 10:33:52 -08:00
dotCooCoo 2c5f3b9d20 SVG import: refuse an SVG whose use copies and styles expand past the limits
usvg copies the element a <use> shows, and every copy gets its own copy of
the declarations its style attribute and matching style sheet rules give
it. A chain of <use>s that doubles at each level made usvg build those
copies before the import's object limit was checked: a 101 kB file whose
rectangle has a 100 kB style took 4.7 GB at 14 levels, and one 100 kB
style sheet rule on 16,000 groups took 1.5 GB without any <use>. A plain
chain stopped at usvg's own 1,000,000-node limit with a parse error.

The import now measures, before usvg reads the SVG, how many elements it
expands to and how many bytes of style values those elements copy, each
element measured once and each <use> counted as one addition. References
follow usvg's rules: first element of an id, href before xlink:href, and
the self and back references usvg leaves out. An SVG past 999,999
elements (500,000 on the web) is refused as too large, a loop of <use>
references usvg would copy without end is refused too, and one past 64 MB
of copied style values is refused with the new SvgError::StylesTooLarge.
SVG images count toward the same 64 MB as the SVG showing them, an image
past either limit refuses the whole import, and an image that doesn't
decode does not count.
2026-11-14 10:33:00 -08:00
dotCooCoo 924aa258d0 Merge main into fix/shape-builder-open-path-drawn-fill 2026-11-14 10:29:06 -08:00
dotCooCoo 59d238d682 Merge main into fix/tabbed-rtl-negative-tracking-break-bound
# Conflicts:
#	crates/text/src/layout/breaking.rs
#	crates/text/src/layout/wrapping_tests.rs
2026-11-14 10:25:44 -08:00
BFlat 0adbdce6cb Merge pull request #7621 from ruchirguitar/feat/symbols-item-context-menu 2026-11-15 01:14:51 +07:00
dotCooCoo d2e36f689b Docs: PDF/X-1a writes tagged gray images without their profile
The progress-doc line for gray and RGB image profiles in PDF export now
states that PDF/X-1a, which allows no ICC-based color spaces, writes a
gray image with a gray profile in DeviceGray without the profile, and
converts RGB images to CMYK as before.
2026-11-14 10:10:37 -08:00
dotCooCoo 7cbbf97b74 Merge main into fix/pdf-art-bounds-printing-layers 2026-11-14 10:03:22 -08:00
dotCooCoo 7ff186bd31 Type: a selected character's alternate glyphs show beside it on the canvas
With a Type tool and exactly one character selected, the canvas shows up
to five of that character's alternate glyphs in a row beside it. A click
runs the command the Glyphs panel's double-click runs, as one undo step;
an arrow at the end opens the Glyphs panel on Alternates for Current
Selection when the character has more. Preferences > Type > Show
Character Alternates (showCharacterAlternates, on by default) turns the
row off.
2026-11-14 10:00:04 -08:00
dotCooCoo 951f689e8f Export: an HP-GL plot of the art's bounds measures images by the art their effects add
An image or a gradient mesh with a visible Crop Marks effect, or with a
Vector Halftone effect that makes dots, is measured in a plot of the art's
bounds. A halftone that makes no dots, such as one past the effect's cell
limit, leaves the image out as before.
2026-11-14 09:59:27 -08:00
dotCooCoo 7e390fe079 Merge main into fix/3d-masked-cap-graphic-once 2026-11-14 09:55:12 -08:00
dotCooCoo a3ba3eeb38 Merge main into fix/3d-shadow-builds-once 2026-11-14 09:52:39 -08:00
dotCooCoo 7e84899786 Merge main into fix/graph-series-group-opacity 2026-11-14 09:52:39 -08:00
dotCooCoo e1da80a2c8 Merge main into fix/learn-panel-commands 2026-11-14 09:52:25 -08:00
dotCooCoo 22f4b18021 Merge main into fix/tr-message-rows 2026-11-14 09:52:07 -08:00
dotCooCoo 283c13dfd8 Merge main into fix/type-no-op-undo-more 2026-11-14 09:49:48 -08:00
dotCooCoo 588e8e0bb0 Merge main into fix/pdf-tiff-keeps-icc 2026-11-14 09:48:14 -08:00
dotCooCoo 769d14ee7a Merge main into feat/arrange-nest 2026-11-14 09:47:03 -08:00
dotCooCoo 59f715ca00 Merge main into feat/da-complete-messages 2026-11-14 09:46:18 -08:00
dotCooCoo 29be6fc287 Merge main into fix/ai-envelope-budget-warped-type 2026-11-14 09:46:10 -08:00
dotCooCoo f43d16268a Global Edit: rotated copies are matched and take each edit turned by their angle
Select > Start Global Edit now also takes rotated copies of the selected
object or group, in the highlights before the start, in the Global Edit
Options' Results count and in the started edit. An edit reaches each copy
turned by that copy's angle, so an anchor moved to the right on the
selected object moves downward on a copy turned a quarter turn clockwise.

The copy's angle is the one that lays the selected object's anchors and
handles on the copy's in order (a least-squares fit in the unit box),
and the copy is the same shape when each point then lies within a
millionth of the larger side of the copy's box. Reflected copies and
copies stretched along one direction stay unmatched. With Size, a rotated
copy matches when it is the object rotated without scaling. The no-match
message now names only reflected copies, in every catalog that has it.

Docs: docs/mcp.md, docs/gaps.md, docs/ui-parity.md and the evidence list
in docs/target-app-parity.md.
2026-11-14 09:43:51 -08:00
dotCooCoo c51d14262f Merge main into fix/composite-font-lent-document-only 2026-11-14 09:42:51 -08:00
dotCooCoo a49dd999f5 Merge main into fix/convert-to-text-locked-frames 2026-11-14 09:42:27 -08:00
dotCooCoo 3674865d62 Merge main into feat/smooth-keeps-corners 2026-11-14 09:42:14 -08:00
BFlat 78131ae11c Merge pull request #7419 from dotCooCoo/fix/type-dialogs-story-wide
Type: Justification, OpenType, text styles and Convert to Text change every frame of a selected story
2026-11-15 00:42:04 +07:00
dotCooCoo 0bd4a1c331 Merge main into fix/artboard-history-index-wrong-type 2026-11-14 09:41:57 -08:00
BFlat fcfad959ff Merge pull request #7588 from dotCooCoo/fix/mesh-point-color-panel
Color: the panels show the color and opacity of picked gradient mesh points
2026-11-15 00:41:54 +07:00
BFlat e76f8d2c88 Merge pull request #7501 from dotCooCoo/fix/export-bakes-symbol-art-effects
Export: live effects in symbol art apply in PDF, EPS, print and DXF
2026-11-15 00:41:46 +07:00