After I struggled a bit to get CCL's ffigen working, everything is working like a charm. Here is my initial take at doing cairo graphics. [Not that McCLIM already has a Cairo backend, written by --- You guess.]
(defun foo () (let ((dpy (#_XOpenDisplay +null-ptr+))) (unwind-protect (progn (let* ((w 400) (h 400) (screen (#_XDefaultScreen dpy)) (win (#_XCreateSimpleWindow dpy (#_XDefaultRootWindow dpy) 0 0 w h 0 (#_XBlackPixel dpy screen) (#_XWhitePixel dpy screen))) (visual (#_XDefaultVisual dpy screen)) (surface (#_cairo_xlib_surface_create dpy win visual w h))) ;; (#_cairo_xlib_surface_set_size surface w h) ;; (ccl:with-cstrs ((x "CCL meets Xlib and Cairo")) (#_XStoreName dpy win x)) (#_XMapWindow dpy win) ;; (#_XSelectInput dpy win #$ExposureMask) ;; (rlet ((event :<XE>vent)) (loop (process-wait "Waiting for X11 event" (lambda () (not (zerop (#_XPending dpy))))) (#_XNextEvent dpy event) (case (pref event :<XE>vent.type) (#.#$Expose (let ((cr (#_cairo_create surface))) (unwind-protect (progn (#_cairo_set_source_rgb cr 0d0 0d0 0d0) (#_cairo_set_font_size cr 16d0) (#_cairo_translate cr (coerce (/ w 2) 'double-float) (coerce (/ h 2) 'double-float)) (loop for phi below (* 2 pi) by (/ pi 10) do (#_cairo_save cr) (#_cairo_rotate cr (coerce phi 'double-float)) (#_cairo_move_to cr 50d0 0d0) (with-cstrs ((s "CCL greets Cairo!")) (#_cairo_show_text cr s)) (#_cairo_restore cr))) (#_cairo_destroy cr)))) ;; (otherwise (format t "~&Unrecognized event type ~D." (pref event :<XE>vent.type)))))))) (#_XCloseDisplay dpy))))
Which gets you this. Looks familiar?