unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* ffi-help: gtk demo updated
@ 2018-03-14  0:13 Matt Wette
  0 siblings, 0 replies; only message in thread
From: Matt Wette @ 2018-03-14  0:13 UTC (permalink / raw)
  To: guile-user

Hi All,

I am working on a ffi-helper (FH): a program that will read in a C dot-h file
and generate a Guile dot-scm file which defines a module to provide hooks into
the associated C library.

Lately I've been working to clean up user-level APIs.  A recoded demo of the GTK+
Hello World example is shown below.  This is based on 100% guile wrappers to the
loaded C libraries for gtk+, gobject, pango and glib.. The comments with the
(use-modules (ffi xxx)) lines below indicate the line-counts for the associated
ffi file and its auto-generated scm file.

If you `git clone -b c99dev git://git.savannah.nongnu.org/nyacc.git' you will find
the demo in examples/nyacc/lang/c99/ffi-exam/.  Read the ffi-helper section of the
HACKING file for hints to run the demo.  Caveat: Up until a few months ago I was
developing on MacOS; I am now on Ubuntu.


;; gtkdemo.scm
;;https://developer.gnome.org/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD

(use-modules (system ffi-help-rt))
(use-modules (bytestructures guile))

(use-modules (ffi glib))		; ffi:31 scm:31889
(use-modules (ffi gobject))		; ffi:26 scm:12044
(use-modules (ffi gtk2+))		; ffi:26 scm:92964

;; This will generate a FFI code wrapper around the lambda.  Then below
;; we use (fh-cast GCallback hello) to match the argument signature.
(define hello
   (make-GtkCallback
    (lambda (widget data)
      (display "Hello world!\n"))))

(define (delete-event widget event data)
   (display "delete event occurred\n")
   1)

(define (main)
   (define window #f)
   (define button #f)
   (define argc (bytestructure int 0))

   (gtk_init (pointer-to argc) NULL)

   (set! window (gtk_window_new 'GTK_WINDOW_TOPLEVEL))
   (g_signal_connect window "delete-event" delete-event NULL)
   (g_signal_connect window "destroy" ~gtk_main_quit NULL)
   (gtk_container_set_border_width window 10)

   (set! button (gtk_button_new_with_label "Hello World"))
   (g_signal_connect button "clicked" (fh-cast GCallback hello) NULL)
   (g_signal_connect_swapped button "clicked" ~gtk_widget_destroy window)
   (gtk_container_add window button)

   (gtk_widget_show button)
   (gtk_widget_show window)

   (gtk_main))

(main)

;; --- last line ---



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2018-03-14  0:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-14  0:13 ffi-help: gtk demo updated Matt Wette

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).