|
// gtk.wren (GTK3 bindings)
|
|
|
|
foreign class Gtk {
|
|
foreign static init_()
|
|
foreign static run_()
|
|
foreign static quit_()
|
|
|
|
static init() { init_() }
|
|
static run() { run_() }
|
|
static quit() { quit_() }
|
|
}
|
|
|
|
foreign class Window {
|
|
// Allocated on the C side; init_ configures the GtkWindow
|
|
construct new(title, width, height) {
|
|
init_(title, width, height)
|
|
}
|
|
|
|
// --- foreigns ---
|
|
foreign init_(title, width, height)
|
|
foreign setTitle(title)
|
|
foreign setDefaultSize(width, height)
|
|
foreign add(child)
|
|
foreign showAll()
|
|
|
|
// DO NOT declare "foreign onDestroy(_)" here; that would collide with the wrapper below.
|
|
foreign onDestroy_(fn)
|
|
|
|
// --- wrappers with validation ---
|
|
onDestroy(fn) {
|
|
if (!(fn is Fn) || fn.arity != 0) Fiber.abort("onDestroy expects Fn with arity 0")
|
|
onDestroy_(fn)
|
|
}
|
|
}
|
|
|
|
foreign class Box {
|
|
// Two convenience constructors mapping to distinct foreign inits
|
|
construct vbox(spacing) { vbox_(spacing) }
|
|
construct hbox(spacing) { hbox_(spacing) }
|
|
|
|
// --- foreigns ---
|
|
foreign vbox_(spacing)
|
|
foreign hbox_(spacing)
|
|
foreign packStart(child, expand, fill, padding)
|
|
}
|
|
|
|
foreign class Button {
|
|
construct new(label) { init_(label) }
|
|
|
|
// --- foreigns ---
|
|
foreign init_(label)
|
|
foreign setLabel(label)
|
|
|
|
// Distinct foreign name to avoid colliding with the wrapper
|
|
foreign onClicked_(fn)
|
|
|
|
// --- wrapper ---
|
|
onClicked(fn) {
|
|
if (!(fn is Fn) || fn.arity != 0) Fiber.abort("onClicked expects Fn with arity 0")
|
|
onClicked_(fn)
|
|
}
|
|
}
|
|
|
|
foreign class Entry {
|
|
construct new() { init_() }
|
|
|
|
// --- foreigns ---
|
|
foreign init_()
|
|
foreign setText(text)
|
|
foreign text
|
|
foreign onActivate_(fn)
|
|
foreign onChanged_(fn)
|
|
|
|
// --- wrappers ---
|
|
onActivate(fn) {
|
|
if (!(fn is Fn) || fn.arity != 0) Fiber.abort("onActivate expects Fn with arity 0")
|
|
onActivate_(fn)
|
|
}
|
|
onChanged(fn) {
|
|
if (!(fn is Fn) || fn.arity != 0) Fiber.abort("onChanged expects Fn with arity 0")
|
|
onChanged_(fn)
|
|
}
|
|
}
|
|
|
|
foreign class Label {
|
|
construct new(text) { init_(text) }
|
|
|
|
// --- foreigns ---
|
|
foreign init_(text)
|
|
foreign setText(text)
|
|
}
|
|
|