Skip to content

M8.17: Edit envelopes on the canvas (M8 done) - #203

Merged
bflatastic merged 2 commits into
mainfrom
m8-envelope-editing
Oct 6, 2026
Merged

bflatastic merged 2 commits into
mainfrom
m8-envelope-editing

Conversation

@bflatastic

Copy link
Copy Markdown
Member

Envelopes can now be edited on the canvas: Edit Contents, mesh points and handles, and Control bar controls. With this, all 20 M8 tasks have landed, and the ROADMAP marks M8 done.

M8.17: editing envelopes on the canvas

  • Edit Contents. While you edit an envelope's contents, clicks hit the content where it sits undistorted (new Hit.contents_of), and the menu label toggles to Edit Envelope.
    • It has no default shortcut: the reference app's Shift+Cmd+V is Paste in Place here. This is documented and tested.
  • Mesh on the canvas. A selected envelope shows its mesh (the warp surface grid, the mesh grid, or the top object's outline) instead of the content's outlines.
  • Mesh handles. Mesh envelopes get bezier handles in a new append-only field, EnvelopeKind::Mesh.handles.
    • When empty, the envelope keeps today's Catmull-Rom map. The first handle edit fills the handles in exactly along the grid lines.
    • Round-trip and old-file tests cover this.
    • setMeshPoint takes handle.
    • object.mesh.movePoint, addLine and deletePoint also edit mesh envelopes.
  • Tools. A new shared tools::meshedit::MeshEdit lets the Mesh tool and Direct Selection drag points and the clicked point's handles. The Mesh tool also adds rows and columns inside mesh envelopes.
  • Reset and Release. Reset with Mesh keeps the shape, including its handles, and Release returns the exact mesh.
  • Control bar. New envelope controls: Edit Envelope / Edit Contents, warp style, orientation, bend and H/V distortion (or mesh rows and columns), Reset, and Envelope Options. A headless frame test clicks them.

ROADMAP and README (M8 is complete)

  • M8 row: ✅ done, listing what the fidelity pass delivered. What's left: Anti-Alias and Preserve Shape output, editing warp-envelope points, brush interpolation in blends, and Free Transform/Scale/Reflect along a rotated box.
  • Parity row (Symbols, blends, envelopes, Repeat, perspective): 75% → 88%; remaining work 8–12 h → 5–8 h.
  • Feature parity: ~74% → ~75% (honest range 69–75%), ~225–345 h. Full parity ~56%, ~330–515 h.
  • "Shipped so far" and the README status line are updated to match.

Checks

🤖 Generated with Claude Code

bflatastic and others added 2 commits October 6, 2026 12:16
…andles, Control bar

- Edit Contents: while an envelope's contents are edited, clicks hit the
  content where it sits undistorted and the Selection tool selects it; the
  menu item reads Edit Envelope then. No default shortcut: the reference
  app's (Shift+Cmd+V) is Paste in Place here.
- A selected envelope shows its mesh (a warp's surface grid, a mesh's own,
  a top object's outline) instead of its content's outlines.
- Mesh envelope points get bezier handles (append-only; none stored is the
  smooth Catmull-Rom mesh, which the first handle edit fills in exactly
  along the grid lines). setMeshPoint takes `handle`; object.mesh.movePoint,
  addLine and deletePoint edit mesh envelopes too. The Mesh tool and Direct
  Selection drag points and the clicked point's handles (shared MeshEdit);
  the Mesh tool adds rows and columns inside mesh envelopes. Reset with
  Mesh keeps the shape along the grid with handles; Release returns the
  exact mesh.
- Control bar: Edit Envelope / Edit Contents, warp style, orientation,
  bend and distortions or mesh rows and columns, Reset, Envelope Options.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The M8 row is done with what the fidelity pass delivered and what is left; the
Symbols/blends/envelopes/perspective parity row moves from 75% to 88%; feature
parity ~75%; Shipped so far and the README status follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bflatastic
bflatastic merged commit 2e2bb33 into main Oct 6, 2026
@bflatastic
bflatastic deleted the m8-envelope-editing branch October 6, 2026 05:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant