anchor.diff:    (update-scrollbars (sheet-parent pane)))
   
   (defmethod update-scrollbars ((pane scroller-pane))
  -  )
  -
  -(defmethod scroll-extent ((pane clim-stream-pane) x y)
  -  (setf (sheet-transformation pane) (make-translation-transformation (- x) (- y)))
  -  (set-bounding-rectangle-position (sheet-region pane) x y)
  -  (update-scrollbars (sheet-parent pane))
  -  (clear-area pane)
  -  (replay (stream-output-history pane) pane)
  -  )
  +  (with-slots (viewport vscrollbar hscrollbar) pane
  +    (with-bounding-rectangle* (hminx hminy hmaxx hmaxy)
  +	(stream-output-history (first (sheet-children viewport)))
  +      (with-bounding-rectangle* (rminx rminy rmaxx rmaxy)
  +	  (sheet-region (first (sheet-children viewport)))
  +	(when vscrollbar
  +	  (setf (scrollbar-offset vscrollbar) (/ (- rminy hminy) (- hmaxy hminy)))
  +	  (setf (scrollbar-length vscrollbar) (/ (- rmaxy rminy) (- hmaxy hminy)))
  +	  (window-refresh vscrollbar))
  +	(when hscrollbar
  +	  (setf (scrollbar-offset hscrollbar) (/ (- rminx hminx) (- hmaxx hminx)))
  +	  (setf (scrollbar-length hscrollbar) (/ (- rmaxx rminx) (- hmaxx hminx)))
  +	  (window-refresh hscrollbar))))))
   
   
   ;; LABEL PANE
  
positive.code: 		      pane)
    ()
    )
  
  (defmethod compose-space ((basic basic-pane))
    (ask-space-children basic)
  
negative.code: 
  (defclass viewport-pane (single-child-composite-pane) ())
  
  
  ;; SCROLLBAR-PANE
  
  (defparameter *scrollbar-thickness* 12)
  
  (defclass scrollbar-pane (basic-pane)
    ((orientation :initform :vertical
  		:initarg :orientation
  		:reader scrollbar-orientation)
     ;;; the offset and length are percentages of the scrollbar's length
     (offset :initform 0
  	   :type (real 0 1)
  	   :accessor scrollbar-offset)
     (length :initform 1
  	   :type (real 0 1)
  	   :accessor scrollbar-length)))
  
  (defmethod initialize-instance :after ((sb scrollbar-pane) &rest args)
    (declare (ignore args))
    )
  
  (defmethod compose-space ((sb scrollbar-pane))
    (if (eq (scrollbar-orientation sb) :vertical)
        (make-space-requirement :min-width 1
  			      :width *scrollbar-thickness*
  			      :min-height (min 10 *scrollbar-thickness*)
  			      :height (* 2 *scrollbar-thickness*))
      (make-space-requirement :min-height 1
  			    :height *scrollbar-thickness*
  			    :min-width (min 10 *scrollbar-thickness*)
  			    :width (* 2 *scrollbar-thickness*))))
  
  (defmethod allocate-space ((sb scrollbar-pane) width height)
    (set-width-and-height sb width height))
  
  (defmethod repaint-sheet ((sb scrollbar-pane) region)
    (declare (ignore region))
    (window-refresh sb))
  
  (defmethod window-refresh ((sb scrollbar-pane))
    (with-bounding-rectangle* (minx miny maxx maxy) (sheet-region sb)
      (draw-rectangle* sb minx miny maxx maxy :filled t :ink (medium-background sb))
      (let ((width (- maxx minx))
  	  (height (- maxy miny)))
        (if (eq (scrollbar-orientation sb) :vertical)
  	  (draw-rectangle* sb
  			   minx (+ miny (* height (scrollbar-offset sb)))
  			   maxx (+ miny (* height (scrollbar-offset sb))
  				   (* height (scrollbar-length sb)))
  			   :filled t )
  	(draw-rectangle* sb
  			 (+ minx (* width (scrollbar-offset sb))) miny
  			 (+ minx (* width (scrollbar-offset sb))
  			    (* width (scrollbar-length sb))) maxy
  			    :filled t :ink (medium-foreground sb))))))
  
  (defmethod handle-event ((sb scrollbar-pane) (event window-repaint-event))
    (repaint-sheet sb nil))
  
  ;; SCROLLER-PANE
  
  