/cl-gtk4

GTK4/Libadwaita/WebKit binding for Common Lisp.

Primary LanguageCommon LispGNU Lesser General Public License v3.0LGPL-3.0

cl-gtk4

Requirement

Before getting started, please ensure these libraries are available in your system:

  • GTK4
  • GObject Introspection
  • WebKit2GTK (optional)
  • libadwaita (optional)

Theoretically, the application built with cl-gtk4 can run on most systems supported by GTK4 and most implementations that support CFFI callback (required by cl-gobject-introspection). The examples are tested to run on following implementations:

Usage

  1. Currently, cl-gtk4 is available on Ultralisp, so it can be downloaded via Quicklisp with Ultralisp installed as its distribution. To install cl-gtk4 manually, you can clone this repository along with the following dependencies into the local-projects under your Quicklisp installation root:
  2. Load the library with:
    • (ql:quickload :cl-gtk4)
    • (ql:quickload :cl-gtk4.adw) (if you need libadwaita)
    • (ql:quickload :cl-gtk4.webkit2) (if you need WebKit2GTK)
  3. For GTK4 usage, please refer to GTK API reference and check out the conversion rules for these APIs.

Examples

examples/screenshots/gtk4-simple.png

To run this example, eval the following in your REPL:

(ql:quickload :cl-gtk4/example)
(gtk4.example:simple)

Fibonacci Calculator (Bordeaux Threads)

examples/screenshots/gtk4-fibonacci.png

To run this example, eval the following in your REPL:

(ql:quickload :cl-gtk4/example)
(gtk4.example:fibonacci)

Simple Lisp REPL (Libadwaita)

examples/screenshots/adw.png

To run this example, eval the following in your REPL:

(ql:quickload :cl-gtk4.adw/example)
(adw.example:main)

Simple Web Browser (WebKit2GTK)

examples/screenshots/webkit2.png

To run this example, eval the following in your REPL:

(ql:quickload :cl-gtk4.webkit2/example)
(webkit2.example:main)

Deployment

The examples are ready for being built into executable if the implementation supports :program-op:

(asdf:operate :program-op :cl-gtk4/example)

Then you could find the executable file under the examples folder.

Note that:

  • On ECL, for unknown reason, the :entry-point of the ASDF system is ignored. This command should be used instead:
    (asdf:make-build :cl-gtk4/example :type :program :epilogue-code '(progn (uiop:symbol-call :gtk4.example :simple) (si:exit)))
        
  • On Microsoft Windows, it’s recommended to launch your application via Dependency Walker, then the shared libraries used by your application would appear in it. You should copy all these .dll files into the folder where you place the executable file. If you are using MSYS2, the folder structure might be like this:
    .
    ├── bin
    │   ├── gdbus.exe
    │   ├── libgio-2.0-0.dll
    │   ├── libgirepository-1.0-1.dll
    │   ├── libglib-2.0-0.dll
    │   ├── libgobject-2.0-0.dll
    │   ├── libgtk-4-1.dll
    │   ├── your_application.exe
    │   └── ...
    ├── lib
    │   ├── girepository-1.0
    │   ├── gtk-4.0
    │   └── ...
    └── share
        ├── icons
        └── ...
        

    The folder lib/girepository-1.0 is mandatory, without which your application won’t work as expected.