]> git.eshelyaron.com Git - emacs.git/commitdiff
Minor improvements to precision scroll interpolation
authorPo Lu <luangruo@yahoo.com>
Sat, 30 Jul 2022 03:26:46 +0000 (11:26 +0800)
committerPo Lu <luangruo@yahoo.com>
Sat, 30 Jul 2022 03:26:46 +0000 (11:26 +0800)
* lisp/pixel-scroll.el (pixel-scroll-start-momentum): Bump GC
cons threshold temporarily.  This leads to a very noticable
improvement to animation speed.

lisp/pixel-scroll.el

index fc7e680c262f82a14d1f9c999a8830bdc95113c8..aefe3c12dc22d074db04ec8e5dd0594da116d6ba 100644 (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