../../scx <<EOF

,batch on
,open xlib
,batch off

(define (regions)
  (let* ((dpy (open-display))
	(cm (display-default-colormap dpy))
	(black (black-pixel dpy))
	(white (white-pixel dpy))
	(blue (alloc-named-color cm 'blue))
	(win (create-window (display-root-window dpy) 500 500 
			    'event-mask '(button-press exposure)
			    'background-pixel white))
	(gc (create-gcontext win
			     'background white
			     'foreground black))
	
	(rectangles '((10 20 60 60) (50 100 30 30)))
	(colors (list black blue))
	(regions-alist 
	 (list (cons (union-rectangle-with-region (car rectangles)
						  (create-region))
		     "black rectangle")
	       (cons (union-rectangle-with-region (cadr rectangles)
						  (create-region))
		     "blue rectangle")))

	(handle-event 
	 (lambda (e)
	   (let ((args (event-args e))
		 (type (event-type e)))
	     (case type
	       ;; Zeichnen...
	       ((expose) (begin
			   (for-each (lambda (rect color)
				       (set-gcontext-foreground! gc color)
				       (fill-rectangle win gc rect))
				     rectangles colors)
			   #t))
	       ;; Hit-Tests
	       ((button-press)
		(let* ((x (cdr (assq 'x args)))
		       (y (cdr (assq 'y args)))
		       (rs (filter (lambda (r-n)
				     (point-in-region? (car r-n)
						       x y))
				   regions-alist)))
		  (for-each (lambda (region-name)
			      (display "You clicked: ")
			      (display (cdr region-name))
			      (newline))
			    rs)
		  ;; break if none was hit.
		  (not (null? rs))))
	       )))))

    (map-window win)
    (let loop ()
      (display-flush-output dpy)
      (let ((e (next-event dpy)))
	(if (handle-event e)
	    (loop)
	    (close-display dpy))))))

(regions)
	


,exit
y
EOF