Minor improvements to precision scroll interpolation

* lisp/pixel-scroll.el (pixel-scroll-start-momentum): Bump GC
cons threshold temporarily.  This leads to a very noticable
improvement to animation speed.
This commit is contained in:
Po Lu 2022-07-30 11:26:46 +08:00
parent a1975a69b2
commit 40c0124816

View file

@ -759,6 +759,9 @@ It is a vector of the form [ VELOCITY TIME SIGN ]."
(interactive "e")
(when pixel-scroll-precision-use-momentum
(let ((window (mwheel-event-window event))
;; The animations are smoother if the GC threshold is
;; reduced for the duration of the animation.
(gc-cons-threshold (* gc-cons-threshold 3))
(state nil))
(when (framep window)
(setq window (frame-selected-window window)))
@ -767,43 +770,43 @@ It is a vector of the form [ VELOCITY TIME SIGN ]."
(listp (aref state 0)))
(condition-case nil
(while-no-input
(unwind-protect (progn
(aset state 0 (pixel-scroll-calculate-velocity state))
(when (> (abs (aref state 0))
pixel-scroll-precision-momentum-min-velocity)
(let* ((velocity (aref state 0))
(original-velocity velocity)
(time-spent 0))
(if (> velocity 0)
(while (and (> velocity 0)
(<= time-spent
pixel-scroll-precision-momentum-seconds))
(when (> (round velocity) 0)
(with-selected-window window
(pixel-scroll-precision-scroll-up (round velocity))))
(setq velocity (- velocity
(/ original-velocity
(/ pixel-scroll-precision-momentum-seconds
pixel-scroll-precision-momentum-tick))))
(redisplay t)
(sit-for pixel-scroll-precision-momentum-tick)
(setq time-spent (+ time-spent
pixel-scroll-precision-momentum-tick))))
(while (and (< velocity 0)
(<= time-spent
pixel-scroll-precision-momentum-seconds))
(when (> (round (abs velocity)) 0)
(with-selected-window window
(pixel-scroll-precision-scroll-down (round
(abs velocity)))))
(setq velocity (+ velocity
(/ (abs original-velocity)
(/ pixel-scroll-precision-momentum-seconds
pixel-scroll-precision-momentum-tick))))
(redisplay t)
(sit-for pixel-scroll-precision-momentum-tick)
(setq time-spent (+ time-spent
pixel-scroll-precision-momentum-tick))))))
(unwind-protect
(progn
(aset state 0 (pixel-scroll-calculate-velocity state))
(when (> (abs (aref state 0))
pixel-scroll-precision-momentum-min-velocity)
(let* ((velocity (aref state 0))
(original-velocity velocity)
(time-spent 0))
(if (> velocity 0)
(while (and (> velocity 0)
(<= time-spent
pixel-scroll-precision-momentum-seconds))
(when (> (round velocity) 0)
(with-selected-window window
(pixel-scroll-precision-scroll-up (round velocity))))
(setq velocity (- velocity
(/ original-velocity
(/ pixel-scroll-precision-momentum-seconds
pixel-scroll-precision-momentum-tick))))
(sit-for pixel-scroll-precision-momentum-tick)
(setq time-spent (+ time-spent
pixel-scroll-precision-momentum-tick))))
(while (and (< velocity 0)
(<= time-spent
pixel-scroll-precision-momentum-seconds))
(when (> (round (abs velocity)) 0)
(with-selected-window window
(pixel-scroll-precision-scroll-down (round
(abs velocity)))))
(setq velocity (+ velocity
(/ (abs original-velocity)
(/ pixel-scroll-precision-momentum-seconds
pixel-scroll-precision-momentum-tick))))
(redisplay t)
(sit-for pixel-scroll-precision-momentum-tick)
(setq time-spent (+ time-spent
pixel-scroll-precision-momentum-tick))))))
(aset state 0 (make-ring 30))
(aset state 1 nil)))
(beginning-of-buffer