mirror of https://github.com/subgraph/fw-daemon
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
6.4 KiB
207 lines
6.4 KiB
gotk3 [![GoDoc](https://godoc.org/github.com/gotk3/gotk3?status.svg)](https://godoc.org/github.com/gotk3/gotk3)
|
|
=====
|
|
|
|
[![Build Status](https://travis-ci.org/gotk3/gotk3.png?branch=master)](https://travis-ci.org/gotk3/gotk3)
|
|
|
|
The gotk3 project provides Go bindings for GTK+3 and dependent
|
|
projects. Each component is given its own subdirectory, which is used
|
|
as the import path for the package. Partial binding support for the
|
|
following libraries is currently implemented:
|
|
|
|
- GTK+3 (3.12 and later)
|
|
- GDK 3 (3.12 and later)
|
|
- GLib 2 (2.36 and later)
|
|
- Cairo (1.10 and later)
|
|
|
|
Care has been taken for memory management to work seamlessly with Go's
|
|
garbage collector without the need to use or understand GObject's
|
|
floating references.
|
|
|
|
## Sample Use
|
|
|
|
The following example can be found in [Examples](https://github.com/gotk3/gotk3-examples/).
|
|
|
|
```Go
|
|
package main
|
|
|
|
import (
|
|
"github.com/gotk3/gotk3/gtk"
|
|
"log"
|
|
)
|
|
|
|
func main() {
|
|
// Initialize GTK without parsing any command line arguments.
|
|
gtk.Init(nil)
|
|
|
|
// Create a new toplevel window, set its title, and connect it to the
|
|
// "destroy" signal to exit the GTK main loop when it is destroyed.
|
|
win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
|
if err != nil {
|
|
log.Fatal("Unable to create window:", err)
|
|
}
|
|
win.SetTitle("Simple Example")
|
|
win.Connect("destroy", func() {
|
|
gtk.MainQuit()
|
|
})
|
|
|
|
// Create a new label widget to show in the window.
|
|
l, err := gtk.LabelNew("Hello, gotk3!")
|
|
if err != nil {
|
|
log.Fatal("Unable to create label:", err)
|
|
}
|
|
|
|
// Add the label to the window.
|
|
win.Add(l)
|
|
|
|
// Set the default window size.
|
|
win.SetDefaultSize(800, 600)
|
|
|
|
// Recursively show all widgets contained in this window.
|
|
win.ShowAll()
|
|
|
|
// Begin executing the GTK main loop. This blocks until
|
|
// gtk.MainQuit() is run.
|
|
gtk.Main()
|
|
}
|
|
```
|
|
|
|
To build the example:
|
|
|
|
```
|
|
$ go build example.go
|
|
|
|
```
|
|
|
|
To build this example with older gtk version you should use gtk_3_10 tag:
|
|
|
|
```
|
|
$ go build -tags gtk_3_10 example.go
|
|
|
|
```
|
|
|
|
### examples for gtk3
|
|
|
|
```Go
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/gotk3/gotk3/glib"
|
|
"github.com/gotk3/gotk3/gtk"
|
|
)
|
|
|
|
// Simple Gtk3 Application written in go.
|
|
// This application creates a window on the application callback activate.
|
|
// More GtkApplication info can be found here -> https://wiki.gnome.org/HowDoI/GtkApplication
|
|
|
|
func main() {
|
|
// Create Gtk Application, change appID to your application domain name reversed.
|
|
const appID = "org.gtk.example"
|
|
application, err := gtk.ApplicationNew(appID, glib.APPLICATION_FLAGS_NONE)
|
|
// Check to make sure no errors when creating Gtk Application
|
|
if err != nil {
|
|
log.Fatal("Could not create application.", err)
|
|
}
|
|
// Application signals available
|
|
// startup -> sets up the application when it first starts
|
|
// activate -> shows the default first window of the application (like a new document). This corresponds to the application being launched by the desktop environment.
|
|
// open -> opens files and shows them in a new window. This corresponds to someone trying to open a document (or documents) using the application from the file browser, or similar.
|
|
// shutdown -> performs shutdown tasks
|
|
// Setup Gtk Application callback signals
|
|
application.Connect("activate", func() { onActivate(application) })
|
|
// Run Gtk application
|
|
os.Exit(application.Run(os.Args))
|
|
}
|
|
|
|
// Callback signal from Gtk Application
|
|
func onActivate(application *gtk.Application) {
|
|
// Create ApplicationWindow
|
|
appWindow, err := gtk.ApplicationWindowNew(application)
|
|
if err != nil {
|
|
log.Fatal("Could not create application window.", err)
|
|
}
|
|
// Set ApplicationWindow Properties
|
|
appWindow.SetTitle("Basic Application.")
|
|
appWindow.SetDefaultSize(400, 400)
|
|
appWindow.Show()
|
|
}
|
|
```
|
|
|
|
|
|
```Go
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/gotk3/gotk3/glib"
|
|
"github.com/gotk3/gotk3/gtk"
|
|
)
|
|
|
|
// Simple Gtk3 Application written in go.
|
|
// This application creates a window on the application callback activate.
|
|
// More GtkApplication info can be found here -> https://wiki.gnome.org/HowDoI/GtkApplication
|
|
|
|
func main() {
|
|
// Create Gtk Application, change appID to your application domain name reversed.
|
|
const appID = "org.gtk.example"
|
|
application, err := gtk.ApplicationNew(appID, glib.APPLICATION_FLAGS_NONE)
|
|
// Check to make sure no errors when creating Gtk Application
|
|
if err != nil {
|
|
log.Fatal("Could not create application.", err)
|
|
}
|
|
|
|
// Application signals available
|
|
// startup -> sets up the application when it first starts
|
|
// activate -> shows the default first window of the application (like a new document). This corresponds to the application being launched by the desktop environment.
|
|
// open -> opens files and shows them in a new window. This corresponds to someone trying to open a document (or documents) using the application from the file browser, or similar.
|
|
// shutdown -> performs shutdown tasks
|
|
// Setup activate signal with a closure function.
|
|
application.Connect("activate", func() {
|
|
// Create ApplicationWindow
|
|
appWindow, err := gtk.ApplicationWindowNew(application)
|
|
if err != nil {
|
|
log.Fatal("Could not create application window.", err)
|
|
}
|
|
// Set ApplicationWindow Properties
|
|
appWindow.SetTitle("Basic Application.")
|
|
appWindow.SetDefaultSize(400, 400)
|
|
appWindow.Show()
|
|
})
|
|
// Run Gtk application
|
|
application.Run(os.Args)
|
|
}
|
|
```
|
|
|
|
## Documentation
|
|
|
|
Each package's internal `go doc` style documentation can be viewed
|
|
online without installing this package by using the GoDoc site (links
|
|
to [cairo](http://godoc.org/github.com/gotk3/gotk3/cairo),
|
|
[glib](http://godoc.org/github.com/gotk3/gotk3/glib),
|
|
[gdk](http://godoc.org/github.com/gotk3/gotk3/gdk), and
|
|
[gtk](http://godoc.org/github.com/gotk3/gotk3/gtk) documentation).
|
|
|
|
You can also view the documentation locally once the package is
|
|
installed with the `godoc` tool by running `godoc -http=":6060"` and
|
|
pointing your browser to
|
|
http://localhost:6060/pkg/github.com/gotk3/gotk3
|
|
|
|
## Installation
|
|
|
|
gotk3 currently requires GTK 3.6-3.16, GLib 2.36-2.40, and
|
|
Cairo 1.10 or 1.12. A recent Go (1.3 or newer) is also required.
|
|
|
|
For detailed instructions see the wiki pages: [installation](https://github.com/gotk3/gotk3/wiki#installation)
|
|
|
|
## TODO
|
|
- Add bindings for all of GTK+
|
|
- Add tests for each implemented binding
|
|
|
|
## License
|
|
|
|
Package gotk3 is licensed under the liberal ISC License.
|