Make it work to pixel scroll by deltas larger than the window
* lisp/pixel-scroll.el (pixel-scroll-precision-scroll-down-page): (pixel-scroll-precision-scroll-up-page): New functions. (pixel-scroll-precision-scroll-up) (pixel-scroll-precision-scroll-down): Make it safe to scroll by deltas larger than the current window.
This commit is contained in:
parent
352c737dce
commit
1450fa16ed
1 changed files with 21 additions and 6 deletions
|
@ -401,10 +401,7 @@ Otherwise, redisplay will reset the window's vscroll."
|
|||
(set-window-start nil (pixel-point-at-unseen-line) t)
|
||||
(set-window-vscroll nil vscroll t))
|
||||
|
||||
;; FIXME: This doesn't work when DELTA is larger than the height
|
||||
;; of the current window, and someone should probably fix that
|
||||
;; at some point.
|
||||
(defun pixel-scroll-precision-scroll-down (delta)
|
||||
(defun pixel-scroll-precision-scroll-down-page (delta)
|
||||
"Scroll the current window down by DELTA pixels.
|
||||
Note that this function doesn't work if DELTA is larger than
|
||||
the height of the current window."
|
||||
|
@ -440,8 +437,18 @@ the height of the current window."
|
|||
(set-window-start nil desired-start t))
|
||||
(set-window-vscroll nil desired-vscroll t))))
|
||||
|
||||
(defun pixel-scroll-precision-scroll-up (delta)
|
||||
"Scroll the current window up by DELTA pixels."
|
||||
(defun pixel-scroll-precision-scroll-down (delta)
|
||||
"Scroll the current window down by DELTA pixels."
|
||||
(let ((max-height (window-text-height nil t)))
|
||||
(while (> delta max-height)
|
||||
(pixel-scroll-precision-scroll-down-page max-height)
|
||||
(setq delta (- delta max-height)))
|
||||
(pixel-scroll-precision-scroll-down-page delta)))
|
||||
|
||||
(defun pixel-scroll-precision-scroll-up-page (delta)
|
||||
"Scroll the current window up by DELTA pixels.
|
||||
Note that this function doesn't work if DELTA is larger than
|
||||
the height of the current window."
|
||||
(let* ((edges (window-edges nil t nil t))
|
||||
(max-y (- (nth 3 edges)
|
||||
(nth 1 edges)))
|
||||
|
@ -490,6 +497,14 @@ the height of the current window."
|
|||
(set-window-vscroll nil desired-vscroll t))
|
||||
(set-window-vscroll nil (abs delta) t)))))))
|
||||
|
||||
(defun pixel-scroll-precision-scroll-up (delta)
|
||||
"Scroll the current window up by DELTA pixels."
|
||||
(let ((max-height (window-text-height nil t)))
|
||||
(while (> delta max-height)
|
||||
(pixel-scroll-precision-scroll-up-page max-height)
|
||||
(setq delta (- delta max-height)))
|
||||
(pixel-scroll-precision-scroll-up-page delta)))
|
||||
|
||||
;; FIXME: This doesn't _always_ work when there's an image above the
|
||||
;; current line that is taller than the window, and scrolling can
|
||||
;; sometimes be jumpy in that case.
|
||||
|
|
Loading…
Add table
Reference in a new issue