Commit Graph
47 Commits
Author SHA1 Message Date
aiongg f08899832b Merge #309: Snap: smart guides beat the baseline grid; a box centres between two others
Conflict: crates/tools/src/snap.rs: first_on_axis: a guide or margin in reach competes with the baseline grid through #84's nearer(); otherwise #309's smart-guide passes run and the baseline grid comes last. #84's nearer_of_margin_and_baseline_wins and #309's tests pass.
2026-10-10 09:29:32 +00:00
noah1400andClaude Opus 5.5 8b940b4bcb Snap: smart guides beat the baseline grid; a box centres between two others
On the vertical axis the baseline grid was tried before smart guides.
It snaps while hidden, and with lines every 12 pt and a box's top,
centre and bottom each reaching 4 pt either side, one of them is nearly
always in the zone. It took almost every vertical move and drew nothing,
so object alignment and equal spacing hardly ever showed on y. The
baseline pass now runs after the smart guide passes.

Smart spacing also only matched a gap between two other boxes. A box
dragged between two neighbours now snaps to where both of its gaps are
equal, and both gaps are marked.

Fixes #188

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N5fQBTFb4hhKXsCFYitZ1P
2026-10-10 09:06:48 +00:00
aiongg 7861297237 Threading: load text from a port and click to thread 2026-10-07 00:16:50 -04:00
aiongg 576fde980b Snap: the nearer of a margin and the baseline grid wins; Type tool frames snap
Resizing or drawing at a zoom where the snap zone covers the baseline
grid's spacing (66% and below with a 12 pt grid) always snapped to a
baseline line, so frames could not reach the top or bottom margin. The
baseline grid and the guides (ruler guides, margins, columns) now
compete by distance and a tie goes to the guide.

