mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-11-10 04:51:37 +00:00
The tools that act wherever on the page each decided for themselves whether a press was theirs: Sign area, zoom and snapshot, crop, redact and the stamps asked the router, and Measure, Fill & Sign, the camera and the Link tool's rectangle acted on any press. Stamp placement lived inline in the page view. `tool_input` is now the one gate. Measure, the Stamp tool and custom stamps, Fill & Sign, Sign area, zoom and snapshot, the camera and crop are each told whether the press is the tool's (it began on their page and no hit won it), and act only then; their cursors and gestures run as before. Redact's boxes and the Link tool's rectangle are told the same where they are called. Stamp placement moves to `stamps_ui::place` and `place_custom`, beside custom stamps. Measure is told its clicks (`measure_ui::Clicks`), Sign area takes a `PageToolContext`. The camera's corners are hits (`camera_ui::hit`, `Owner::CameraCorner` on the handle layer), so a corner's drag is an owned press like any other: it starts on the corner's own press, ends on `drag_stopped() || !primary_down`, and `cancel_pointer_gestures` drops it. Until now only the order of two key handlers kept Escape mid-drag from leaving a corner following the pointer: Escape leaves the camera tool before the pages see it. The kittest for Escape mid-drag can't fail with that order; a unit test of the cancel comes later in this series. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>