anchor.diff:  ; mixins (as opposed to a hodge-podge of sensible mixins :]) - BTS
   ;
   ; This especially applies to colour and event management :\
  +;
  +; TODO: move the hardcoded color-settings into proper defaults
   ;
   ;;;
   
  
positive.code:                (bed-region      (gadget-bed-region pane))
                 (miny            (bounding-rectangle-min-y bed-region))
                 (maxy            (bounding-rectangle-max-y bed-region))
                 (thumb-size      (/ +pixie-slider-pane-thumb-size+ (- maxy miny)))
                 (value (min (gadget-max-value pane)
                             (max (gadget-min-value pane)
                                  (translate-range-value y-new-thumb-top
                                                (bounding-rectangle-min-y (gadget-bed-region pane))
                                                (bounding-rectangle-max-y (gadget-bed-region pane))
                                                (gadget-min-value pane)
                                                (+ (gadget-max-value pane) thumb-size))))))
  	  (setf (gadget-value pane :invoke-callback nil) value)
  	  (drag-callback pane (gadget-client pane) (gadget-id pane) value)
  	  (dispatch-repaint pane (sheet-region pane)))))))
  
negative.code: (defmethod compose-space ((gadget pixie-menu-button-pane) &key width height)
    (declare (ignore width height))
    (space-requirement+* (space-requirement+* (compose-label-space gadget :wider 15 :higher 10)
                                              :min-width  (* 2 (pane-x-spacing gadget))
                                              :width      (* 2 (pane-x-spacing gadget))
                                              :max-width  +fill+ 
                                              :min-height (* 2 (pane-y-spacing gadget))
                                              :height     (* 2 (pane-y-spacing gadget))
                                              :max-height (* 2 (pane-y-spacing gadget)))
                         :min-width  (+ 20 (* 2 *3d-border-thickness*))
                         :width      (+ 20 (* 2 *3d-border-thickness*))
                         :max-width  +fill+
                         :min-height (* 2 *3d-border-thickness*)
                         :height     (* 2 *3d-border-thickness*)
                         :max-height (* 2 *3d-border-thickness*)))
  
  (defclass pixie-menu-button-leaf-pane (pixie-menu-button-pane menu-button-leaf-pane) ())
  
  (defmethod handle-repaint ((pane pixie-menu-button-leaf-pane) region)
    (declare (ignore region))
    (with-slots (armed) pane
      ; XXX only do this when the gadget is realized.
      (when (sheet-mirror pane)
        (with-special-choices (pane)
          (with-slots (label) pane
            (with-bounding-rectangle* (x1 y1 x2 y2) (sheet-region pane)
              (let ((w (- x2 x1))
                    (h (- y2 y1)))
                (draw-rectangle* pane -1 -1 x2 y2
                                 :ink (if armed +gray93+ +gray83+)
                                 :filled t)
                (when armed
                  (draw-edges-lines* pane +white+ 0 0 +black+ (1- w) (1- h)))
                (draw-label* pane x1 y1 (- x2 20) y2 :ink +black+))))))))
  
  (defclass pixie-menu-button-submenu-pane (pixie-menu-button-pane menu-button-submenu-pane) ())
  
  (defmethod compose-space ((gadget pixie-menu-button-submenu-pane) &key width height)
    (declare (ignore width height))
    (space-requirement+* (space-requirement+* (compose-label-space gadget :wider 15 :higher 10)
                                              :min-width  (* 2 (pane-x-spacing gadget))
                                              :width      (* 2 (pane-x-spacing gadget))
                                              :max-width  +fill+ 
                                              :min-height (* 2 (pane-y-spacing gadget))
                                              :height     (* 2 (pane-y-spacing gadget))
                                              :max-height (* 2 (pane-y-spacing gadget)))
                         :min-width  (+ 20 (* 2 *3d-border-thickness*))
                         :width      (+ 20 (* 2 *3d-border-thickness*))
                         :max-width  +fill+
                         :min-height (* 2 *3d-border-thickness*)
                         :height     (* 2 *3d-border-thickness*)
                         :max-height (* 2 *3d-border-thickness*)))
  
  (defmethod handle-repaint ((pane pixie-menu-button-submenu-pane) region)
    (declare (ignore region))
    (with-slots (submenu-frame client) pane
      (when (sheet-mirror pane) ;XXX only do this when the gadget is realized.
        (with-special-choices (pane)
          (with-slots (label) pane
            (with-bounding-rectangle* (x1 y1 x2 y2) (sheet-region pane)
              (let ((w (- x2 x1))
                    (h (- y2 y1)))
                (draw-rectangle* pane -1 -1 x2 y2
                                 :ink (if submenu-frame +gray93+ +gray83+)
                                 :filled t)
                (when submenu-frame
                  (draw-edges-lines* pane +white+ 0 0 +black+ (1- w) (1- h)))
  
                (draw-label* pane x1 y1 (- x2 20) y2 :ink +black+)
    
                (when (typep client 'menu-button-pane)
                  (let* ((x1 (- x2 20))
                         (ym (/ (+ y1 y2) 2))
                         (y1 (- ym 10))
                         (y2 (+ ym 10)))
                    (flet ((oddify (v) (let ((v (floor v))) (if (oddp v) v (+ v 1)))))
                      (let* ((width  (oddify (- x2 x1)))
                             (height (oddify (- y2 y1)))
                             (arrow (list (make-point (floor (- x2 (* width 5/13)))
                                                      (floor (/ (+ y1 y2) 2)))
                                          (make-point (floor (+ x1 (* width 6/13)))
                                                      (floor (+ y1 (* height 4/13))))
                                          (make-point (floor (+ x1 (* width 5/13)))
                                                      (floor (+ y1 (* height 4/13))))
                                          (make-point (floor (+ x1 (* width 5/13)))
                                                      (floor (- y2 (* height 4/13))))
                                          (make-point (floor (+ x1 (* width 6/13)))
                                                      (floor (- y2 (* height 4/13)))))))
                        (draw-polygon pane arrow :filled t :ink +black+))))))))))))
  
  ; Image pane
  
  