anchor.diff:  (defmethod note-input-focus-changed ((pane viewport-pane) state)
     (note-input-focus-changed (sheet-child pane) state))
   
  -;; This method ensures that when the child changes size, the viewport
  -;; will move its focus so that it will not display a region outside of
  -;; `child' (if at all possible, this ideal can be circumvented by
  -;; creating a child sheet that is smaller than the viewport). I do not
  -;; believe having a viewport look at "empty" space is ever useful.
  +;;; This method ensures that when the child changes size, the viewport
  +;;; will move its focus so that it will not display a region outside
  +;;; of `child' (if at all possible, this ideal can be circumvented by
  +;;; creating a child sheet that is smaller than the viewport). I do
  +;;; not believe having a viewport look at "empty" space is ever
  +;;; useful.
   (defmethod note-space-requirements-changed ((pane viewport-pane) child)
     (let ((viewport-width (bounding-rectangle-width pane))
           (viewport-height (bounding-rectangle-height pane))
  
positive.code:                                 vertical-scroll))))
        (scroller-pane/update-scroll-bars (sheet-parent pane)))))
  
  ;;;;
  ;;;; SCROLLER PANE
  ;;;;
  
  ;;; How scrolling is done
  
  ;; The scroll-pane has a child window called the 'viewport', which
  ;; itself has the scrolled client pane as child. To scroll the client
  ;; pane is to move it [to possibly negative coordinates].
  ;;
  ;; So the viewport is just a kind of hole, where some part of the
  ;; scrolled window shows through.
  ;;
  
  ;;; How the scroll bars are set up
  
  ;; The scroll-bar's min/max values match the min/max arguments to
  ;; scroll-extent. The thumb-size is then calculated accordingly.
  
  ;; 
  
  (defparameter *scrollbar-thickness* 17)
  
  
negative.code: 
  ;;; TABLE PANE
  
  ;;; TODO: The table and grid panes should respect the :x-spacing,
  ;;; :y-spacing, and :spacing initargs.
  
  (defclass table-pane (composite-pane)
    ((array
  