RosettaCodeData/Task/Window-creation-X11/Common-Lisp/window-creation-x11.lisp
2019-09-12 10:33:56 -07:00

29 lines
1.2 KiB
Common Lisp

;;; Single-file/interactive setup; large applications should define an ASDF system instead
(let* ((display (open-default-display))
(screen (display-default-screen display))
(root-window (screen-root screen))
(black-pixel (screen-black-pixel screen))
(white-pixel (screen-white-pixel screen))
(window (create-window :parent root-window
:x 10 :y 10
:width 100 :height 100
:background white-pixel
:event-mask '(:exposure :key-press)))
(gc (create-gcontext :drawable window
:foreground black-pixel
:background white-pixel)))
(map-window window)
(unwind-protect
(event-case (display :discard-p t)
(exposure ()
(draw-rectangle window gc 20 20 10 10 t)
(draw-glyphs window gc 10 50 "Hello, World!")
nil #| continue receiving events |#)
(key-press ()
t #| non-nil result signals event-case to exit |#))
(when window
(destroy-window window))
(when gc
(free-gcontext gc))
(close-display display)))