authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-09-24 01:09:29-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-09-25 20:26:20-07:00
logac71f3406bb294c83e6ad73ba9661192c9c04b99
treeec3c4e24b0b11dae1875aa23d98cb1fc1a049389
parent1a88f66f3e89db9e9b9c016c61f9fdd549b74228
signature Signed by SSH key SHA256:52mNGHRsVFBDED9IAX5pe+LRWUefqTbxEReunq21QvU

fix: stop scrolling at the topmost and leftmost page content

Scrolling allowed 36 pt of blank page above and left of the furthest object, so a page like one with an Ivy background image placed at (-27, -3.6) could be scrolled past its top. OneNote 2010 stops exactly at the page origin or at the object furthest above or left of it, and opens the page there. The far edges keep their 36 pt margin. Assisted-by: claude-opus-5

1 files changed, 3 insertions(+), 2 deletions(-)

crates/snowbound/src/scroll.rs+3-2
......@@ -15,8 +15,9 @@ impl Scroll {
1515 max[axis] = max[axis].max(rect[axis + 2]);
1616 }
1717 }
18 // OneNote stops at the page origin or the object furthest above or left of it.
1819 for axis in 0..2 {
19 min[axis] = (min[axis] - 36.0) * viewport.scale;
20 min[axis] *= viewport.scale;
2021 max[axis] =
2122 ((max[axis] + 36.0) * viewport.scale - viewport.size[axis] as f32).max(min[axis]);
2223 }
......@@ -100,7 +101,7 @@ mod tests {
100101 };
101102 let scroll = Scroll::new(viewport, [[-80.0, -20.0, 1000.0, 1200.0]].into_iter());
102103 scroll.clamp(&mut viewport);
103 assert_eq!(viewport.origin, [232.0, 112.0]);
104 assert_eq!(viewport.origin, [160.0, 40.0]);
104105 viewport.origin = [-9999.0; 2];
105106 scroll.clamp(&mut viewport);
106107 assert_eq!(viewport.origin, [-1272.0, -1872.0]);