chiark / gitweb /
Clip position at the top of the file.
authorSimon Tatham <anakin@pobox.com>
Fri, 29 Dec 2023 18:24:19 +0000 (18:24 +0000)
committerSimon Tatham <anakin@pobox.com>
Fri, 29 Dec 2023 18:24:19 +0000 (18:24 +0000)
src/file.rs

index c98ca9792be127d22c5de088b5783cc294118773..0e58edb90178fecb294b583c8f71e8f18372151a 100644 (file)
@@ -106,7 +106,7 @@ impl FeedFile {
         self.rendered.get(&index).expect("We just made sure this was present")
     }
 
-    fn ensure_enough_rendered(&mut self) {
+    fn ensure_enough_rendered(&mut self) -> usize {
         let (w, h) = self.last_size.expect(
             "ensure_enough_rendered before resize");
 
@@ -118,6 +118,8 @@ impl FeedFile {
             item -= 1;
             lines_rendered += self.ensure_item_rendered(item, w).len();
         }
+
+        h - min(h, lines_rendered + 1)
     }
 
     fn refine_pos(&mut self, w: usize) -> (isize, usize) {
@@ -165,9 +167,12 @@ impl FeedFile {
                 line = self.ensure_item_rendered(item, w).len();
             }
         }
-        // FIXME: clip position at top of file
         self.pos = FilePosition::Fine(item, line);
-        self.ensure_enough_rendered();
+        let overshoot = self.ensure_enough_rendered();
+        // Clip position at top of file
+        if overshoot > 0 {
+            self.move_down(overshoot);
+        }
     }
 
     fn move_down(&mut self, distance: usize) {