From a0b1adbda599f5d83f71d4c0f70d75a43520df1f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 15 Feb 2026 18:57:40 +0530 Subject: [PATCH] Cleanup downward fractional line scrolling --- kitty/screen.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/kitty/screen.c b/kitty/screen.c index c062fe51d..8b163ba66 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -5086,11 +5086,17 @@ screen_fractional_scroll(Screen *self, double amt) { double pixels = fractional_part * self->cell_size.height; if (amt > 0) { // downwards if (fractional_part != 0) pixels = MAX(1, pixels); - pixels = pixels > self->pixel_scroll_offset_y ? pixels - self->pixel_scroll_offset_y : 0; - self->pixel_scroll_offset_y = 0; - self->scrolled_by = self->scrolled_by > (unsigned)lines ? self->scrolled_by - lines : 0; - if (pixels > 0 && self->scrolled_by > 0) { - self->scrolled_by--; self->pixel_scroll_offset_y = self->cell_size.height - pixels; + if (lines > (int)self->scrolled_by) { + self->scrolled_by = 0; self->pixel_scroll_offset_y = 0; + } else { + self->scrolled_by -= lines; + if (pixels <= self->pixel_scroll_offset_y) self->pixel_scroll_offset_y -= pixels; + else { + self->pixel_scroll_offset_y = 0; + if (self->scrolled_by) { + self->scrolled_by--; self->pixel_scroll_offset_y = self->cell_size.height - pixels; + } + } } } else { if (fractional_part != 0) pixels = MIN(-1, pixels);