Frames drawn with the Type tool snapped nothing; they now snap like the
frame tools' (press point and moving edges, with Shift and Alt).
2026-10-07 00:16:33 -04:00
aiongg 2d6213d40d Text editing: clicks, trailing spaces, bold/italic, clipboard, formatting affects text (#23)
- Double-clicking a text frame with the Selection tool edits its text. The
  canvas counts presses itself (egui reports double clicks only on release,
  so the press never saw them): 2 clicks select the word or run of spaces
  under the pointer, 3 the line, 4 the paragraph, 5 the story
  (`text.selectAt`; pointer events carry `clicks`).
- The caret moves past spaces typed at the end of a line: trailing spaces
  follow the line undrawn instead of being dropped.
- Bold and Italic (Shift+Cmd+B / Shift+Cmd+I, B and I in the Character
  panel) toggle the family's own styles per run, keeping the other trait
  (Italic + Bold = Bold Italic). Formatting chosen at a caret applies to
  what is typed next.
- Copy, Cut and Paste reach the system clipboard however they are chosen,
  including from the native macOS menu; without a native menu the copy and
  paste keys work for objects too.
- Formatting Affects Text (J, Tools panel) sends swatches, colours, tints,
  None, Swap and Default to the text of the selected frames; the proxy and
  the Swatches and Color panels show the text's colours.
2026-10-07 00:16:27 -04:00
Brandon ThomasandClaude Opus 5.5 99b6228abd Snap: snap preferences as a command, overlay colours from tokens, tidy-up
- view.snapPreferences {alignEdges, alignCenters, smartDimensions,
  smartSpacing, zone} sets the smart guide options; the Preferences
  dialog goes through it, so the control channel and MCP reach them.
- Smart guide, gap and measurement colours come from theme::Tokens.
- Remove the unused closest-target helper (snap_rect and friends).
- Drop the agent planning docs (docs/superpowers) and the .worktrees
  ignore line; ROADMAP entry for smart guides and snapping.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 09:05:59 -04:00
Cameron Gilroy 78605f2944 Snap: visible bounds and constrained gestures 2026-10-06 09:05:59 -04:00
Cameron Gilroy 09c8dc3f06 Snap: pen and anchor points 2026-10-06 09:05:59 -04:00
Cameron Gilroy e76570c875 Snap: parent rotation is a target 2026-10-06 09:05:59 -04:00
Cameron Gilroy 343b0de552 Snap: rotation lands on the other angle 2026-10-06 09:05:59 -04:00
Cameron Gilroy 50e5355358 Snap: rotation matches another angle 2026-10-06 09:05:59 -04:00
Cameron Gilroy 5a74bf2d6e Snap: equal spacing on moves 2026-10-06 09:05:59 -04:00
Cameron Gilroy 8e7cff341f Snap: dimension guides follow the final edge
Shift plus Alt restores the aspect from the original center after the size snaps. A line keeps the runner delta on both axes. Dimension guides are redrawn on the committed side. Grouped own size decomposes the absolute transform once.
2026-10-06 09:05:59 -04:00
Cameron Gilroy 40f3b6454a Snap: dimensions on resize and create 2026-10-06 09:05:59 -04:00
Cameron Gilroy b0797f2b47 Snap: parent items use the stroked edge 2026-10-06 09:05:59 -04:00
Cameron Gilroy 7032587238 Snap: document grid and baseline passes 2026-10-06 09:05:59 -04:00
Cameron Gilroy 253f1a7a10 Snap: Alt-drag skips preview copies and Shift follows the turned view 2026-10-06 09:05:59 -04:00
Cameron Gilroy a2451243ad Snap: Shift and Command on a move 2026-10-06 09:05:59 -04:00
Cameron Gilroy 55ec575521 Snap: guides beat object alignment 2026-10-06 09:05:59 -04:00
Cameron Gilroy 4de93d1345 Snap: carry SnapView on the tool context 2026-10-06 09:05:59 -04:00
Brandon ThomasandClaude Opus 5.5 f05bbfeea2 Never crash: engine, MCP and tools
Commands return errors instead of expect()/unreachable!() (book, library,
undo/redo, paste, find/replace, Pathfinder, tables, QR, select, swatches,
anchors, articles, transform again, XML import). The sample document builder
propagates errors. Commands that add a key to their parameters no longer
panic when a caller (control channel, MCP, script) passes an array or a
string, and corrupt crash-recovery metadata is ignored. engine, mcp and
tools now deny unwrap/expect/panic/unimplemented/todo/unreachable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 12:43:33 -04:00
Brandon ThomasandClaude Opus 5.5 b13135472a V: Rotate Spread per spread — canvas layout through per-spread transforms
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 00:25:16 -04:00
Brandon ThomasandClaude Opus 5.5 b23f19f0c9 T: drag selected table rows and columns
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 00:14:35 -04:00
Brandon ThomasandClaude Opus 5.5 77fc006b02 T: vertical type — Vertical Type tool, upright CJK, CJK line breaking
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 08:18:14 -04:00
Brandon ThomasandClaude Opus 5.5 036144d327 O: Live Distribute while resizing a selection
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 04:34:34 -04:00
Brandon ThomasandClaude Opus 5.5 0454044d74 V: Power Zoom with the Hand tool
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 04:21:15 -04:00
Brandon ThomasandClaude Opus 5.5 4eed1d3177 Q: Content Collector and Placer
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:30:43 -04:00
Brandon ThomasandClaude Opus 5.5 3f2d53f330 Q: Gap tool
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:09:58 -04:00
Brandon ThomasandClaude Opus 5.5 1824d3c275 Q: gridify while drawing frames
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:05:53 -04:00
Brandon ThomasandClaude Opus 5.5 aa54531472 F: Gradient Feather — tool, effect on screen, soft mask in PDF
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 21:19:57 -04:00
Brandon ThomasandClaude Opus 5.5 faa2897ace T: drag and drop text editing (move, Alt copies)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 21:12:33 -04:00
Brandon ThomasandClaude Opus 5.5 4e874efbb0 D: Smooth and Erase tools (path.smooth, path.erase)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 20:39:23 -04:00
Brandon ThomasandClaude Opus 5.5 eb4fa9c64c T: Type on a Path — tool, options, screen and PDF
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 20:34:20 -04:00
Brandon ThomasandClaude Opus 5.5 e79ec65323 A: per-page sizes — Page tool and layout.pageSize
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 16:54:24 -04:00
Brandon ThomasandClaude Opus 5.5 fed23aa7ee V: scrubby zoom with the Zoom tool
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 16:32:04 -04:00
Brandon ThomasandClaude Opus 5.5 cc33d0ba15 D: Pencil tool — freehand strokes to smooth paths
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 16:30:59 -04:00
Brandon ThomasandClaude Opus 5.5 ea1a0b16c7 D: compound paths, Create Outlines, Scissors tool
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:09:32 -04:00
Brandon ThomasandClaude Opus 5.5 349525bae8 D: Add/Delete Anchor Point and Convert Direction Point tools (path.addAnchor/deleteAnchor/convertAnchor)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:22:27 -04:00
Brandon ThomasandClaude Opus 5.5 66ab252044 F: Gradient Swatch tool, Gradient panel, unnamed gradients (object.gradient)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:15:01 -04:00
Brandon ThomasandClaude Opus 5.5 b3679cbe63 D: parent item overrides — override (Cmd+Shift-click, Override All), remove local overrides, detach
Also records Place PDF in ROADMAP and the parity catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:11:04 -04:00
Brandon ThomasandClaude Opus 5.5 51045daf36 M5: loaded place cursor (place gun): click = actual size, drag = fit, click frame = place into
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:53:04 -04:00
Brandon ThomasandClaude Opus 5.5 a7b9a31fc5 UI: match measured InDesign 2026 chrome (Medium Dark palette, native macOS menu bar, 43 pt app bar, dock layout, rulers, status bar, tools metrics, hairline guides, handles/ports)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:18:34 -04:00
Brandon ThomasandClaude Opus 5.5 c244e32bfe M8: rotate from selection corners, Rotate/Scale/Shear tools, Eyedropper (match attributes)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:06:16 -04:00
Brandon ThomasandClaude Opus 5.5 fe54a974c5 M2.8: snapping and smart guides (page, margins, columns, guides, objects)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:52:49 -04:00
Brandon ThomasandClaude Opus 5.5 362c16e050 M1.7/M2: align & distribute, Pen tool, Direct Selection anchor/handle editing
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:51:17 -04:00
Brandon ThomasandClaude Opus 5.5 91ae2b3cc9 M0: engine, tools, egui UI, desktop app, CLI, sample document, docs
Engine with command registry (~100 commands), tool hosting with one-step
undo per gesture, InDesign-style egui frontend (app bar, Control panel,
Tools panel, rulers, guides, frame edges, ports/threads, Properties/Pages/
Layers dock, panels, dialogs), JSON control channel, headless CLI renderer,
generated sample magazine, README/AGENTS/ROADMAP/ASSETS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:39:15 -04:00
Brandon Thomas c9dcad1f6e continued work 2026-10-01 09:36:32 -04:00