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 convert-position-to-value ((pane slider-pane) y)
    (multiple-value-bind (x1 y1 x2 y2) (bounding-rectangle* (sheet-region pane))
      (declare (ignore x1 x2))
      (round (+ (gadget-min-value pane) (/ (* (gadget-range pane) (- y2 y)) (- y2 y1))))))
  
  (defmethod repaint-sheet ((pane slider-pane) region)
    (declare (ignore region))
    (let ((region (sheet-region pane))
  	(position (convert-value-to-position pane)))
      (multiple-value-bind (x1 y1 x2 y2) (bounding-rectangle* region)
        (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 middle-x y2 :ink +black+)
  	(draw-rectangle* pane (- middle-x 15) (- position 5)
  		       (+ middle-x 15) (+ position 5)
  		       :ink +grey75+ :filled t)
  	(draw-edges-lines* pane (- middle-x 15) (- position 5) (+ middle-x 15) (+ position 5))
  	(when (gadget-show-value-p pane)
  	  (draw-text* pane (princ-to-string (gadget-value pane))
  		      (+ middle-x 20) position))))))
  
  (defmethod convert-value-to-position ((pane slider-pane))
    (multiple-value-bind (x1 y1 x2 y2) (bounding-rectangle* (sheet-region pane))
      (declare (ignore x1 x2))
      (- y2 (/ (* (- (gadget-value pane) (gadget-min-value pane)) (- y2 y1)) (gadget-range pane)))))
  
  
  ;;
  
negative.code:   (with-slots (armed) pane
      (when armed
        (setf armed t
  	    (gadget-value pane :invoke-callback t) (convert-position-to-value pane (pointer-event-y event)))
        (dispatch-repaint pane (sheet-region pane)))))
  
  