(ql:quickload 'lispbuilder-sdl)
worked right away on an ubuntu box, but failed (couldn’t find `cocoahelper) when I tried the sam on my Macbook.
The fix is to install SDL, then go to ~/quicklisp/dists/quicklisp/software/lispbuilder-20140113-svn/lispbuilder-sdl/cocoahelper
and type make
. After this, the ql:quickload
form succeeds.
However, the same dummy blank screen test program that worked fine on the linux box doesn’t seem to work anymore:
(defpackage :simple-sdl (:use :common-lisp :lispbuilder-sdl)) (in-package :simple-sdl) (defun main-screen () (sdl:with-init () (sdl:window 300 300 :title-caption "Simple SDL" :icon-caption "Simple SDL") (sdl:with-events () (:quit-event () t) (:key-down-event () (sdl:push-quit-event)))))
It fails with this backtrace:
Backtrace: 0: ("bogus stack frame") 1: ("foreign function: CGSScanconverterRenderRGBMask") 2: ("foreign function: create_rgb_bitmap") 3: ("foreign function: CGGlyphBitmapCreateWithPath_32") 4: ("foreign function: CGFontCreateGlyphBitmap") 5: ("foreign function: _ZN14CGGlyphBuilder22create_missing_bitmapsEPK17CGGlyphIdentifiermPPK13CGGlyphBitmap") 6: ("foreign function: render_glyphs") 7: ("foreign function: draw_glyph_bitmaps") 8: ("foreign function: ripc_DrawGlyphs") 9: ("foreign function: draw_glyphs") 10: ("foreign function: CTFontDrawGlyphsAtPositions") 11: ("foreign function: -[CUITextEffectStack drawGlyphs:inContext:usingFont:atPositions:count:lineHeight:inBounds:atScale:]") 12: ("foreign function: -[CUICatalog drawGlyphs:atPositions:inContext:withFont:count:stylePresetName:styleConfiguration:foregroundColor:]") 13: ("foreign function: -[NSLineFragmentRenderingContext drawAtPoint:inContext:]") 14: ("foreign function: _NSStringDrawingCore") 15: ("foreign function: _NSDrawTextCell") 16: ("foreign function: -[NSTitledFrame _drawTitleStringIn:withColor:]") 17: ("foreign function: -[NSThemeFrame _drawTitleStringInClip:]") 18: ("foreign function: -[NSThemeFrame drawFrame:]")
Just when I was getting excited about it … so what other platform-independent Lisp GUI should I use 😦 ?
BTW, while we’re knocking this (unfairly, of course), I should point out it doesn’t support SDL 2.x
I then stumbled on this library which seemed better maintained, and modified my example:
(defun main-screen () (sdl2:with-init (:everything) (sdl2:with-window (win :w 300 :h 300 :title "Simple SDL") (sdl2:with-event-loop (:method :poll) (:quit () t) (:keydown () (sdl2:push-quit-event))))))
Now a window did get created, but it didn’t play well with OSX (it wasn’t a “window” so much as a blank square of real estate on the screen, with a spinning beachball and no response).
So … the search for a basic simple drawing facility continues 😦