Spice bindings for the GTK 4 GUI toolkit.
[dependencies]
gtk4 = "^0.1.0"import "spice_packages/gtk4/gtk4";
The package links against the system GTK 4 library, so its development files have to be installed:
| Platform | Package |
|---|---|
| Debian/Ubuntu | libgtk-4-dev |
| Fedora | gtk4-devel |
| macOS | brew install gtk4 |
| Windows | GTK 4 from MSYS2 (add its lib dir to LIBRARY_PATH) |
Build the widget tree in code:
import "spice_packages/gtk4/gtk4";
p onYesClick(GtkWidget widget) {
gPrint("Hello World!\n");
}
p onCancelClick(GtkWidget widget, GtkWindow window) {
window.destroy();
}
p activate(GtkApplication app, GPointer data) {
dyn window = app.newWindow();
window.setTitle("Do you want to continue");
window.setDefaultSize(350, 140);
dyn box = GtkBox(GtkOrientation::Horizontal);
box.setHAlign(GtkAlign::Center);
box.setVAlign(GtkAlign::Center);
window.setChild(box);
dyn btnCancel = GtkButton("Cancel");
btnCancel.setOnClickCallback(onCancelClick, window);
box.append(btnCancel);
dyn btnYes = GtkButton("Yes");
btnYes.setOnClickCallback(onYesClick);
box.append(btnYes);
window.present();
}
f<int> main(int argc, string[] argv) {
dyn app = GtkApplication("com.example.App");
app.setActivateCallback(activate);
return app.run(argc, argv);
}
Or load it from a GtkBuilder UI file:
p activate(GtkApplication app, GPointer data) {
GtkBuilder builder;
Result<bool> result = builder.addFromFile("window.ui");
if result.isErr() {
const Error& err = result.getErr();
err.triggerPanic();
}
dyn window = builder.getObject<GtkWindow>("window");
window.setApplication(app);
dyn button = builder.getObject<GtkButton>("button");
button.setOnClickCallback(onYesClick);
window.setVisible();
}
| Type | Members |
|---|---|
GtkApplication |
GtkApplication(applicationId, flags), setActivateCallback, run, newWindow |
GtkWindow |
setTitle, setDefaultSize, setChild, setApplication, present, setVisible, close, destroy |
GtkBox |
GtkBox(orientation, spacing), append, setHAlign, setVAlign |
GtkButton |
GtkButton(label), setOnClickCallback(callback), setOnClickCallback(callback, data) |
GtkWidget |
setHAlign, setVAlign |
GtkBuilder |
addFromFile, getObject<T> |
gPrint |
Print through GLib's g_print |
The bindings cover a small part of GTK. Contributions for more widgets are welcome.