On 2005-dec-11, at 07:00, ssmith wrote:
I was trying out CFFI at the weekend and was pleasantly surprised at
how simple it was to create some simple bindings to GTK:

    http://people.vislab.usyd.edu.au/~ssmith/lisp/cffi-gtk-test.lisp

Hello,

Looking at your code, I have a couple of suggestions:

1. (defcfun ("gtk_window_new" gtk-window-new) ...)

This is identical to (defcfun "gtk_window_new" ...), CFFI will convert the name automatically for you and generate a function named GTK-WINDOW-NEW.

2. WITH-FOREIGN-OBJECT allocates memory, if what you want to do is bind the return value of some foreign function to a variable use let. So your gtk-button-test should look something like this:

(defun gtk-button-test ()
  (let (win button)
    (gtk-init (null-pointer) (null-pointer))
    (setf win (gtk-window-new :gtk-window-toplevel))
    (g-signal-connect win "delete_event"
                      (callback delete-event) (null-pointer))
    (gtk-container-set-border-width win 10)
    (setf button (gtk-button-new-with-label "Press Me"))
    (g-signal-connect button "clicked"
    (callback click-event) (null-pointer))
    (gtk-container-add win button))
    (gtk-widget-show-all win)
    (gtk-main)))

BTW, have you looked at cells-gtk? It might be nice to port it to CFFI *hint* *hint*. :-) It'd be very nice, since IIRC it currently only supports CLISP, Lispworks and Allegro. You'd have my support, by e-mail or in #lisp!

--
Luís Oliveira
http://student.dei.uc.pt/~lmoliv/
Equipa Portuguesa do Translation Project
http://www.iro.umontreal.ca/translation/registry.cgi?team=pt

_______________________________________________
cffi-devel mailing list
cffi-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel

Reply via email to