Commit Graph
4768 Commits
Author SHA1 Message Date
dotCooCoo f27324ace5 Merge main into fix/knockout-groups-flat-masks 2026-11-13 13:01:18 -08:00
BFlat c9b2119552 Merge pull request #7176 from dotCooCoo/feat/monitor-profile-windows-linux
View: the canvas is drawn through the monitor profile on Windows and X11
2026-11-14 03:24:26 +07:00
BFlat 3ec0cdec71 Merge pull request #7245 from dotCooCoo/fix/not-files-real-params
Plug-ins: file-key exemptions name only params a command takes
2026-11-14 03:24:13 +07:00
BFlat f05cb5e7a4 Merge pull request #7223 from dotCooCoo/fix/inline-graphics-in-symbol-art
Type: inline graphics in symbol, mask and pattern art follow their symbols
2026-11-14 03:24:03 +07:00
BFlat cc0413ee34 Merge pull request #7217 from dotCooCoo/fix/brush-repeated-names-numbered
Brushes: repeated brush names are numbered when a document loads
2026-11-14 03:23:54 +07:00
BFlat 50084b789f Merge pull request #7243 from dotCooCoo/fix/smooth-segment-under-drag
Smooth: a drag along a segment smooths it when its anchors are out of reach
2026-11-14 03:23:45 +07:00
BFlat a3ab152a0a Merge pull request #7246 from dotCooCoo/fix/objects-on-path-flatten-once
Objects on Path: each path is flattened once per placement or transform
2026-11-14 03:23:37 +07:00
BFlat 9107dad274 Merge pull request #7194 from dotCooCoo/fix/item-3829
Envelopes: a partly transparent image keeps its alpha where its warp pieces overlap
2026-11-14 03:23:28 +07:00
BFlat 00fba7ae24 Merge pull request #7121 from dotCooCoo/fix/graph-series-paint-other-commands
Graphs: stroke, gradient and recolor commands update a series' stored paint
2026-11-14 03:21:58 +07:00
BFlat cf6c666d25 Merge pull request #6980 from addibble/seam-round-joins
3D effects: every facet's seam has round joins
2026-11-14 03:21:49 +07:00
dotCooCoo 88b587baa6 PDF/SVG export: knockout groups nest no deeper with more elements
A knockout group was written as a chain of soft masks, one inside the
next for each element, so a group of about 200 elements made a PDF that
VectorCraft's own PDF import refused (form nesting past 50) and an SVG
that the web build refused as too deep.

- PDF writes a knockout group as one transparency group with /K true,
  with /I true when the group isolates, and PDF import reads it back as
  a knockout group. An element with several paints is drawn as one
  group inside it, so its own fills and strokes do not knock each other
  out.
- Where an element knocks out less than the area it paints (its opacity
  or mask defines its knockout shape, or it paints translucently), each
  element is drawn through one soft mask of the overlapping elements
  above it. Past 65,536 objects in a group's masks, or 2,048 elements,
  the group is a PDF knockout group, with a warning.
- SVG draws each element through one mask of the overlapping elements
  above it, built from one shared copy of each element's shape, so the
  elements stay siblings. Past 65,536 shapes in a group's masks, or
  2,048 elements, the group is written as a plain group, with a warning.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-13 12:21:39 -08:00
