From 8cf18d7481ecf796baa0695b0ec36e43905ea4ef Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Sun, 25 Jan 2026 16:47:24 +0100 Subject: [PATCH] fix: use scroll_dest instead of the current view position for scroll step calcuation If we use the current view position to calculate the destination for a scroll event, then we may effectively lose the difference between view.pos and scroll_dest if we are still animating a scroll when the new event arrives. This can happen when scroll events are received really quickly which can happen with some devices like touchpads or fast scroll wheels. Now we use the scroll_dest which means that we extend the destination for animated scrolling instead of overwriting it. --- src/tui/editor.zig | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/tui/editor.zig b/src/tui/editor.zig index 068dfc8..78eaf9e 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -2780,27 +2780,28 @@ pub const Editor = struct { } fn scroll_up(self: *Self) void { - var dest: View = self.view; - dest.row = if (dest.row > scroll_step_small) dest.row - scroll_step_small else 0; - self.update_scroll_dest_abs(dest.row); + var dest_row = self.scroll_dest; + dest_row = if (dest_row > scroll_step_small) dest_row - scroll_step_small else 0; + self.update_scroll_dest_abs(dest_row); } fn scroll_down(self: *Self) void { - var dest: View = self.view; - dest.row += scroll_step_small; - self.update_scroll_dest_abs(dest.row); + var dest_row = self.scroll_dest; + dest_row += scroll_step_small; + self.update_scroll_dest_abs(dest_row); } fn scroll_pageup(self: *Self) void { - var dest: View = self.view; - dest.row = if (dest.row > dest.rows) dest.row - dest.rows else 0; - self.update_scroll_dest_abs(dest.row); + var dest_row = self.scroll_dest; + const view_rows = self.view.rows; + dest_row = if (dest_row > view_rows) dest_row - view_rows else 0; + self.update_scroll_dest_abs(dest_row); } fn scroll_pagedown(self: *Self) void { - var dest: View = self.view; - dest.row += dest.rows; - self.update_scroll_dest_abs(dest.row); + var dest_row: usize = self.scroll_dest; + dest_row += self.view.rows; + self.update_scroll_dest_abs(dest_row); } pub fn scroll_up_pageup(self: *Self, ctx: Context) Result {