sample xlib painter added by dsp on Wed May 9 21:30:38 2012
(let ((display (xopendisplay #f)))
(assert display)
(let* ((screen (xdefaultscreen display))
(root (xrootwindow display screen))
(window (xcreatesimplewindow
display root 100 200 300 50 0
(xblackpixel display screen)
(xwhitepixel display screen))))
(assert window)
(let ((font (xloadfont display "10x20")))
(assert font)
(let ((gc (xcreategc display window 0 #f))
(event (make-xevent))
(depth (xdefaultdepth display screen))
(ts1 (make-xsegment))
(ts2 (make-xsegment)))
(let ((painter (lambda (x y s1 s2)
(xsetforeground display gc (xblackpixel display screen))
(xsetbackground display gc (xwhitepixel display screen))
(xsetfunction display gc GXCOPY)
(xsetfont display gc font)
(xselectinput display window (bitwise-ior EXPOSUREMASK BUTTONPRESSMASK))
(xmapwindow display window)
(xnextevent display event)
(xdrawstring display window gc 100 30 "Paranoia is being computed..." 28)
(xdrawrectangle display window gc x y s1 s2)
(set-xsegment-x1! ts1 10)
(set-xsegment-x2! ts1 222)
(set-xsegment-y1! ts1 30)
(set-xsegment-y2! ts1 10)
(set-xsegment-x1! ts2 22)
(set-xsegment-x2! ts2 130)
(set-xsegment-y1! ts2 333)
(set-xsegment-y2! ts2 129)
;;THIS LINE HERE NEEDS a C_POINTER not a list
(xdrawsegments display window gc (pointer ts1 ts2) 2)
(letrec ((leloop (lambda (num)
(cond ((< num 10)
(xdrawarc display window gc x y (/ s1 num) (/ s2 num) 0 (/ 19000 num))
;(xdrawline display window gc (+ x (/ x num)) (+ y (/ y num)) (/ s1 2) (/ s2 2))
(if (> num 2)
(xdrawrectangle display window gc (+ x (/ s1 num)) (+ y (/ s2 num)) (/ s1 num ) (/ s2 num )))
(leloop (+ num 1)))))))
(leloop 1))
(xflush display)
(xnextevent display event))))
(painter 90 500 200 200))))))