anchor.diff:  		 :initarg :show-value-p
   		 :accessor gadget-show-value-p)))
   
  +;; This values should be changeable by user. That's
  +;; why they are parameters, and not constants.
  +(defparameter slider-button-width 30)
  +(defparameter slider-button-height 10)
  +
   (defmethod drag-callback ((pane slider-pane) client gadget-id value)
     (declare (ignore client gadget-id))
     (when (slider-drag-callback pane)
  
positive.code: (defmethod handle-event ((pane slider-pane) (event pointer-enter-event))
    (with-slots (armed) pane
      (unless armed
        (setf armed t
  	    (gadget-current-color pane) (gadget-highlighted-color pane))
        (armed-callback pane (gadget-client pane) (gadget-id pane)))))
  
  (defmethod handle-event ((pane slider-pane) (event pointer-exit-event))
    (with-slots (armed) pane
      (when armed
        (setf armed nil
  	    (gadget-current-color pane) (gadget-normal-color pane))
        (when (gadget-show-value-p pane)
  	(setf (gadget-show-value-p pane) nil)))
      (disarmed-callback pane (gadget-client pane) (gadget-id pane))))
  
  
  (defmethod handle-event ((pane slider-pane) (event pointer-button-press-event))
    (with-slots (armed) pane
       (when armed
         (setf armed ':button-press)
         (when (gadget-show-value-p pane)
  	 (setf (gadget-show-value-p pane) nil)))))
         
  
  (defmethod handle-event ((pane slider-pane) (event pointer-motion-event))
    (with-slots (armed) pane
  
negative.code: (defmethod convert-position-to-value ((pane slider-pane) y)
    (multiple-value-bind (x1 y1 x2 y2) (bounding-rectangle* (sheet-region pane))
      (declare (ignore x1 x2))
      (let* ((slider-button-half-height (ash slider-button-height -1))
  	   (good-y1 (+ y1 slider-button-half-height))
  	   (good-y2 (- y2 slider-button-half-height))
  	   (good-position (max good-y1 (min y good-y2))))
        (+ (gadget-min-value pane) (/ (* (gadget-range pane) (- good-position good-y1))
  				    (- good-y2 good-y1))))))
  
  (defmethod repaint-sheet ((pane slider-pane) region)
    (declare (ignore region))
    (with-double-buffering (pane)
      (let ((position (convert-value-to-position pane))
  	  (slider-button-half-width (ash slider-button-width -1))
  	  (slider-button-half-height (ash slider-button-height -1)))
        (multiple-value-bind (x1 y1 x2 y2) (bounding-rectangle* (sheet-region pane))
  	(let ((middle-x (round (- x2 x1) 2)))
  	  (display-gadget-background pane (gadget-current-color pane) 0 0 (- x2 x1) (- y2 y1))
  	  (draw-line* pane middle-x (+ y1 slider-button-half-height)
  		      middle-x (- y2 slider-button-half-height)
  		      :ink +black+)
  	  (draw-rectangle* pane
  			   (- middle-x slider-button-half-width) (- position slider-button-half-height)
  			   (+ middle-x slider-button-half-width) (+ position slider-button-half-height)
  			   :ink +gray85+ :filled t)
  	  (draw-edges-lines* pane
  			     (- middle-x slider-button-half-width) (- position slider-button-half-height)
  			     (+ middle-x slider-button-half-width) (+ position slider-button-half-height))
  	  (when (gadget-show-value-p pane)
  	    (draw-text* pane (princ-to-string (gadget-value pane))
  			(- middle-x slider-button-half-width)
  			(- position slider-button-half-height))))))))
  
  (defmethod convert-value-to-position ((pane slider-pane))
    (multiple-value-bind (x1 y1 x2 y2) (bounding-rectangle* (sheet-region pane))
      (declare (ignore x1 x2))
      (let* ((slider-button-half-height (ash slider-button-height -1))
  	   (good-y1 (+ y1 slider-button-half-height))
  	   (good-y2 (- y2 slider-button-half-height)))
        (+ good-y1 (/ (* (- (gadget-value pane) (gadget-min-value pane))
  		       (- good-y2 good-y1))
  		    (gadget-range pane))))))
  
  
  ;;
  