changeset 15215:681866822119

(scroll-bar-drag-position): New function. (scroll-bar-maybe-set-window-start): New function.
author Richard M. Stallman <rms@gnu.org>
date Sat, 11 May 1996 18:30:16 +0000
parents 308abb9a57f4
children f639c5d732a3
files lisp/scroll-bar.el
diffstat 1 files changed, 32 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/scroll-bar.el	Sat May 11 18:05:52 1996 +0000
+++ b/lisp/scroll-bar.el	Sat May 11 18:30:16 1996 +0000
@@ -114,6 +114,38 @@
 	(beginning-of-line)
 	(set-window-start window (point))))))
 
+(defun scroll-bar-drag-position (portion-whole)
+  "Calculate new window start for drag event."
+  (save-excursion
+    (goto-char (+ (point-min)
+		  (scroll-bar-scale portion-whole
+				    (- (point-max) (point-min)))))
+    (beginning-of-line)
+    (point)))
+
+(defun scroll-bar-maybe-set-window-start (event)
+  "Set the window start according to where the scroll bar is dragged.
+Only change window start if the new start is substantially different.
+EVENT should be a scroll bar click or drag event."
+  (interactive "e")
+  (let* ((end-position (event-end event))
+	 (window (nth 0 end-position))
+	 (portion-whole (nth 2 end-position))
+	 (next-portion-whole (cons (1+ (car portion-whole))
+				   (cdr portion-whole)))
+	 portion-start
+	 next-portion-start
+	 (current-start (window-start window)))
+    (save-excursion
+      (set-buffer (window-buffer window))
+      (setq portion-start (scroll-bar-drag-position portion-whole))
+      (setq next-portion-start (max
+				(scroll-bar-drag-position next-portion-whole)
+				(1+ portion-start)))
+      (if (or (> current-start next-portion-start)
+	      (< current-start portion-start))
+	  (set-window-start window portion-start)))))
+
 ;; Scroll the window to the proper position for EVENT.
 (defun scroll-bar-drag-1 (event)
   (let* ((start-position (event-start event))