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.
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.
Global Edit does not take images or text, so a group holding type or an
image is not a missing case. docs/gaps.md drops it from G5's Missing
line and states the exclusion next to the similar-groups entry, with
the help page. docs/ui-parity.md states the same exclusion and no longer
lists highlighting the matches before the start as remaining, since it
ships with a regression test. docs/target-app-parity.md gains an
Evidence line.
Closing a modified tab that is not in front shows it while the Save
Changes dialog asks about it. After Save or Don't Save, the closed tab's
neighbor became the current document instead of the document that was in
front before the question.
Closing a background tab with its close button, or `file.close` with its
`index`, now remembers the uid of the document in front in the dialog's
protected `__front` field, and once the asked document closes, that
document is made current again while it is still open. The field
survives a Save dialog shown off the UI thread. Cancel keeps the asked
document in front, closing the document in front still brings its
neighbor forward, and Close All and Quit are unchanged.
A band whose top and bottom are equal lost its only piece when the repeated cut was removed, so the line kept the frame's whole width. Anchor cuts now apply only to a band with height.
With Enable Touch Gestures on, a two-finger tap on the canvas undid and a
three-finger tap redid even while a modal dialog was open, and in the Touch
workspace a two-finger tap switched modes behind it. Fingers already down
when a dialog opened could still complete a tap when they lifted, during
the dialog or after it closed.
While a modal is open, from the frame it opens:
- no finger tap runs a command and no multi-finger gesture begins; the
fingers already down are forgotten, so lifting them later runs nothing
- a primary press does not reach the tool, a middle-button press does not
start a pan, and a double-click does nothing
- a long touch does not drop the canvas press
- a click in Presentation Mode does not step to the next artboard
- a pinch, wheel turn or trackpad rotation does not move the view, and the
rest of a wheel turn made under the dialog is dropped after it closes;
a new wheel turn after the dialog closes moves the view at once
Docs: docs/target-app-parity.md, docs/mcp.md.
docs/target-app-parity.md listed the "Preferences that act" bullet three
times. Two older copies disagreed on Highlight Alternate Glyphs (one said
on by default, the code sets it off in Prefs::default) and still counted
about 14 stored options. The newest copy is kept, now with the Highlight
Alternate Glyphs clause (off by default), and its count names the two
options still stored only: Scratch Disks and the legacy vector clipboard.
The older of the two "Preferences audit (2026-10-30)" bullets, which still
listed five stored-only options, is removed, and the UI chrome summary row
now says 2 options, matching docs/gaps.md G12.
Crossings of the middle of a line's band that lay within a few units of rounding of each other were joined as a seam, so two contours of an area type frame 1e-7 pt apart at x = 1e8 held one line across the gap between them. A vertical edge crosses the middle at its own x with no rounding, so a gap at one is no longer joined.
Brushes, Spot Color Objects, Pattern Objects and Gradient Objects left
out a fill or stroke that was hidden or at an opacity of 0, but still
listed an object that was itself hidden or at an opacity of 0, and the
objects inside such a group or layer. They now leave those out, their
characters' paints and colorized images included. With Selection Only,
an object selected inside a hidden group or layer, or one at an
opacity of 0, is left out too. Objects still counts every object.
With Invert Wrap and an offset, each piece of a line's band kept only the x that one part of the shape held within the offset of every height of the piece. Where the offsets of two parts met across a gap (one above and one below), the heights between them held neither part, and the line lost that x although the grown shape covered the whole band.
The band is now also cut at every height an offset above or below an anchor of the shape (when there are at most 64 of them), and the horizontal edges at the ends of a piece's window count, so the window of the piece between the meeting offsets reaches both parts.