参考GObject Introspection官方网址:
http://live.gnome.org/GObjectIntrospection
gtk gjs教程:
http://zetcode.com/gui/javascriptgtktutorial/
在gnome shell中可以使用GJS来调用常用的GTK/CLUTTER/DBUS等库。这些库在编译的过程中通过生成.gir .typelib文件,使得gjs可以直接进行import。
这些文件的具体路径为:
/usr/share/gir-1.0/Gtk-3.0.gir
/usr/lib/girepository-1.0/Gtk-3.0.typelib
直接在gjs文件中的使用方法testgtk.js:
imports.gi.versions.Gtk = '2.0';
// GObject Introspection APIs are available from imports.gi.Modulename
const Gtk = imports.gi.Gtk
// JavaScript imports happen via imports.filename, where filename.js
// is assumed to be available in module/ folder
Gtk.init (0, null);
let win = new Gtk.Window({type: Gtk.WindowType.TOPLEVEL});
win.set_border_width(10);
win.connect('destroy', function (){
Gtk.main_quit();
});
let button = new Gtk.Button({label: "Hello, world"});
button.connect('clicked', function (){
button.set_label("Bar");
});
win.add(button);
button.show();
win.show();
Gtk.main();
运行:gjs testgtk.js
gir的层次结构:
BUILD TIME:
+-----------------------------------------------------------+
| foo.c |
| foo.h |
| |
| Library sources, with type annotations |
+-----------------------------------------------------------+
| |
gcc g-ir-scanner
| |
| V
| +------------------------+
| | Foo.gir |
| | |
| | <GI-name>.gir |
| | |
| | XML file |
| | |
| | Invocation information |
| | Required .gir files |
| | API docs |
| | |
| +------------------------+
| |
| g-ir-compiler
| |
DEPLOYMENT TIME: |
| |
V V
+-----------------------------+ +---------------------------+
| libfoo.so | | Foo.typelib |
| | | |
| | | Binary version of the |
| ELF file | | invocation info and |
| | | required .typelib files |
| Machine code, plus | +---------------------------+
| dynamic linkage information | A
| (DWARF debug data, etc) | |
+-----------------------------+ |
A |
| +---------------------------+
| | libgirepository.so |
+-----------+ | |
| libffi.so | | Can read typelibs and |
| |<-------+------>| present them in a |
+-----------+ | | libffi-based way |
| | |
| +---------------------------+
|
|
+----------------------------+
| Specific language bindings |
+----------------------------+