openpencil/crates
Kayshen-X 112d1f08bb feat(canvas): pen bezier handle editing — render, handles, drag
Completes pen bezier-handle editing on top of the Stage-1 data model.

- canvas_viewport_paint: `flatten_path` — Path nodes with anchor
  control handles render as tessellated cubic Beziers (16 steps /
  segment); handle-free paths keep the straight `points` polyline.
- canvas_viewport: the Pen-tool anchor overlay now draws each
  anchor's two control handles (line + dot), with a faint "ghost"
  dot offset from the anchor when a handle is unset — grab it to
  create the handle. `path_handle_positions` resolves real / ghost
  handle positions, shared with the host hit-test.
- op-host-native: `path_anchor_hit` now distinguishes anchor body
  vs handle_in / handle_out (`AnchorDragTarget`); `PathAnchorDragState`
  carries the target, the anchor's fixed position, and the Shift
  state. The move handler drags the anchor or a handle — a handle
  drag sets the anchor's point type on first motion (Shift =
  independent/broken, else mirrored/smooth) so `set_path_anchor_handle`
  mirrors the opposite handle. Release commits history only on
  actual motion.

op-editor-ui 148 / op-host-native 64 / op-host-desktop 21 /
op-pen-loader 21 tests green (+3 flatten-path units).

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-05-17 17:47:08 +08:00
..
op-ai feat: close six TS-parity gaps in the Rust shell 2026-05-17 13:03:11 +08:00
op-app refactor(rust): add op-app composition-root crate 2026-05-16 23:57:03 +08:00
op-cli feat: close six TS-parity gaps in the Rust shell 2026-05-17 13:03:11 +08:00
op-codegen fix: clear clippy -D warnings across the workspace 2026-05-17 01:26:29 +08:00
op-editor-core feat(editor): pen anchor bezier-handle data model + setters 2026-05-17 17:33:44 +08:00
op-editor-ui feat(canvas): pen bezier handle editing — render, handles, drag 2026-05-17 17:47:08 +08:00
op-figma fix(figma): codex review round 2 — pre-validation allocation guards 2026-05-17 16:43:44 +08:00
op-host-desktop feat(editor): add node-effect add/remove commands + MCP tools 2026-05-17 13:48:31 +08:00
op-host-native feat(canvas): pen bezier handle editing — render, handles, drag 2026-05-17 17:47:08 +08:00
op-host-web feat(panels): shadow/blur parameter steppers in the Effects section 2026-05-17 14:38:26 +08:00
op-i18n style: apply cargo fmt across the workspace 2026-05-17 00:26:15 +08:00
op-mcp feat(editor): add node-effect add/remove commands + MCP tools 2026-05-17 13:48:31 +08:00
op-pen-loader feat(editor): pen anchor bezier-handle data model + setters 2026-05-17 17:33:44 +08:00
wasm-libc-shim fix: clear clippy -D warnings across the workspace 2026-05-17 01:26:29 +08:00
CLAUDE.md docs: fix stale i18n + renderer paths flagged by Codex review 2026-05-16 15:45:54 +08:00