anchor.diff:  		  ret)
   	(values ret origin ray)))))
   
  +(defun memoized-check-intersect (quad node x y viewport projection hash)
  +  (let* ((key (list quad node x y viewport projection))
  +	 (ret (or (when hash 
  +		    (gethash key hash))
  +		  (setf (gethash key hash)
  +			(multiple-value-list 
  +			 (check-intersect quad node x y viewport projection))))))
  +    (values (first ret)
  +	    (second ret)
  +	    (third ret))))
  +  
  +
   
   (defun draw-inactive (quad text)
      (draw-button quad text
  
positive.code: 		   (:button . ,button)
  		   (:state . ,state)
  		   (:clicks . ,clicks)
  		   (:timestamp . ,ts))))
        (map-event (lambda (k v)
  		   (multiple-value-bind (collisions start ray) (check-intersect (car (children k)) k x y *viewport* *projection*)
  		     (when collisions
  		       (let ((e (acons :ray-start start
  				       (acons :ray ray event))))
  
negative.code:        ;;(setf (gethash node *gui-objects*)
         (map nil (lambda (x)
  		  (add-event-handler x node f))
  	    '(:mouse-click :mouse-hover :mouse-move :mouse-exit :mouse-down :mouse-up :mouse-drag-start :mouse-drag :mouse-drag-drop))
         (add-child *node* node)
         node)))
  
  