anchor.diff:    ;; gadget is ever adopted, and an erase-output-record called on a newer
     ;; gadget-output-record will face a sheet-not-child error when trying
     ;; to disown the never adopted gadget.
  +  (setf stream (stream-designator-symbol stream '*standard-output*))
     (let ((gadget-output-record (gensym))
   	(x (gensym))
   	(y (gensym)))
  
positive.code:     (:vertical   +identity-transformation+)
      (:horizontal (make-transformation 0 1 1 0 0 0))))
  
  (defun translate-range-value (a mina maxa mino maxo)
    "When \arg{a} is some value in the range from \arg{mina} to \arg{maxa},
     proportionally translate the value into the range \arg{mino} to \arg{maxo}."
    (+ mino (* (/ (- a mina)
                  (- maxa mina))          ;### avoid divide by zero here.
               (- maxo mino))))
  
  ;;;; SETF :after methods
  
  
negative.code:   (multiple-value-bind (y1 y2 y3) (scroll-bar/thumb-bed* sb)
      (declare (ignore y3))
      (multiple-value-bind (minv maxv) (gadget-range* sb)
        (translate-range-value y y1 y2 minv maxv minv))))
  
  (defun scroll-bar/map-value-to-coordinate (sb v)
    (multiple-value-bind (y1 y2 y3) (scroll-bar/thumb-bed* sb)
      (declare (ignore y3))
      (multiple-value-bind (minv maxv) (gadget-range* sb)
        (round (translate-range-value v minv maxv y1 y2 y1)))))
  
  (defmethod scroll-bar-thumb-region ((sb scroll-bar-pane))
    (with-bounding-rectangle* (x1 y1 x2 y2) (scroll-bar-thumb-bed-region sb)
  