BFlat 08b6cfd3e8 Merge pull request #7227 from dotCooCoo/fix/hindi-variable-and-join-terms
i18n: Hindi uses one word for a variable and जोड़ें for joining paths
2026-11-14 02:40:46 +07:00
BFlat a105e14aef Merge pull request #7220 from dotCooCoo/feat/image-indexed-color
Edit Colors: convert embedded images to indexed color
2026-11-14 02:40:36 +07:00
BFlat 5f8e4c1913 Merge pull request #7240 from dotCooCoo/feat/smooth-reach-overlay
Smooth tool: the drag shows the band the tool smooths
2026-11-14 02:40:24 +07:00
BFlat 6e54257294 Merge pull request #7225 from dotCooCoo/fix/modal-blocks-canvas-touch
Touch: canvas taps, presses and view navigation are ignored while a modal dialog is open
2026-11-14 02:40:15 +07:00
BFlat 90a9e00fdd Merge pull request #7205 from dotCooCoo/fix/svg-interactivity-hide-script-paths
SVG Interactivity: replies name JavaScript files outside the read roots by file name
2026-11-14 02:40:06 +07:00
BFlat 3a7295e588 Merge pull request #7201 from dotCooCoo/fix/revert-drops-pending-place-reads
Place: File › Revert drops reads started for the content it discards
2026-11-14 02:39:57 +07:00
BFlat 95b328dcca Merge pull request #7193 from dotCooCoo/fix/trace-blur-rings
Image Trace: blurred edges no longer trace as rings of in-between colors
2026-11-14 02:39:47 +07:00
BFlat 58dd9e8908 Merge pull request #7230 from dotCooCoo/fix/docinfo-hidden-object-paints
Document Info: hidden objects and objects at an opacity of 0 list no brushes or paints
2026-11-14 02:39:39 +07:00
BFlat 34457735e5 Merge pull request #7231 from dotCooCoo/fix/threaded-type-measures-paths-and-aligned-frames
Type: threaded paths and frames aligned off the top measure the paragraphs they need
2026-11-14 02:39:29 +07:00
BFlat 821e2d0bb5 Merge pull request #7224 from dotCooCoo/fix/close-modified-background-tab-keeps-front
Documents: closing a modified background tab keeps the document in front
2026-11-14 02:39:19 +07:00
BFlat 4dc9c5c5d3 Merge pull request #7218 from dotCooCoo/fix/batch-fit-journal-index
Artboards: a batch's Fit to Artwork Bounds step journals the artboard it fits
2026-11-14 02:39:07 +07:00
BFlat aa6d9acc95 Merge pull request #7228 from dotCooCoo/fix/global-edit-docs-type-image-groups
Docs: Global Edit leaves out groups holding type or images
2026-11-14 02:38:55 +07:00
BFlat 38c0f3ed61 Merge pull request #7100 from dotCooCoo/fix/flatpak-clipboard-images
Clipboard: the Flatpak on GNOME copies and pastes pictures and SVG with other apps
2026-11-14 02:38:46 +07:00
BFlat f0c3646e90 Merge pull request #7198 from dotCooCoo/fix/area-type-band-coverage
Type: area type lines stay inside a frame that pinches in within their band
2026-11-14 02:38:38 +07:00
BFlat 1e385ba06e Merge pull request #7210 from dotCooCoo/fix/envelope-empty-type-box
Envelope: type that draws nothing adds no box next to other content
2026-11-14 02:38:27 +07:00
BFlat 858749d596 Merge pull request #7222 from dotCooCoo/fix/parity-doc-preferences-bullet
Docs: keep one Preferences progress bullet with the off default for Highlight Alternate Glyphs
2026-11-14 02:38:19 +07:00
BFlat b004977dba Merge pull request #7202 from dotCooCoo/fix/raster-effects-skipped-transform-budget
Effects: raster effects before a Transform effect past the budget stay with the art
2026-11-14 02:38:10 +07:00
Drew Dibble 09d5522785 Merge remote-tracking branch 'upstream/main' into seam-round-joins
# Conflicts:
#	docs/effects-parity.md
#	docs/gaps.md
#	docs/target-app-parity.md
2026-11-13 12:29:58 -07:00
dotCooCoo b7dbb4b59c Merge main into fix/graph-series-paint-other-commands 2026-11-13 11:18:16 -08:00
dotCooCoo af91a37669 Merge main into feat/monitor-profile-windows-linux 2026-11-13 11:12:25 -08:00
BFlat 630ef6f549 Merge pull request #7129 from dotCooCoo/fix/brush-library-names-translated
Brushes: built-in library panels show brush names in the UI language
2026-11-14 01:55:05 +07:00
BFlat e718e975b6 Merge pull request #7104 from dotCooCoo/feat/actions-record-into-selected
Actions: Begin Recording adds steps to the selected action, and a drag moves a step
2026-11-14 01:54:47 +07:00
BFlat 1664f6de66 Merge pull request #7139 from dotCooCoo/feat/ctb-type-tools-font-fill
Contextual Task Bar: the Type tools show font family, style, size and Fill
2026-11-14 01:54:39 +07:00
BFlat ca8e49e9e2 Merge pull request #7158 from dotCooCoo/fix/export-unused-option-warning
Export: warnings name an option the chosen format doesn't read
2026-11-14 01:54:29 +07:00
BFlat 820b82b8d3 Merge pull request #7188 from dotCooCoo/fix/color-gamut-cache-profile
Color: the out-of-gamut warning updates after a profile change
2026-11-14 01:54:13 +07:00
BFlat a8db64db47 Merge pull request #7208 from dotCooCoo/feat/live-paint-selection-cursors
Live Paint Selection: cursor shows a face, an edge or nothing to select
2026-11-14 01:54:04 +07:00
BFlat 5010861362 Merge pull request #7199 from dotCooCoo/fix/close-background-tab-keeps-front
Documents: closing a background tab keeps the document in front
2026-11-14 01:53:56 +07:00
BFlat 9bad58b73e Merge pull request #7215 from dotCooCoo/fix/new-profile-errors-hide-path
New Document profiles: errors name the profile file by its file name outside the read roots
2026-11-14 01:53:47 +07:00
BFlat 1c1bb2f96e Merge pull request #7191 from dotCooCoo/feat/gradient-hue-blend
Gradients: Hue Clockwise and Hue Counterclockwise mix stops around the hue wheel
2026-11-14 01:53:39 +07:00
BFlat 26869d1754 Merge pull request #7197 from dotCooCoo/fix/item-4498
Arrowheads: keep agents to the arrowheads file inside their read roots
2026-11-14 01:53:29 +07:00
BFlat 2370ad1b21 Merge pull request #7200 from dotCooCoo/fix/free-distort-constrain
Free Transform: Constrain keeps a Free Distort corner on its diagonal
2026-11-14 01:53:20 +07:00
BFlat edc4b712dd Merge pull request #7146 from jmverges/fix/7141-page-check-typed-envelopes
.ai and EPS import: envelopes of type stay live where other art differs from the page
2026-11-14 01:53:11 +07:00
BFlat d533018fd5 Merge pull request #7180 from ruchirguitar/feat/6740-type3-named-groups
feat(pdf): preserve Type 3 font text runs as named groups (#6740)
2026-11-14 01:53:02 +07:00
dotCooCoo 2aa7bbd791 Plug-ins: file-key exemptions name only params a command takes
A command now counts as taking a file or folder when its params
description (with the commands its `…` entries name) or its schema takes
a file key as a param. A word in the description's prose or result no
longer counts; a description whose keys are not known keeps the text
scan. The code of the call-time scan of arguments is unchanged, but it
reads the changed exemption tables. The confined run is unchanged.

- NOT_FILES drops seven entries that named no param of their command
  (object.setLiveShape path, path.reverse paths, object.pathfinder.options
  paths, object.maskImage path, imageTrace.make paths,
  svgInteractivity.info files, addon.cleanup.rejoin paths). A top-level
  `path` to object.setLiveShape or object.maskImage, `paths` to
  path.reverse, imageTrace.make or addon.cleanup.rejoin, and `files` to
  svgInteractivity.info are now refused.
- Image Trace's path fidelity setting is exempt only inside `params` and
  `savedPreset` of imageTrace.make and imageTrace.makeAndExpand, so a
  call with it is no longer refused.
- every_command_is_sorted checks that each exemption names a param its
  command takes, and that each nested exemption starts at one.
- effect.expandAsWireframes is reviewed as allowed and
  stroke.arrowheads.list as refused.
2026-11-13 10:50:53 -08:00
dotCooCoo 444f50a4c4 Objects on Path: each path is flattened once per placement or transform
stops and stop flattened the path twice, once for the points and once
for its length, and stop did both before rejecting an index past the
last object. place validated the path with attachable_path first, and
transform measured the old and new paths up to three times each.

A private Measured value now holds the flattened first subpath with its
length and closed flag, and path_length, stops, stop and transform use
it. stop returns None for an out-of-range index without measuring, and
a move of the group measures no path.

attachable_path now uses path_length, so a path whose length overflows
to infinity is no longer offered as one objects can attach to when
placement cannot measure it.
2026-11-13 10:50:24 -08:00
dotCooCoo d1f76ede8a Smooth: a drag along a segment smooths it when its anchors are out of reach
A Smooth drag along the middle of a curved segment smoothed nothing when
neither of the segment's anchors was within the reach, and paths of two
anchors were never smoothed.

- path.smoothRegion searches each curved segment where it can come
  within the reach, halving it down to pieces no longer than half the
  reach, and adds an anchor in the middle of each stretch in reach; the
  existing reach split then cuts the segment where the drag enters and
  leaves the reach. A drag that only grazes a curve finds the place on
  it nearest the drag. The search is bounded per drag and shared
  equally by the segments in reach.
- Paths of two anchors are smoothed, open or closed.
- Alt with the Paintbrush smooths a selected two-anchor curve; a
  two-anchor straight line still gets the closed stroke. Both sides use
  one segment_is_straight test.

Part of #2224
2026-11-13 10:44:19 -08:00
dotCooCoo 9a4e3e6202 Smooth tool: the drag shows the band the tool smooths
While the Smooth tool drags with a path selected that it can smooth, a
dashed outline shows the band its release smooths: every point within
the tool's radius (12 screen pixels) of the drag, round at both ends.
Alt smoothing with the Pencil, Paintbrush and Blob Brush shows the same
band. A selection with no path the tool can change shows none.

- The band is kept in squares eight radii wide, and each step of the
  drag adds its area only to the squares it reaches. A piece of a
  square's outline along a side is left out only where the square
  across holds band area.
- A drag segment too long for the squares (a jump drawn zoomed out and
  viewed zoomed in) keeps its band near each end in the squares and
  shows the rest as the two sides of its band. A step that cannot be
  added whole is added one segment at a time.
- A coarser grid of cells lists the squares and long segments, so a new
  one is checked only against those near it, and an outline is made
  again only where the band near it changed.
- After a zoom change mid-drag the band is outlined again a few hundred
  points per frame, and the work on long segments stops for the frame
  after a fixed budget. Tools report unfinished overlays with
  Tool::overlays_pending, and the canvas then draws again on the next
  frame, so the band covers the whole drag even while the pointer holds
  still.
2026-11-13 10:41:00 -08:00
dotCooCoo b513c631f9 Type: threaded paths and frames aligned off the top measure the paragraphs they need
A threaded story measured each type-on-a-path frame, and each area frame
whose lines align to the center, the bottom or justify vertically, with
the whole rest of the story. A story of 1,500 one-line paragraphs through
40 such frames was laid out over about 2.1 million bytes while the frames
were measured.

- Area type without Shrink Text to Fit now takes the paragraph probe for
  every vertical alignment. A reflow pass that places less text is
  undone, so when the final layout stops before the last paragraph break
  measured, every pass placed the same lines as with the whole rest.
- Type on a path takes it when its line starts at the start bracket: no
  Dynamic Text, Optical Margin Alignment or Roman Hanging Punctuation,
  the first paragraph aligned Left, Justify Left or Auto, and vertical
  type or no right-to-left text in the rest of the story. The story is
  scanned for right-to-left text once per distribution.
- Shrink Text to Fit, the other path settings and a share that ends in
  the story's last paragraph are still measured with the whole rest.

The same 40 frames are now measured over 21,035 bytes (aligned to the
center) and 20,583 bytes (paths aligned Left). Each frame's share is
unchanged: the tests compare every slice with the whole-rest result for
both distribution entry points, across alignments, frame shapes, wraps,
path settings, right-to-left text, styles, lists and seeded stories.
2026-11-13 10:31:42 -08:00
dotCooCoo 78a06865d7 i18n: Hindi uses one word for a variable and जोड़ें for joining paths
The Hindi catalog called a variable चर, परिवर्तनीय, वैरिएबल or
वेरिएबल from one row to the next: the Variables panel, Load and Save
Variable Library, Variable Options and the data-merge messages mixed
them, and so did variable widths, the font technology label and
environment variables. Every such row now says वेरिएबल (plural
वेरिएबल्स).

Close or Join, Join Point Text, Join the lines of each paragraph and
most of the path join messages said शामिल हों, which means joining a
group; the other join messages used जुड़ना, जॉइन or the English word.
They now say जोड़ें, as the Join command already did. The Discord rows
keep शामिल हों, and the stroke corner names and the Join tool keep
जॉइन.

hindi_rows_use_one_term_for_a_variable_and_for_joining_paths checks
both terms in every row. docs/localization-hi.md lists the terms, and
the Hindi row counts in it and in docs/localization-parity.md are
current (8,782 rows, 3,014 @msg).
2026-11-13 10:30:49 -08:00