Function: pixel-scroll-precision-interpolate
pixel-scroll-precision-interpolate is a byte-compiled function defined
in pixel-scroll.el.gz.
Signature
(pixel-scroll-precision-interpolate DELTA &optional OLD-WINDOW FACTOR)
Documentation
Interpolate a scroll of DELTA pixels.
OLD-WINDOW is the window which will be selected when redisplay
takes place, or nil for the current window. This results in the
window being scrolled by DELTA pixels with an animation. FACTOR
is a scale by which DELTA will be modified. If nil, it defaults
to pixel-scroll-precision-interpolation-factor.
Source Code
;; Defined in /usr/src/emacs/lisp/pixel-scroll.el.gz
(defun pixel-scroll-precision-interpolate (delta &optional old-window factor)
"Interpolate a scroll of DELTA pixels.
OLD-WINDOW is the window which will be selected when redisplay
takes place, or nil for the current window. This results in the
window being scrolled by DELTA pixels with an animation. FACTOR
is a scale by which DELTA will be modified. If nil, it defaults
to `pixel-scroll-precision-interpolation-factor'."
(let ((percentage 0)
(total-time pixel-scroll-precision-interpolation-total-time)
(factor (or factor pixel-scroll-precision-interpolation-factor))
(last-time (float-time))
(time-elapsed 0)
(between-scroll pixel-scroll-precision-interpolation-between-scroll)
(rem (window-parameter nil 'interpolated-scroll-remainder))
(time (window-parameter nil 'interpolated-scroll-remainder-time))
(last-delta 0))
(unless (or (not rem) (eq (< delta 0) (< rem 0)))
;; The direction changed. Clear the remainder.
(setq rem nil))
(when (and rem time
(< (- (float-time) time) 1.0)
(eq (< delta 0) (< rem 0)))
(setq delta (+ delta rem)))
(if (or (null rem)
(eq (< delta 0) (< rem 0)))
(while-no-input
(unwind-protect
(while (< percentage 1)
(with-selected-window (or old-window
(selected-window))
(redisplay t))
(sleep-for between-scroll)
(let ((time (float-time)))
(setq time-elapsed (+ time-elapsed
(- time last-time))
percentage (/ time-elapsed total-time))
(let* ((throw-on-input nil)
(absolute-delta (* (min 1 percentage) delta factor))
(relative-delta (abs
(round (- absolute-delta last-delta)))))
(setq last-delta absolute-delta)
(if (< delta 0)
(pixel-scroll-precision-scroll-down relative-delta)
(pixel-scroll-precision-scroll-up relative-delta)))
(setq last-time 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))))