mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-24 10:09:01 -06:00
Dragging a crop handle past the image edge used to hand the raw rectangle to CropGeometry::constrained, which slid the whole frame toward the centre and moved the anchored corner. drag_crop owns the drag instead: the opposite edges stay put, a locked ratio holds on all eight handles (edges grow about their midline, sliding along a blocked side), the frame stops at the image edge and slides along it, and it keeps a minimum size. Hostile numbers return the start crop. Covered by Given/When/Then scenarios and property tests. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>