[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master d8c383b: Improve precision scroll interpolation
From: |
Po Lu |
Subject: |
master d8c383b: Improve precision scroll interpolation |
Date: |
Wed, 8 Dec 2021 05:30:48 -0500 (EST) |
branch: master
commit d8c383b25edce88a0812edafc349e360d8d03dc9
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Improve precision scroll interpolation
* lisp/pixel-scroll.el
(pixel-scroll-precision-interpolation-total-time)
(pixel-scroll-precision-interpolation-factor): Add better
default values.
(pixel-scroll-precision-interpolate): Save deltas and run loop
inside `while-no-input' instead.
---
lisp/pixel-scroll.el | 45 ++++++++++++++++++++++++++++++---------------
1 file changed, 30 insertions(+), 15 deletions(-)
diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el
index af21f36..b322bf9 100644
--- a/lisp/pixel-scroll.el
+++ b/lisp/pixel-scroll.el
@@ -141,13 +141,13 @@ Nil means to not interpolate such scrolls."
number)
:version "29.1")
-(defcustom pixel-scroll-precision-interpolation-total-time 0.01
+(defcustom pixel-scroll-precision-interpolation-total-time 0.1
"The total time in seconds to spend interpolating a large scroll."
:group 'mouse
:type 'float
:version "29.1")
-(defcustom pixel-scroll-precision-interpolation-factor 2.0
+(defcustom pixel-scroll-precision-interpolation-factor 4.0
"A factor to apply to the distance of an interpolated scroll."
:group 'mouse
:type 'float
@@ -544,20 +544,35 @@ animation."
(let ((percentage 0)
(total-time pixel-scroll-precision-interpolation-total-time)
(factor pixel-scroll-precision-interpolation-factor)
+ (last-time (float-time))
(time-elapsed 0.0)
- (between-scroll 0.001))
- (while (< percentage 1)
- (sit-for between-scroll)
- (setq time-elapsed (+ time-elapsed between-scroll)
- percentage (/ time-elapsed total-time))
- (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)))))
- (redisplay t))))
+ (between-scroll 0.001)
+ (rem (window-parameter nil 'interpolated-scroll-remainder))
+ (time (window-parameter nil 'interpolated-scroll-remainder-time)))
+ (when (and rem time
+ (< (- (float-time) time) 1.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))
+ (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)))
+ (when (< percentage 1)
+ (set-window-parameter nil 'interpolated-scroll-remainder
+ (* delta (- 1 percentage)))
+ (set-window-parameter nil 'interpolated-scroll-remainder-time
+ (float-time)))))))
(defun pixel-scroll-precision-scroll-up (delta)
"Scroll the current window up by DELTA pixels."
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master d8c383b: Improve precision scroll interpolation,
Po Lu <=