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.
This commit is contained in:
CJ van den Berg 2026-01-25 16:47:24 +01:00
parent 8a1c5f5fba
commit 8cf18d7481
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -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 {