anchor.diff:                       :%y .4
                        :alignment :pango_align_center))))
   
  +
  +
  +
  +
  +	;; (if (eql mouse-state :dragging)
  +	    
  +	;;     (multiple-value-bind (d-pos d) (clinch:get-screen-direction (sb-cga:inverse-matrix lens))
  +	;;       (let ((trans (calculate-movement d-pos d a-pos a button-start-position button-end-position)))
  +		
  +	;; 	(map nil (lambda (node start-pos)
  +	;; 		   (setf (clinch:transform node)
  +	;; 			 (sb-cga:matrix* (sb-cga:translate (clinch:make-vector (elt trans 0) (elt trans 1) (elt trans 2)))
  +	;; 					 start-pos)))
  +	;; 	     (elt mouse-drag-values 5) mouse-drag-nodes-start-pos)))
  
positive.code: 		  ret)
  	ret))))
  
  (defun make-button (text width height &key line-width line fill background foreground)
    (! (let* ((node (make-instance 'node))
  	 (quad (make-quad-and-texture width height)))
      (draw-button quad text
  		 :line-width 10
  		 :foreground '(.1 .1 .1 1)
  		 :fill '(0 0 0 .2)
  		 :line '(0 0 .8 1))
      (add-child node quad)
      ;;(setf (gethash node *gui-objects*)
      (setf (gethash node *on-click-objects*)
  	  (lambda (n c)
  	    (format t "clicked!~%" n)))
      (setf (gethash node *on-hover-objects*)
  	  (lambda (n c)
  	    (format t "hovered!~%" n)))
      (setf (gethash node *on-exit-objects*)
  	  (lambda (n)
  	    (format t "exited!~%" n)))
      (add-child *node* node)
      node)))
  
  (defun remove-button (node)
    (remhash node *on-hover-objects*)
    (remhash node *on-click-objects*)
    (setf (enabled node) nil))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  
negative.code: 
    ;;(format t "win: ~A mouse: ~A x: ~A y: ~A button: ~A state: ~A clicks: ~A ts: ~A~%" win mouse x y button state clicks ts)
  
    (let ((event (list win mouse x y button state clicks ts)))
  
      (map-event (lambda (k v)
  		 (let ((collisions (check-intersect (car (children k)) k x y *viewport* *projection*)))
  		   (when collisions
  		     (setf *last-mouse-down-target* k)
  		     (funcall v k collisions (cons :mouse-down event)))))
  	       *on-mouse-down-objects*)))
  
  (clinch:defevent clinch:*on-mouse-up* (win mouse x y button state clicks ts)
  
    ;;(format t "win: ~A mouse: ~A x: ~A y: ~A button: ~A state: ~A clicks: ~A ts: ~A~%" win mouse x y button state clicks ts)
    (let ((event (list win mouse x y button state clicks ts)))
      (map-event (lambda (k v)
  		 (let ((collisions (check-intersect (car (children k)) k x y *viewport* *projection*)))
  		   (when collisions
  		     (when (and
  			    (eq button *click-button*)
  			    (eq *last-mouse-down-target* k))
  		       (let ((f (gethash k *on-mouse-click-objects*)))
  			 (when f (funcall f k collisions (cons :mouse-click event)))))
  		     (funcall v k collisions (cons :mouse-up event))
  		     (setf *last-mouse-down-target* nil))))
  	       
  	       *on-mouse-up-objects*)))
  
  
    ;; (loop for n in *buttons*
    ;;     collect (check-intersect (car (children n)) n x y *viewport* *projection*)))
  