From: Po Lu Date: Sun, 12 Dec 2021 02:54:50 +0000 (+0800) Subject: Clear precision scroll interpolation when direction changes X-Git-Tag: emacs-29.0.90~3600^2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ff9360f4da351d25f1f9fb1ed9a78ce9db321ac4;p=emacs.git Clear precision scroll interpolation when direction changes * lisp/pixel-scroll.el (pixel-scroll-precision-interpolate): Clear scroll interpolation when direction changes. --- diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el index 336b555e77c..0e22ef2a6a7 100644 --- a/lisp/pixel-scroll.el +++ b/lisp/pixel-scroll.el @@ -542,35 +542,43 @@ animation." (< (- (float-time) time) 1.0) (eq (< delta 0) (< rem 0))) (setq delta (+ delta rem))) - (while-no-input - (unwind-protect - (while (< percentage 1) - (redisplay t) - (sleep-for between-scroll) - (setq time-elapsed (+ time-elapsed - (- (float-time) last-time)) - percentage (/ time-elapsed total-time)) - (let ((throw-on-input nil)) - (if (< delta 0) - (pixel-scroll-precision-scroll-down - (ceiling (abs (* (* delta factor) - (/ between-scroll total-time))))) - (pixel-scroll-precision-scroll-up - (ceiling (* (* delta factor) - (/ between-scroll total-time)))))) - (setq last-time (float-time))) - (if (< percentage 1) - (progn - (set-window-parameter nil 'interpolated-scroll-remainder - (* delta (- 1 percentage))) - (set-window-parameter nil 'interpolated-scroll-remainder-time - (float-time))) - (set-window-parameter nil - 'interpolated-scroll-remainder - nil) - (set-window-parameter nil - 'interpolated-scroll-remainder-time - nil)))))) + (if (or (null rem) + (eq (< delta 0) (< rem 0))) + (while-no-input + (unwind-protect + (while (< percentage 1) + (redisplay t) + (sleep-for between-scroll) + (setq time-elapsed (+ time-elapsed + (- (float-time) last-time)) + percentage (/ time-elapsed total-time)) + (let ((throw-on-input nil)) + (if (< delta 0) + (pixel-scroll-precision-scroll-down + (ceiling (abs (* (* delta factor) + (/ between-scroll total-time))))) + (pixel-scroll-precision-scroll-up + (ceiling (* (* delta factor) + (/ between-scroll total-time)))))) + (setq last-time (float-time))) + (if (< percentage 1) + (progn + (set-window-parameter nil 'interpolated-scroll-remainder + (* delta (- 1 percentage))) + (set-window-parameter nil 'interpolated-scroll-remainder-time + (float-time))) + (set-window-parameter nil + 'interpolated-scroll-remainder + nil) + (set-window-parameter nil + 'interpolated-scroll-remainder-time + nil)))) + (set-window-parameter nil + 'interpolated-scroll-remainder + nil) + (set-window-parameter nil + 'interpolated-scroll-remainder-time + nil)))) (defun pixel-scroll-precision-scroll-up (delta) "Scroll the current window up by DELTA pixels."