anchor.diff:  	  (draw-label pane (gadget-label pane) (round w 2) (round h 2)))))))
   
   
  -;;
  -;; SCROLL-BAR gadget
  -;;
  +;;;;
  +;;;; SCROLL-BAR gadget
  +;;;;
   
   (defgeneric drag-callback (pane client gadget-id value))
   (defgeneric scroll-to-top-callback (scroll-bar client gadget-id))
  
positive.code:      (when armed
         (setf armed nil)
         (disarmed-callback sb (gadget-client sb) (gadget-id sb)))))
  
  (defun get-orientation-dependant-informations (scroll-bar-pane)
    (if (eq (gadget-orientation scroll-bar-pane) :vertical)
        (values (- (bounding-rectangle-height (sheet-region scroll-bar-pane))
  		 (* 2 *scrollbar-thickness*))
                #'pointer-event-y)
        (values (- (bounding-rectangle-width (sheet-region scroll-bar-pane))
  		 (* 2 *scrollbar-thickness*))
                #'pointer-event-x)))
  
  (defmethod dispatch-callbacks ((sb scroll-bar-pane) event)
    (multiple-value-bind (sb-length pos-func)
        (get-orientation-dependant-informations sb)
      (with-slots (value min-value max-value) sb
        (let* ((position (funcall pos-func event))
  	     (value-clicked (/ (- position *scrollbar-thickness*) sb-length)))
          (cond
  	 ((< position *scrollbar-thickness*)
  	  (scroll-up-line-callback sb (gadget-client sb) (gadget-id sb)))
  	 ((> position (+ sb-length *scrollbar-thickness*))
  	  (scroll-down-line-callback sb (gadget-client sb) (gadget-id sb)))
  	 ((< value-clicked (/ (- value min-value)
  			 (- max-value min-value)))
  	  (scroll-up-page-callback sb (gadget-client sb) (gadget-id sb)))
  	 ((< (+ (/ (- value min-value)
  			 (- max-value min-value))
  		 (/ sb-length
  			  (gadget-range sb)))
  	      value-clicked)
  	  (scroll-down-page-callback sb (gadget-client sb) (gadget-id sb))))))))
  
  (defmethod handle-event ((sb scroll-bar-pane) (event pointer-button-press-event))
    (with-slots (armed) sb
      (unless armed
        (armed-callback sb (gadget-client sb) (gadget-id sb)))
      (setf armed ':button-press))
    (dispatch-callbacks sb event))
  
  (defmethod handle-event ((sb scroll-bar-pane) (event pointer-motion-event))
    (with-slots (armed dragged) sb
      (when (eq armed ':button-press)
        (multiple-value-bind (sb-length pos-func)
            (get-orientation-dependant-informations sb)
          (drag-callback sb (gadget-client sb) (gadget-id sb)
                         (min (max (+ (gadget-min-value sb)
  				    (* (gadget-range sb)
  				       (/ (- (funcall pos-func event) *scrollbar-thickness*)
  					  sb-length)))
  				 0)
  			    (gadget-max-value sb))))
        (unless dragged
          (setf dragged t)))))
  
  (defmethod handle-event ((sb scroll-bar-pane) (event pointer-button-release-event))
    (declare (ignorable event))
    (with-slots (armed dragged) sb
       (when (eq armed ':button-press)
         (setf armed t)
         (when dragged
           (setf dragged nil)
           (multiple-value-bind (sb-length pos-func)
               (get-orientation-dependant-informations sb)
             (value-changed-callback sb (gadget-client sb) (gadget-id sb)
                                     (/ (funcall pos-func event) sb-length)))
           (disarmed-callback sb (gadget-client sb) (gadget-id sb))))))
  
  
  ;;
  ;; SLIDER gadget
  
negative.code: ;;;  (c) copyright 2001 by
  ;;; Lionel Salabartan (salabart@emi.u-bordeaux.fr)
  ;;;  (c) copyright 2001 by Michael McDonald (mikemac@mikemac.com)
  ;;;  (c) copyright 2001 by Gilbert Baumann <unk6@rz.uni-karlsruhe.de>
  
  ;;; This library is free software; you can redistribute it and/or
  ;;; modify it under the terms of the GNU Library General Public
  